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

Вниз

Demo2Forms - не понял юмора   Найти похожие ветки 

 
parovoZZ ©   (2006-06-16 01:34) [0]

Здарова

Скачал сабж. Запускаю прямо из архива ехе - если закрыть form2, то потом при нажатии на кнопку она опять создаётся (всего глубокого смысла с Just Hide не понял. Мне, как конечному юзеру, до потолка - скрывается она или закрывается). Ладно, компилирую исходники. В результате при закрытии form2 она больше никогда не показывается.
Оказывается, в обработчике события кнопки form2show
if not Assigned( Form2 ) then
   NewForm2( Form2, Applet );
 Form2.Form.Show;

ничего не происходит, потому как Assigned( Form2 ) всегда возвращает true (исключение только в одном случае - если убрать form2 из списка автосоздаваемых. Но и тут непонятки - чем NewForm2( Form2, Applet ); отличается от NewForm2( Form2, Pointer( Applet ) );?). А Form2.Form.Show не работает - вроде как Form убила себя..

В процедуре
procedure TForm2.KOLForm2Close(Sender: PObj; var Accept: Boolean);
begin
 if CheckBox1.Checked then
 begin
   Accept := FALSE;
   Form.Hide;
 end;
end;

вроде ничего криминального нет, но тем не менее Form2 не уничтожается.
Если подправить
procedure TForm2.KOLForm2Close(Sender: PObj; var Accept: Boolean);
begin
 if CheckBox1.Checked then
 begin
   Accept := FALSE;
   Form.Hide;
   Exit
 end;
 Form2.Form.Free;
end;
,
то всё работает.
Accept - что за флаг? Перехватывает событие?


 
ECM ©   (2006-06-16 14:11) [1]

Просветление что то всё никак не наступит :)
KOL.PAS
   property OnClose: TOnEventAccept read fOnClose write SetOnClose;
   {* |<#form>
      |<#applet>
      Called before closing the window. It is possible to set Accept
      parameter to False to prevent closing the window. This event events
      is not called when windows session is finishing (to handle this
      event, handle WM_QUERYENDSESSION message, or assign OnQueryEndSession
      event to another or the same event handler). }

Если вера не позволяет заглядывать в исходники - воспользуйтесь генератором справки
http://bonanzas.rinet.ru/r_helpdoc.htm


 
parovoZZ ©   (2006-06-16 18:35) [2]

А почему же форма не показывается?


 
ECM ©   (2006-06-16 19:01) [3]

Демонстрашка достаточно древняя. Похоже она собиралась с версией KOL. При которой если Accept=TRUE то вместе с закрытием окна (объект windows) происходило освобождение его KOL-обёртки (Form). В текущей версии - окно закрывается , но обёртка не уничтожается. Возможно баг...
Для того чтобы пример действовал корректно - исправьте код:
procedure TForm2.KOLForm2Close(Sender: PObj; var Accept: Boolean);
begin
 if CheckBox1.Checked then
 begin
   Accept := FALSE;
   Form.Hide;
 end else Form.Free;
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.071 c
2-1172073309
EkZot
2007-02-21 18:55
2007.03.11
Как узнать размер динамического массива?


15-1171382070
oldman
2007-02-13 18:54
2007.03.11
Что только не узнаешь по телеку...


2-1171721201
laka
2007-02-17 17:06
2007.03.11
База данных


2-1171978891
vvv_spb
2007-02-20 16:41
2007.03.11
WordDocument


15-1171479447
atruhin
2007-02-14 21:57
2007.03.11
Реализация интерфейса типа МАСТЕРА