Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > В OnCreate формы запретить отображение этой формы


Автор: Delphist 5.6.2006, 11:33
В OnCreate формы происходит не которые вычисдения, если в ходе вычислений возникает ошибка, то необходимо запретить отображение и существование этой формы.
Я в OnCreate делал self.Free это приводит к ошибке. 

Автор: _hunter 5.6.2006, 11:36
а не нада OnCreate менять свойства видимости...
проще исключение кинуть 

Автор: Delphist 5.6.2006, 11:40
Цитата(_hunter @ 5.6.2006,  11:36)
а не нада OnCreate менять свойства видимости...
проще исключение кинуть

В смысле Abort что ли? 

Автор: Sunr1se 5.6.2006, 11:44
А не проще создать таймер с interval=1 и в событии OnTimer прописать Form2.Free? А таймер включать в том случае, если в ходе вычислений возникла ошибка. 

Автор: _hunter 5.6.2006, 11:56
Цитата(Delphist @  5.6.2006,  11:40 Найти цитируемый пост)
В смысле Abort что ли? 

в смысле throw (или rise -- точно не помню) 

Автор: BinaryEvil 5.6.2006, 12:01
raise

Добавлено @ 12:02 
self.free нинада, лучше exitproccess(0) 

Автор: Romikgy 5.6.2006, 12:37
А смысл тогда форму создавать, легче имхо этого не допустить 
Код

Application.Initialize;
// здесь создай условие и уходи  от создания
if ShowMyForm=true then
begin
Application.CreateForm(TForm1, Form1);
  Application.Run;
end;
 

Автор: jaAlex 5.6.2006, 23:26
Цитата(Delphist @ 5.6.2006,  11:33)
Запретить отображение и существование этой формы.

Запретить отображение: Form1.Hide; 
Запретить существование: Form1.Free;
Если я правильно тебя понял, то это делается так. 

Автор: Mechanic 6.6.2006, 22:57
А я просто пишу

Код

if SomeCondition then Close;


 smile  

Автор: BinaryEvil 6.6.2006, 23:19
Mechanic, никатит, онкриэйт вызывается до обработки онкриэйт предка, ещё формы по сути небуит, close выдаст те ошибку 

Автор: Mechanic 6.6.2006, 23:34
Цитата(BinaryEvil @  6.6.2006,  23:19 Найти цитируемый пост)
Mechanic, никатит, онкриэйт вызывается до обработки онкриэйт предка, ещё формы по сути небуит, close выдаст те ошибку  

Упс, напутал чегой-то, наверное. Помню, что просто закрывалась.

Кстати, форма уже есть, когда OnCreate вызывается. И ошибки нет. Закрытия формы, правда, тоже нет.  smile

Добавлено @ 23:37 
Вспомнил. Евент ведь сперва должен отработать..
Код

PostMessage(Handle,WM_CLOSE,0,0);
 

Автор: Poseidon 6.6.2006, 23:55
А если попробовать старый проверенный halt? Жестоко конечно, но можно (хотя лучше не нужно smile)
Самый правильный вариант у Romikgy. 

Автор: BinaryEvil 7.6.2006, 00:02
Mechanic, звыняй, беру свои слова обратно.чёта напутол я.  
Delphist, так надо тока форму закрыть или сразу прогу? 

Автор: Sunvas 7.6.2006, 00:27
Мдя.. А 
Код

application.showmainform:=false;

не пробовал? 

Автор: vv3 7.6.2006, 09:57
Действительно, зачем создавать форму, если при некоторых условиях ее нужно уничтожать. Romikgy прав на 100%. И не Form1.Free, а Form1.Release (Borland советует именно так). 
А дальше в коде что происходит при обращении к форме, которая не существует?
В общем, если уже так приспичило именно в onCreate ее же и убить, то  так:
Код
procedure TForm1.FormCreate(Sender: TObject);
begin
//....наши условия
TForm1(Sender).Release;
Sender:= nil; //Чтобы потом по тексту сработало, например: 
                     //if not Assigned(Form1) then 
                    // ShowMessage('Invalid user. Replace and strike any key when ready')
                    //   else Form1.Show;
end;

Причем, если таким образом убить главную форму приложения, то само приложение останется висеть в памяти, но уже без формы.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)