![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CreateProcess, INFINITE и проблема с прорисовкой окон
Skier © (2004-07-23 14:55:00)Если делать так
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988621841&n=15
то появляется проблема с прорисовкой окон...
Не подскажите ли как сделать всё тоже самое что и в ссылке, но
чтобы можно было вызывать Application.ProcessMassages для обработки сообщений в очереди ?
И можно ли это сделать ?
Бином Ньютоныч (2004-07-24 16:08:00) [21]MsgWaitForMultipleObjects(1, pi.hProcess, false, Timeout, QS_PAINT) ?
wicked (2004-07-23 16:23:00) [22]хотя если не связываться с потоками, то оптимальным решением было бы [1] + [6]... имхо...
Суслик (2004-07-23 16:19:00) [23]я бы сделал:
1) в отдельном потоке запускал бы
2) в основном эмулировал модальность (как вы это понимаете) пока не будет от потока инфы, что он дождался конца запущенного им приложения.
wicked (2004-07-23 15:18:00) [24]хотя не.... PeekMessage'у вместо Application.Handle надо передавать 0 для того, чтобы он все окна обрабатывал...
Sandman25 (2004-07-23 15:17:00) [25]Self.Enabled := False?
wicked (2004-07-23 15:17:00) [26]тогда вместо:
> Application.ProcessMessages;
пишем
> while PeekMessage(Msg, Application.Handle, WM_PAINT, WM_PAINT, PM_REMOVE) do
> DispatchMessage(Msg);
выбираем из очереди сообщений все WM_PAINT... имхо этого достаточно (не проверял)....
default (2004-07-23 15:14:00) [27]Skier © (23.07.04 15:09) [2]
поподробней(
default (2004-07-23 15:11:00) [28]wicked © (23.07.04 15:03) [1]
только по твоему коду
лучше в одну строку
while WaitForSingleObject(pi.hProcess, 100 ) = WAIT_TIMEOUT do Application.ProcessMessages
Skier (2004-07-23 15:09:00) [29]>wicked © (23.07.04 15:03) [1]
Нужно чтобы процесс запускался "модально"...
wicked (2004-07-23 15:03:00) [30]это
> WaitForSingleObject( pi.hProcess, INFINITE );
заменить на
> wait_res := WaitForSingleObject( pi.hProcess, 100 );
> while wait_res = WAIT_TIMEOUT do begin
> Application.ProcessMessages;
> wait_res := WaitForSingleObject( pi.hProcess, 100 );
> end;
или я чего то недопонял?...