
февраля 16, 2010 10:36 by
cya-st
Многии начинающие програмисты не знают о методе Application.ProcessMessage() и сталкиваются с проблемами, которых не могут объяснить. Например, мы хотим написать что-то на форме и через 5 секунд стереть. Нужно сделать так:
1: procedure TForm1.Button1Click(Sender: TObject);
2: begin
3: Label1.Caption:='Started';
4: Application.ProcessMessage;
5: Sleep(5000);
6: Label1.Caption:='Finished';
7: end;
Попробуйте убрать Application.ProcessMessage(), и вы никогда не увидете слова "Started". Это связано с тем, что Windows ждет, пока накопятся сообщения в очереди, а не обрабатывает их сразу. Application.ProcessMessage() заставляет обработать все сообщения, которые накопились в данный момент. Подробности можно найти в файлах справки.
Еще это можно применить так:
1: procedure TForm1.Button1Click(Sender: TObject);
2: var
3: i:integer;
4: begin
5: for i:=1 to 100000 do
6: begin
7: ProgressBar1.Position:=i;
8: Application.ProcessMessage;
9: end;
10: end;
Если убрать Application.ProcessMessage(), то, пока выполняетсяцикл, мы не сможем сдвинуть, свернуть форму, вывести ProgressBar1.
217815a3-df77-4bb3-9392-b7172cf68ebc|1|5.0