Как мне сделать собиты, сразу после того как форма нарисовалась т.е после onShow.
Дело в том, что у меня идёт проверка в onShow и если что нить не так, мне надо закрыть программу. Но этого сделать нельзя в этом событтии, приходиться ставить задержку и после задержки закрывать. Но на разных машинах происходит по разному. Например на более быстрых форма успевает появиться, пожить несколько секнд и потом уходит. А как сделать все это по человечески. Что бы в прямо из onShow выходила ?
Здравствуйте, Аноним, Вы писали:
А>Как мне сделать собиты, сразу после того как форма нарисовалась т.е после onShow.
А>Дело в том, что у меня идёт проверка в onShow и если что нить не так, мне надо закрыть программу. Но этого сделать нельзя в этом событтии, приходиться ставить задержку и после задержки закрывать. Но на разных машинах происходит по разному. Например на более быстрых форма успевает появиться, пожить несколько секнд и потом уходит. А как сделать все это по человечески. Что бы в прямо из onShow выходила ?
можно так, например:
модуль формы:
procedure TForm1.OnShow(...)
begin
if (ОШИБКА) then
raise Exception.Create('Произошла ошибка!');
end;
модуль, откуда вызывается форма:
...
Form1 := TForm1.Create(...);
try
try
Form1.Show[Modal];
except
on E: Exception do
MessageDlg(E.Message, mtError, [mbOk], 0);
end;
finally
FreeAndNil(Form1);
end;
еслм у тебя одна форма главная в проге, и если что не так — то ты хакрываешь всю прогу, то лучше помеитить проверки в конструктор или OnCreate, добавить переменную bErr в класс формы и попробовать такой вариант
модуль формы:
TForm1 = class
...
public
bErr: Boolean;
constructor Create(AOwner: TComponent); override;
end;
constructor TForm1.Create(AOwner: TComponent);
begin
bErr := False;
...
<если что то не так, ставь переменную bErr в True>
end;
модуль проекта (Project -> View Source):
...
Application.Initialize;
Application.CreateForm(TForm1, Form1);
if (not Form1.bErr) then
Application.Run;
...
В данном случае форма даже не покажется.
Alexandr.