Я открываю Form2.ShowModal в FormMain. Я хочу, чтобы приложение отображало форму Form2 без изменений при доступе к базе данных (речь не идет о новых отображаемых данных). Однако при выполнении FormShow отображается только внешняя граница и некоторые сломанные части, некоторые сломанные части FormMain просвечивают. Это ужасно.
Мне не удалось найти способ заставить Delphi немедленно перерисовать форму, а затем выполнить трудоемкую процедуру MyOpenData. После заключения MyOpenData все в порядке.
procedure TForm2.FormShow(Sender: TObject);
begin
Invalidate;
Refresh;
MyOpenData; { needs some seconds of database accesses }
end;
Альтернатива:
procedure TForm2.FormShow(Sender: TObject);
begin
Invalidate;
Refresh;
SendMessage(Handle, wm_paint, 0, 0);
PostMessage(Handle, wm_OpenMyData, 0, 0); { executes well, but no solution)
end;
Это тоже не работает. Я думал, что SendMessage() ждет сообщения. Но Paint не выполняется до MyOpenData. Форма всегда выглядит сломанной, пока процедуры не закончатся. Кроме того, процедуры выполняются нормально. Я пробовал все эти команды вместе или по отдельности.
Что мне не хватает? Заранее спасибо!
Как запустить трудоемкие процедуры, которые необходимо выполнять при открытии формы?
(Delphi XE7 в 64-разрядной версии Windows 7)
class(TThread)
для подготовки этих данных в фоновом режиме, не нарушая взаимодействие пользователя с формой. Я не занимаюсь Delphi уже много лет, так что я просто оставлю это вам. Вот несколько примеров: stackoverflow.com/a/3456816/156811 - person Havenard   schedule 22.07.2015Synchronize
. Проверьте delphi.about.com/od/kbthread/a/thread-gui .htm - person Havenard   schedule 22.07.2015