![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Я рассматриваю применение события OnIdle класса TApplication. Взял с одного из сайтов простой пример и пытаюсь запустить:
Код:
unit unIdleExample1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls; type TForm1 = class(TForm) StatusBar1: TStatusBar; procedure FormCreate(Sender: TObject); private { Private declarations } public procedure Waiting(Sender: TObject; var Done: Boolean); { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Application.OnIdle := Waiting; end; procedure TForm1.Waiting(Sender: TObject; Done: Boolean); begin StatusBar1.SimplePanel := True; StatusBar1.SimpleText := 'OK! Let"s get going'; Done := True; end; end. "Declaration of 'Waiting' differs from previous declaration" Просмотрел еще несколько примеров, но и там событие OnIdle описывается подобным же образом во время выполнения программы в обработчике события OnCreate главной формы. Не могу понять в чем проблема? ![]() |
#2
|
|||
|
|||
![]() Цитата:
Видите разницу (TForm1 не в счет)? А вообще, OnIdle может и не сработать, для фоновой работы лучше подойдут потоки |
Этот пользователь сказал Спасибо ChinYan за это полезное сообщение: | ||
Aleks26 (26.04.2012)
|
#3
|
||||
|
||||
![]() Компиляция прошла, но дело было не в TForm1, как вы упоминали, а в отсутствии ключевого слова var перед вторым параметром:
Код:
procedure TForm1.Waiting(Sender: TObject; var Done: Boolean); begin StatusBar1.SimplePanel := True; StatusBar1.SimpleText := 'OK! Let"s get going'; Done := True; end; ![]() |
#4
|
|||
|
|||
![]() Я на это и намекал
|
#5
|
||||
|
||||
![]() Еще такой маленький вопрос: будет ли вызов модальной формы MessageBox вызывать данное событие? Я попробовал немного изменить прежний модуль:
Код:
unit unIdleExample2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls; type TForm1 = class(TForm) StatusBar1: TStatusBar; Label1: TLabel; procedure FormActivate(Sender: TObject); private { Private declarations } public procedure Waiting(Sender: TObject; var Done: Boolean); { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Waiting(Sender: TObject; var Done: Boolean); begin StatusBar1.SimplePanel := True; StatusBar1.SimpleText := 'Событие OnIdle'; Done := True; end; procedure TForm1.FormActivate(Sender: TObject); var i: Integer; begin Application.OnIdle := Waiting; if Application.MessageBox('Ожидание события!!', '') = IDOK then begin for i := 0 to 100000 do Label1.Caption := inttostr(i); Application.ProcessMessages; end; end; end. ![]() |
#6
|
||||
|
||||
![]() Цитата:
![]() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Aleks26 (26.04.2012)
|