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

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

Подвисание формы


товарищ вася ©   (2009-05-18 08:50:00) 

Здравствуйте товарисчи!
Проблемка такая: при показе второй формы (fWait) она зависает, а на этой форме находится прогрессБар ... рефреширую форму каждый раз но всё равно виснет...
Самое прикольное что когда из дельфи запускаешь он не подвисает...

procedure TForm1.ParseRepaintClick(
 Sender: TObject);
var i:integer; cd,cr:Real;
begin
     richedit2.Clear;
     RichEdit1.Lines.BeginUpdate;
     RichEdit2.Lines.BeginUpdate;
     loading:=true;
     fWait.Show; cr:=0; cd:=GetCurrentTime; fWait.Position:=poMainFormCenter;
     for I:=0 to richedit1.Lines.Count-1 do
     begin
     fWait.Refresh; Form1.Refresh;  fWait.Repaint; Form1.Repaint;  FWait.Caption:='REPAINTING...';
     fWait.ProgressBar1.Position:=trunc(i*100 / richedit1.Lines.Count);
     cr:=GetCurrentTime-cd;
     fWait.Label2.Caption:=floattostr(trunc((i/(cr+0.001))*1000)) ;
     fwait.Label1.Caption:=floattostr(trunc(cr) / 1000);
     fWait.Label6.Caption:=Floattostr(trunc(cr/1000*((richedit1.Lines.Count-1)/(i-0.001)-1)));
     colorize(i);
     end;
     cr:=0; cd:=GetCurrentTime;
     for i:=0 to richedit1.Lines.Count-1 do
     begin
     fWait.Refresh; Form1.Refresh; fWait.Repaint; Form1.Repaint;   FWait.Caption:='PARSING...';
     fWait.ProgressBar1.Position:=trunc(i*100 / richedit1.Lines.Count);
     cr:=GetCurrentTime-cd;
     fWait.Label2.Caption:=floattostr(trunc((i/(cr+0.001))*1000)div 1) ;
     fwait.Label1.Caption:=floattostr(trunc(cr) div 1000);
     fWait.Label6.Caption:=Floattostr(trunc(cr/1000*((richedit1.Lines.Count-1)/(i-0.001)-1)));
     richedit2.lines.Add(encode(richedit1.Lines.strings[i]));
     end;
     loading:=false;
     RichEdit1.Lines.EndUpdate;
     RichEdit2.Lines.EndUpdate;
     richedit2.SelStart:=0;
     richedit1.SelStart:=0;
     fWait.Hide;
end;

А теперь уважаемые знатоки вопрос:
Кто виноват, и что делать?


товарищ вася   (2009-05-18 09:06:00) [1]

Большое спасибо!


Сергей М.   (2009-05-18 09:02:00) [2]

for i:=0 to richedit1.Lines.Count-1 do
begin
 // убери все вызовы Refresh и Repaint
..
  Application.Processmessages;// этот метод "оживит" все формы
end;


MonoLife   (2009-05-18 09:00:00) [3]

Application.ProcessMessage


Наверх

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