Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

альтернатива processMessages   Найти похожие ветки 

 
Pasha L   (2005-06-14 18:33) [0]

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


 
-=XP=- ©   (2005-06-14 18:55) [1]

Зачем?


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

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


 
-=XP=- ©   (2005-06-14 19:17) [3]

ProgressForm.ShowModal;


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


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

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


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

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


 
-=XP=- ©   (2005-06-14 19:36) [6]

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

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

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


 
-=XP=- ©   (2005-06-14 19:38) [7]

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

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


 
Anatoly Podgoretsky ©   (2005-06-14 20:53) [8]

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


 
Heathen   (2005-06-14 21:15) [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.


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

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


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

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


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

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

"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:44) [13]

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

"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 03:32) [14]

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

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

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

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

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


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

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

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

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

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


 
Digitman ©   (2005-06-15 08:22) [16]


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


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

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

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


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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
1-1119504735
serguncho
2005-06-23 09:32
2005.07.11
Сохранение графика из Chart в BMP


4-1115996081
_Вован
2005-05-13 18:54
2005.07.11
Сообщение "Ошибка 1931..." при инсталляции моей проги :(


6-1111403921
Sour Smile
2005-03-21 14:18
2005.07.11
Как работать с реестром на удалённой машине?


1-1119481020
TrueCoder
2005-06-23 02:57
2005.07.11
VerticalScrollBar в TListBox всегда


3-1117609509
Andy BitOff
2005-06-01 11:05
2005.07.11
Запрос на выборку не повторяющихся записей.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский