![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Цитата:
![]() |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Aleks26 (26.04.2012)
| ||