Re: Some help...
От: Alex91 Россия  
Дата: 19.05.03 13:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как мне сделать собиты, сразу после того как форма нарисовалась т.е после 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.