Форум: "KOL";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];
ВнизВопрос по 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 вся ветка
Форум: "KOL";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.053 c