Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.038 c
1-1189078540
den303_work
2007-09-06 15:35
2007.11.25
Создать контрол с заранее неизвестным классом


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


15-1192354956
Stanislav
2007-10-14 13:42
2007.11.25
Сканер памяти (типа ArtMoney)


2-1193791900
Riply
2007-10-31 03:51
2007.11.25
Скорость сравнения строк в Ansi и Unicode формате.


2-1193984840
dumka
2007-11-02 09:27
2007.11.25
Шрифты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский