Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2022, 16:11   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию FormResize при запуске программы

При запуске программы от 2 до 4 раз вызывается процедура FormResize
Хотелось бы узнать, на какое действие программа так реагирует?

Это при том, что я сделал так, чтобы изначально у формы не было события FormResize, а только в конце выполнения FormCreate присваивается значение событию FormResize

Вообще, лично мне нужно, чтобы это происходило ровно 1 раз, потому как в процедуре FormResize по местам расставляются все элементы, адаптируясь под изменение размера окна
Kronos913 вне форума Ответить с цитированием
Старый 18.09.2022, 16:17   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Как минимум 1 раз WM_SIZE приходит от Windows после выхода из WM_CREATE. Т.е. после выхода из FormCreate и окончании обработки сообщения WM_CREATE в очереди сообщений уже есть сообщение WM_SIZE, которое и приводит к вызову FormResize. Остальные вызовы FormResize порождаются работой классов Delphi.
macomics вне форума Ответить с цитированием
Старый 18.09.2022, 16:31   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Вообще, лично мне нужно, чтобы это происходило ровно 1 раз, потому как в процедуре FormResize по местам расставляются все элементы, адаптируясь под изменение размера окна
Если элементы расставляются по местам, тогда не должно быть важно количество вызовов FormResize. При каждом вызове элементы так и так будут правильно расположены в соответствии с текущими размерами окна.

ADD: Просто интересно, что такого вы расставляете по местам, что требует лимита вызовов. Тем более, что при изменении пользователем размеров окна при помощи мыши FormResize будет вызываться сотни раз, пока пользователь не отпустит рамку окна.

Код:
procedure FormResize(Sender: TObject);
begin
  if ClientWidth <> Resized.Width or ClientHeight <> Resized.Height then begin
    ...
    Resized := Rect(0, 0, ClientWidth, ClientHeight);
  end;
end;

Последний раз редактировалось macomics; 18.09.2022 в 17:16.
macomics вне форума Ответить с цитированием
Старый 18.09.2022, 20:55   #4
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
ADD: Просто интересно, что такого вы расставляете по местам, что требует лимита вызовов. Тем более, что при изменении пользователем размеров окна при помощи мыши FormResize будет вызываться сотни раз, пока пользователь не отпустит рамку окна.
Это скорее чтобы много раз бесцельно не исполнялся один и тот же код, чтобы быстрее шла загрузка окна
Kronos913 вне форума Ответить с цитированием
Старый 18.09.2022, 20:58   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Это не повлияет на загрузку. FormResize выполняется после создания всех дочерних окон - загрузка окна к этому моменту уже закончена. Но окно еще не показано.
macomics вне форума Ответить с цитированием
Старый 18.09.2022, 21:16   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
чтобы быстрее шла загрузка окна
У вас она тормозит или в чем проблема?
Arigato вне форума Ответить с цитированием
Старый 19.09.2022, 16:20   #7
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Сохранять значения размеров формы и сверять их в начале процедуры - это единственное решение, как сократить кучу лишних действий?
Kronos913 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть три программы. Их нужно объеденить в одну, тоесть чтоб при запуске программы были пункты меню для каждой из программ afirat Помощь студентам 9 28.04.2012 12:39
FormResize 1 раз xrob Общие вопросы Delphi 9 28.11.2011 15:46
CustomComponent и FormResize xrob Компоненты Delphi 3 14.09.2011 15:46
Проблема при запуске программы Neo_AVE C++ Builder 0 04.05.2011 15:38
mp3 при запуске программы - ? Evgenii Общие вопросы Delphi 8 12.08.2009 08:11