Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

альтернатива processMessages [D6, WinXP]


Pasha L ©   (2005-06-14 18:33:00) 

Здравствуйте. Есть ли какой-нибудь способ вызвать processMessages только для одной формы?


бывший   (2005-06-15 12:02:00) [1]

т.е. метод update прогресс-бара позволит выполнить его перерисовку? во! thnx 2Digitman =)


Digitman   (2005-06-15 08:22:00) [2]


> "как обычно" делают подобные вещи с прогрессом знатоки Delphi


если нужно обновлять только прогресс-бар, то совершенно необязательно вызывать ни ProcessMessages, ни его "эквиваленты".

для его обновления достаточно вызвать его же метод Update

многие виз.контролы так же имеют аналогичные по назначению методы, так что если требуется "прицельное" обновление, можно с успехом пользовать эти методы


бывший   (2005-06-15 04:21:00) [3]

цитирую я самого себя =) с точки зрения банальной эрудиции, для меня - "до хрена" - есть число "несколько большее" единицы, которое вызывает у меня подозрение, что оно за счет своей размерности может определенным образом влиять на определенный процесс =)

Германн, у нас с Вами разговор "ни о чем" =( При чем тут справка. Справку я привел лишь с целью прояснить Вам (хотя вы наверное это знали), что не только WM_PAINT пролазит в очередь. Хватит к словам придираться =) В следующий раз буду выражаться более грамотно ;)

Можно ли заменить ProcessMessages обработкой лишь WM_PAINT сообщений из очереди?

Сам я пробовал вариант с отдельным потоком - имеет право на существование =) На нем и остановился. Но просто интересно разобраться с тем, "как обычно" делают подобные вещи с прогрессом знатоки Delphi ;)


Германн   (2005-06-15 03:32:00) [4]

2 бывший   (15.06.05 02:43) [12]
:)

Справку в студию ты привел.

> если я все правильно понимаю ;) то обрабатываются все сообщения в очереди сообщений.

Правильно понимаешь! Все они обрабатываются.

Но вот где в справке сказано, что их "до хрена"? Что ты "цитируешь"?
Приведи Аглицкий вариант термина "до хрена"! Или хотя бы приведи тот участок справки, который подверг тебя на столь категоричное высказывание!


бывший   (2005-06-15 02:44:00) [5]

э... ну... Вы меня своим вопросом в тупик поставили. Выкручиваюсь следующим образом, господин Германн, справку в студию:

"Call ProcessMessages to permit the application to process messages that are currently in the message queue. ProcessMessages cycles the Windows message loop until it is empty, and then returns control to the application."

"calling ProcessMessages periodically allows the application to respond to paint and OTHER messages."

если я все правильно понимаю ;) то обрабатываются все сообщения в очереди сообщений. мы же понимаем, что помимо WM_PAINT'a там может быть еще, цитирую, "до хрена" сообщений =)


бывший   (2005-06-15 02:43:00) [6]

э... ну... Вы меня своим вопросом в тупик поставили. Выкручиваюсь следующим образом, господин Германн, справку в студию:

"Call ProcessMessages to permit the application to process messages that are currently in the message queue. ProcessMessages cycles the Windows message loop until it is empty, and then returns control to the application."

"calling ProcessMessages periodically allows the application to respond to paint and OTHER messages."

если я все правильно понимаю ;) то обрабатываются все сообщения в очереди сообщений. мы же понимаем, что помимо WM_PAINT'a там может быть еще, цитирую, "до хрена" сообщений =)


Германн   (2005-06-15 02:08:00) [7]

2 бывший   (14.06.05 22:51) [10]
>Там же до хрена разных сообщений.
Кто тебе это сказал?


бывший   (2005-06-14 22:51:00) [8]

у меня не может быть =) ну правда, ошибся маленько в примере - взял инкремент больше чем надо и указал не совсем корректный интервал времени =) но вопрос все равно висит =) к тому же, ProcessMessages пропускает ведь не только WM_PAINT события, верно? Там же до хрена разных сообщений. Да согласен, уходит мало времени на их обработкуЮ но все равно это заметно притормаживает процесс...


Heathen   (2005-06-14 21:15:00) [9]

Может, так подойдет:

var I: Integer;

begin
 Application.Initialize;
 with TForm1.Create(Application) do begin
   Show;
   ProgressBar1.Max := 100000;
   for I := 0 to ProgressBar1.Max do begin
     ProgressBar1.StepBy(1);
     if GetAsyncKeyState(VK_ESCAPE) <> 0 then
       Break;
   end;
 end;
 Application.Run;
end.


Anatoly Podgoretsky   (2005-06-14 20:53:00) [10]

У него может быть


-=XP=-   (2005-06-14 19:38:00) [11]

5% в качестве инкремента сильно тормазит процесс. И превращает 10 минут в 15

А вот это уже сказки. 20 прорисовок формы длятся 5 минут (15-10)?


-=XP=-   (2005-06-14 19:36:00) [12]

Хочется, чтобы этой загрузки progressbar обновлялся, чтобы работала отмена и чтобы контроль над всеми остальными формами отсутствовал.

Для этого используется дополнительный поток

Ему достаточно будет покаApplication.ProcessMessages.
А то замучается с синхронизацией и пр.


бывший   (2005-06-14 19:36:00) [13]

мне тоже интересно. кстати, есть какая-нить замена ProcessMessages - просто у меня выполняется ооочень продолжительная операция, надо постоянно обновлять ProgressBar, а использование ProcessMessages (даже есди брать к примеру каждые 5% в качестве инкремента) сильно тормазит процесс. И превращает 10 минут в 15 =(


Amoeba   (2005-06-14 19:20:00) [14]


> Pasha L   (14.06.05 19:04) [2]
> У меня в программе во время загрузки одной вещицы показан
> процент загрузки. Показан он на progressbar, который находится
> на специально отведенной для него форме (на этой же форме
> есть кнопка отмены). Хочется, чтобы этой загрузки progressbar
> обновлялся, чтобы работала отмена и чтобы контроль над всеми
> остальными формами отсутствовал.

Для этого используется дополнительный поток. Могу завтра выслать готовую демку (валяется дома).


-=XP=-   (2005-06-14 19:17:00) [15]

ProgressForm.ShowModal;


Pasha L   (2005-06-14 19:04:00) [16]

У меня в программе во время загрузки одной вещицы показан процент загрузки. Показан он на progressbar, который находится на специально отведенной для него форме (на этой же форме есть кнопка отмены). Хочется, чтобы этой загрузки progressbar обновлялся, чтобы работала отмена и чтобы контроль над всеми остальными формами отсутствовал.


-=XP=-   (2005-06-14 18:55:00) [17]

Зачем?


Наверх

Титульная страница Поиск, карта сайта Написать письмо