Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.25;
Скачать: CL | DM;

Вниз

Вопрос по OnBeforeCreateWindow   Найти похожие ветки 

 
Rusya   (2007-04-29 20:23) [0]

В программе нужно сделать несколько проверок перед тем, как содастся главное окно. Пробовал по OnBeforeCreate, примерно так:
procedure TForm1.KOLFormBeforeCreateWindow(Sender: PObj);
begin
if ( not FileExists( ParamStr(1) ) ) then
begin
  MessageBox( Form.Handle, "Файл не существует", "Ошибка",  MB_ICONEXCLAMATION);
  Form.Close;
end;
end;

Все работает, но проблема в том, что перед тем как приложение завершится, главная форма все же успевает "мигнуть" (контур формы успевает прорисоваться, заголовок окна, и потом приложение благополучно завершается). Как побороть этот эффект, чтобы форма не "мигала"?


 
Dmitry___   (2007-04-29 21:01) [1]

.Hide?


 
fellix   (2007-04-29 21:31) [2]

{ Project_1.inc
 This file is for you. Place here any code to run it
 just following Applet creation (if it present) but
 before creating other forms. E.g., You can place here
 <IF> statement, which prevents running of application
 in some cases. TIP: always use Applet for such checks
 and make it invisible until final decision if to run
 application or not. }


 
Compiler ©   (2007-04-29 21:51) [3]

И еще вариант:

procedure KOLFormBeforeCreateWindow;
begin
if ( not FileExists( ParamStr(1) ) ) then
begin
 MessageBox( 0, "Файл не существует", "Ошибка",  MB_ICONEXCLAMATION);
 Halt(0);
end;
end;

initialization
KOLFormBeforeCreateWindow;

Если файл не существует - выходим


 
Dmitry___   (2007-04-29 22:27) [4]

А блин, точно, это ж на создании формы надо. Что-то я не в тему ляпнул...


 
Rusya   (2007-04-29 22:48) [5]

Вариант с Hide оказался самым простым (его и оставил). Спасибо всем откликнувшимся за помощь и полезные советы.


 
Rusya   (2007-04-29 22:52) [6]


> Dmitry___   (29.04.07 22:27) [4]
> А блин, точно, это ж на создании формы надо. Что-то я не
> в тему ляпнул...

Тем не менее, работает (форма не мигает, что и нужно было сделать):
procedure TForm1.KOLFormBeforeCreateWindow(Sender: PObj);
begin
if ( not FileExists( ParamStr(1) ) ) then
begin
 MessageBox( Form.Handle, "Файл не существует", "Ошибка",  MB_ICONEXCLAMATION);
 Form.Hide;
 Form.Close;
end;
end;


 
Dmitry___   (2007-04-29 23:53) [7]

Я рад, что помогло :)


 
AndreyRus   (2007-04-30 03:02) [8]


>  Form.Hide;
>  Form.Close;

Косяк?


 
Rusya   (2007-04-30 18:59) [9]


> AndreyRus   (30.04.07 03:02) [8]
> >  Form.Hide;>  Form.Close;

> Косяк?

Нет никаких косяков, все работает. И именно в таком виде.
Здесь Hide спасает от мигания формы перед ее закрытием, а то форма успевает частично прорисоваться. Hide ее вовремя прячет, и потом она спокойно закрывается.


 
AndreyRus   (2007-04-30 19:46) [10]


> Нет никаких косяков, все работает. И именно в таком виде.


Я рад, но это противоречит логике.


 
Rusya   (2007-04-30 20:31) [11]


> AndreyRus   (30.04.07 19:46) [10]
> > Нет никаких косяков, все работает. И именно в таком виде.
> Я рад, но это противоречит логике.

Если подойти чисто формально - да, противоречит. Но кроме этого расхождения с логикой я не вижу других аргументов против %) Быстрое и кодоэкономичное решение, делающее именно то, что нужно было. Еще рз: несмотря на нелогичность алгоритма, он работает довольно быстро и так как надо %)


 
Rusya   (2007-04-30 20:34) [12]


> fellix   (29.04.07 21:31) [2]
> { Project_1.inc  This file is for you. Place here any code
> to run it  just following Applet creation (if it present)
> but   before creating other forms. E.g., You can place here
>  <IF> statement, which prevents running of application  in
> some cases. TIP: always use Applet for such checks  and
> make it invisible until final decision if to run  application
> or not. }

Да это пройденный этап. Конечно, можно закинуть проверку туда, но результат будет точно такой же, как и при использовании обработчика OnBeforeCreate: форма успеет мигнуть перед закрытием. Конечно, там тоже можно Hide для формы вызвать %)


 
Vladimir Kladov   (2007-04-30 22:13) [13]

Почему это Form.Hide противоречит логике. Он просто указывает, что форма должна стать скрытой. А если дескриптор еще не выделен - то что она должна быть создана скрытой. Точно так же можно написать в design-time (если MCK), что форма Visible=false, и если /наоборот/ проверка прошла, то делать Show. А то, что форма все равно создается, так как же еще, так Form.Close работает. Этому методу нужен дескриптор окна, вот он и создается. С Halt - мигать не будет. Если для вас это нормально, то можно и Halt"ом.


 
Rusya   (2007-04-30 22:46) [14]


> Vladimir Kladov   (30.04.07 22:13) [13]
> Почему это Form.Hide противоречит логике.

Результат логике не противоречит, просто конструкция вида
Form.Hide;
Form.Close;

вызывает, скажем,недоумение %) которое проходит после подробного ознакомления со всеми деталями.

С Halt - мигать не будет. Если
> для вас это нормально, то можно и Halt"ом.

Оставлю комбинацию Hide / Close - мне это больше нравится.



Страницы: 1 вся ветка

Текущий архив: 2007.11.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.211 c
6-1172990416
todeus
2007-03-04 09:40
2007.11.25
Проблема с написанием чата...


2-1193740119
Zong_Zong
2007-10-30 13:28
2007.11.25
GDB как открыть?


2-1193994748
Klawa
2007-11-02 12:12
2007.11.25
Помогите с чтением файла.


1-1189049650
Nikfel
2007-09-06 07:34
2007.11.25
Добавление пункта в системное контекстное меню эксплорера


2-1194199352
timekiller
2007-11-04 21:02
2007.11.25
Всего лишь переставить крестик