Главная страница
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.017 c
3-83859
terra
2003-06-02 10:34
2003.06.26
БД и QuickReport


6-84501
AllDontFire
2003-03-31 15:45
2003.06.26
Отлов события подключения к ресурсам к ЛВС?


1-84409
corte ™
2003-06-09 13:35
2003.06.26
всем привет. как можно раскраситьгрид одну строку разными цветом


14-84742
Soft
2003-06-05 14:22
2003.06.26
Начальный возраст для работы с компьютером


3-83887
Fuelfire
2003-06-02 13:35
2003.06.26
Как экспортнуть данные из таблицы Paradox?