Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Отрисовка окна в цикле   Найти похожие ветки 

 
Эдик Дятлов ©   (2003-06-11 08:45) [0]

Здраствуйте уважаемый Алл !!
Вопрос следующий возник, надеюсь вашу помощь !
Есть цикл, хочу показывать его текущее состояние в окне, то писать в лейбл текущую строчку, но пока цикл не отработает, ничего не происходит. Как с этим справиться ?

for i:=1 to 10000000000000

begin
label1.caption:=IntToStr(i);
MyFunc();
end;


 
Song ©   (2003-06-11 08:47) [1]

Application.ProcessMessages вставь после Label1.Caption...


 
Всеволод Соловьёв ©   (2003-06-11 08:57) [2]

если не нужно, чтобы прога реагировала на нажатия, а только отрисовывала, тогда Repaint;


 
Думкин ©   (2003-06-11 08:59) [3]

Но в этом случае писать на каждой итерации - будут сильные тормоза. Лучше писать через какие-то шаги.


 
alexvan ©   (2003-06-11 09:34) [4]

Можно этот цикл кинуть в поток TThread в отдельном модуле

unit Potok
interface
uses
Classes;
type
TWorkThread = class(TThread)
private
Answer: integer;
protected
procedure GiveAnswer;
procedure Execute; override;
end;

implementation

uses
SysUtils, GlavnajaForma;

{TWorkThread}

procedure TWorkThread.GiveAnswer;
begin
Form1.Label1.Caption:=IntToStr(Answer);
end;

procedure TWorkThread.Execute;
var
I: integer;
begin
FreeOnTerminate := True;
for I:= 1 to 1000000000000000
begin
Answer:=I;
MyFunc();
Synchronize(GiveAnswer);
end;
end;
end.

Далее в главную форму помещаешь в uses имя модуля потока, и из этой формы вызываешь поток.

procedure .....
var
NewThread: TWorkThread;
begin
.....
NewThread:= TWorkThread.Create(False);
.....
end;


 
Эдик Дятлов ©   (2003-06-11 09:52) [5]

Большое спасибо всем кто ответил !!!!
Вставил Application.ProcessMessages() и все заработало.
И еще вопрос, может кто просветит ?
Скорость работы с Application.ProcessMessages() и с использованием потока будет сильно отличаться ?


 
alexvan ©   (2003-06-11 10:00) [6]

В потоке скорость выше, а время, выделяемое потоку зависит от приоритета. По умолчанию это NORMAL. Для приоритетов имеются функции GetPriotityClass и SetPriotityClass


 
Alex_***   (2003-06-11 10:48) [7]

ЧТо заморачиваться на потоки, если нужно просто отобразить прогресс? Работа с потоками кроме сложности в реализации еще и системных ресурсов требует. Просто вызывай через определенное кол-во итераций Caption:=... и ProcessMessages


 
alexvan ©   (2003-06-11 11:21) [8]

Насчёт сложности реализации можно поспорить, а насчёт системных рессурсов не более чем ещё какое либо запущенное приложение


 
Tano ©   (2003-06-11 20:27) [9]

вполне хватит
for i=1 to 100000000 do
begin
//отрисовка, рассчеты
if i mod константа_периодичности = 0 then Application.Proc....
end;
это самые нетрудоемкие вычисления, какие можно воткнуть и геморра нет!



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

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
14-84684
Дмитрий К.К.
2003-06-11 06:23
2003.06.26
Именинники 11 июня


7-84808
new comer and co
2003-04-16 16:27
2003.06.26
эмуляция нажатия клавиш


3-84011
McSimm2
2003-05-30 14:22
2003.06.26
Не конектится к ORACLE


3-83864
BBCHa
2003-05-23 16:19
2003.06.26
ADO и окно пароля


4-84827
Vitalik
2003-04-23 20:33
2003.06.26
ComboBox