Перейти к содержанию
Fire Monkey от А до Я

des80

Пользователи
  • Постов

    40
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные des80

  1. Сегодня внезапно узнал от коллеги, что при написании dll на Delphi к приложению, которое их использует нужно обязательно подкладывать файл borlndmm.dll, т.к. иначе могут возникать ошибки и утечки памяти при использовании dll.
    Это действительно так или это устаревшая информация? в интернете не нашел никакой информации об этом вообще, хотя по идее это должно быть описано в каждом уроке о создании dll в Delphi.

  2. 51 минуту назад, Barbanel сказал:

    Посмотрите пример, о таком поведении я говорил в самом начале.

    В нем есть две формы, главная и второстепенная. На второстепенной я для наглядности отображаю гиф (по рецепту нашего китайского коллеги, да)))
    В главной форме я динамически создаю второстепенную и отключаю в ней реакцию на мышь, при этом гиф продолжает нормально крутиться во второй форме.
    Вы должны сами заботиться о координатах и видимости второстепенной формы.

    процедура SetMouse_Unsenitive - отключает реакцию на мышь,
    процедура SetMouse_Senitive- включает обратно реакцию на мышь.

    TransparentWindow.zip

    Спасибо большое! Это именно то что нужно, а я уже тут начал менять стандартный модуль FMX.Platform.Win, но ваш способ проще и красивей

  3. 1 минуту назад, Barbanel сказал:

    Именно это окно с видео и есть в данный момент второстепенное? То, на которое не нужно реагировать.

    да,  я могу воспроизводить видео только на форме, потому что все остальное в fmx хэндлов не имеет то эта форма у меня висит alwaysontop. Чтобы она не перекрывала окна других приложений, которые могут быть открыты на компе эта форма просто пропадает когда главная форма деактивируется. Поэтому мне нежелетаельно, чтобы она активировалась при клике, потому что срабатывает Deactivate у главного окна и она пропадает. Если сделать через OnClick и возвращать фокус, то будет мерцание некрасивое, ну и другие причины есть, которые долго расписывать.

  4. 15 часов назад, FREEFAR сказал:

    а почему вариант с Frame не рассмотреть?

    потому что у меня с видеорегистратора воспроизводится поток видео на форме. Мне нужно чтобы объект имел handle окна, а фрейм handle не имеет

  5. OnClick не вариант, потому что на событии OnDeactivate основной формы происходят некоторые вещи, которые не должны происходить при клике конкретно на эту форму.

    У меня именно FMX форма. На VCL я бы просто переопределил процедуру которая отлавливает события и при WM_ACTIVATE поставил заглушку, а в FMX я так сделать не могу

  6. У меня есть форма AlwaysOnTop, я пытаюсь сделать чтобы она не активировалась, не забирала фокус у другой формы при клике на нее, а просто висела поверх всех окон. Процедура Activate у ее предка TCommonCustomForm не виртуальная, поэтому я не могу ее переопределить. Я пробовал через helper

      TVideoFormHelper = class helper for TCommonCustomForm
      public
        procedure Activate;
      end;
    
    procedure TVideoFormHelper.Activate;
    begin
       showmessage('123');
    end;

    Но все равно почему то не срабатывает. Сообщение 123 не показывается, а вызывается обычный Activate класса. Что я делаю не так в хелпере? Есть ли какой то другой способ? И если все таки можно через хелпер то как мне сделать чтобы функция ничего не делала только если класс TVideoForm, а в остальных случаях работала как обычно

    if self is TVideoForm then 
    
    exit
    
    else
    
    // тут вызываем нормальный activate класса TCommonCustomForm

     

     

  7. У меня есть панель которая находится в скроллбоксе, у панели есть эффект тени, размер панели может быть очень большим, в зависимости от данных из бд, которые на ней рисуются. Размер может доходить до 15000 пикселей, в результате вылезает ошибка bitmap size too big. Что касается отрисовки данных на ней, то я могу легко решить эту проблему отрисовывая только те данные, которые видны в текущий момент в скролл боксе, но остался только эффект тени, который мешает решить эту проблему. Можно ли каким то образом отрисовывать только видимую в скроллбоксе часть тени, а не всю, чтобы картинка тени не растягивалась до недопустимых размеров?

  8. Передо мной стоит задача сделать видео плеер, в котором я могу запускать, останавливать видео с регистратора. Видео с регистратора потоком рисуется на форму( передаю в функцию handle окна и рисуется). Но мне нужно чтобы видео было не в отдельном окне, а на панельке, поэтому я придумал создавать форму на  которою идет видео, спрятать ее за пределами экрана и рисовать то что на ней нарисовано на панельку по таймеру каждые 10 миллисекунд. Однако PaintTo не срабатывает, он делает скриншот формы со всемя компонентами на ней, но игнорирует то что на ней рисует поток с видеорегистратора. Как можно сделать скриншот формы вместе с картинкой с регистратора? 

     

    image.thumb.png.74e5aaf2879ffdcc5ee2ed0421a874d5.png

  9. 15 часов назад, Дмитрий Ш. сказал:

    des80, с такой позицией помощи можно не ждать.

    хамству тут не место

    какой еще позицией? Я всего то задал вопрос, а зарипов его неправильно понял и киданул мне решение, которое я слил, это задело его опухшее чсв и он стал бросаться фразочками типо "говнокод" или "я не хочу думать! я хочу кнопку, нажимаешь и все работает" , на такой бред я не мог не ответить.

  10. 12 минут назад, Равиль Зарипов (ZuBy) сказал:

    не хорошо так выражаться, можно и бан получить

    1. то что у тебя 100 форм это твоя проблема
    2. то что тебе лень прописать одну строчку в создании одного типа компонентов, то думаю что там говно-код
    3. и если бы ты понял, что я предлагаю, ты бы уже давно реализовал, а не писал на форуме "остроумный" пост, в коде добавляется только одна строчка и это не ApplyFontToForm (если там не говно-код)

    я бы предложил еще один кардинальный вариант, но не буду

    ну тут 2 варианта :

    либо ты слабоумный, раз не понял что я имел ввиду после такого разжевывания

    либо я непонятно объясняю суть проблемы

  11. 11 минут назад, Равиль Зарипов (ZuBy) сказал:

    "я не хочу думать! я хочу кнопку, нажимаешь и все работает"

    как я вижу эту реализацию:

    делается отдельный модуль, в который перемещается код

    
    procedure ChangeFont(const aControl: TControl; const aFontName: string);
    const
      StyledSett = [TStyledSetting.Size, TStyledSetting.Style, TStyledSetting.FontColor];
    var
      aTextSettings: ITextSettings;
      I: Integer;
    begin
      if aControl is TListView then
      begin
        (aControl as TListView).ItemAppearanceObjects.ItemObjects.Text.Font.Family := aFontName;
        (aControl as TListView).ItemAppearanceObjects.ItemObjects.Detail.Font.Family := aFontName;
      end
      else
      begin
        if Supports(aControl, ITextSettings, aTextSettings) then
        begin
          aTextSettings.StyledSettings := StyledSett;
          aTextSettings.TextSettings.Font.Family := aFontName;
        end;
        for I := 0 to aControl.ControlsCount - 1 do
          ChangeFont(aControl.Controls[I], aFontName);
      end;
    end;
    
    ..................................................
    procedure ApplyFontToForm(const aForm: TForm; const aFontName: string;);
    var
      I: Integer;
    begin
      for I := 0 to aForm.ComponentCount - 1 do
      begin
        if aForm.Components[I] is TControl then
          ChangeFont(aForm.Components[I] as TControl, aFontName);
      end;
    end;

    прописываем ChangeFont и ApplyFontToForm до implementation

    и в форме после создания и/или в OnShow пишем ApplyFontToForm(Form30, 'Roboto');

    даже незнаю как можно сделать проще

    ты дурак или нет?

     

    1.У меня уже есть проект, в котором 100 форм, я прекрасно знаю как это сделать, я прекрасно знаю что мне нужно прописать ApplyFontToForm в OnShow каждой формы, но мне придется делать это 100 раз, а я задал здесь этот вопрос, чтобы узнать можно ли ОДИН раз задать что Arial это дефолтный шрифт, шрифт по умолчанию. Во всех 100 формах у меня везде шрифт прописан (default). А что это за шрифт default? какой шрифт по факту туда подставляется? и можно ли ЗАМЕНИТЬ этот шрифт по умолчанию. Этот шрифт задается в настройках винды? или его можно задать отдельно в моей программе?

    2.Ок, я написал 100 раз на 100 формах ApplyFontToForm в OnShow. А потом у меня создаются кнопки и лабелы после выполнения этого кода и на ней будет стандартный шрифт, а не тот который я задал в ApplyFontToForm. Да я могу без проблем задать шрифт при создании компонента, но КОД УЖЕ НАПИСАН И ЕГО МНОГО и мне опять таки мне придется это делать много много раз, во многих местах прописывать Familyfont='Arial'. Понимаешь, нет?

  12. 2 минуты назад, Дмитрий Ш. сказал:

    Delphi умеет наследование форм.

    Делаете основную форму с общим поведением для всех форм и все формы проекта наследуете от этой формы.

     

    Да поздно уже наследовать. Проект уже написан. И опять таки это не решает проблему с динамически создаваемыми компонентами на формах-наследниках

  13. Только что, Равиль Зарипов (ZuBy) сказал:

    эмм..

    1. а где должен шрифт меняться??
    2. что вам мешает у динамически создаваемых компонентов прописать нужный шрифт?
    3. да хоть 100 форм, в чем проблема?

    1.я хочу в одном месте централизованно написать код, чтобы (default) во всех формах, на всех компонентах, включая те, которые создаются после выполнения этого кода воспринимался как какой то определенный шрифт. То есть задать какой то шрифт дефолтным.

    2.ничего не мешает, просто нужно в 100500 мест залезть в коде и прописать FontFamily:='Arial';

    3.проблема в том, что мне придется на каждой форме это вызывать, мне придется это 100 раз копипастить. Чтобы этого не делать я и задал этот вопрос возможно ли задать какой то шрифт дефолтным в принципе

  14. 17 минут назад, Равиль Зарипов (ZuBy) сказал:

    ну например вот так

    ChangeFont.zip

    Этот код просто заменяет у всех компонентов данной формы шрифты. Если у меня 30 форм то мне придется на каждой форме прописывать этот код. И этот код не поменяет шрифт у динамически создаваемых компонентов. Другого нет способа?

  15. Есть ли возможность указать какой шрифт должен использоваться по дефолту в моем приложении на всех формах и на всех контролах? У них сейчас стоит у всех (default), я хочу в одном месте всем задать, чтобы вместо (default) подставлялся Arial например

×
×
  • Создать...