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

Вниз

Закрытие Modal form   Найти похожие ветки 

 
dmitry kholl   (2006-10-17 16:28) [0]

Задача следующего характера.

Модальная форма открывается например так

procedure New;
begin
 frmDialog := TfrmDialog.Create(Application);
 try
   //
   frmDialog.ShowModal;
   //
 finally
    frmDialog.Free;
 end;
end;


Из другого места программы, у меня по таймеру срабатывает код, который должен закрыть и разрушить эту форму. (Срабатывает автоматический логаут в программе).
Например:

var
 iForm: Integer;
 tmpForm: TForm;
begin

 for iForm := Screen.FormCount - 1 downto 0 do
 begin
   tmpForm := Screen.Forms[iForm];
   if fsModal in Screen.Forms[iForm].FormState then
     begin
       //Screen.Forms[iForm].Close;
      // SendMessage(Screen.Forms[iForm].Handle, ALM_SELF_DESTRUCTION, 0, 0);
       Screen.Forms[iForm].ModalResult := mrCancel;
      // Application.ProcessMessages;
       Screen.Forms[iForm].Visible := FALSE;
       //Screen.Forms[iForm].Release;
     end;
 end;


Но получается AV. И я в принципе понимаю причину, пытается вернуться из стека вызовов, а данных то уже нет.

Бредовая ситуация, но что-то делать нужно. Если у меня получилось обьяснить проблему, может у кого-то есть идеи?


 
Сергей М. ©   (2006-10-17 16:35) [1]


> есть идеи?


Есть.

Не плести абракадабру про "пытается вернуться из стека вызовов", а по таймеру рассылать всем заинтересованным формам сообщение об истечении таймаута, с тем чтобы каждая из этих форм сама принимала решение, стоит ли ей при этом закрыться.


 
Ketmar ©   (2006-10-17 16:35) [2]

послать модальной форме сообщение "закройся!". например, WM_USER. и обработать его, натурально.


 
dmitry kholl   (2006-10-17 16:49) [3]

SendMessage(Screen.Forms[iForm].Handle, ALM_SELF_DESTRUCTION, 0, 0);
Эта строчка посылает такое сообщение, и мои диалоги его обрабатывают

procedure TfrmAlGenDlg.ALM_SELF_DESTRUCTION(var aMessage: TMessage);
begin
 ModalResult := mrCancel;
 
 Close;
end;


Но программа не попадает на эту строчку
frmDialog.Free;
А AV по адресу показывает, чт окак раз в ней.


 
Сергей М. ©   (2006-10-17 16:50) [4]

Ну а начерта тут вызов Close, скажи на милость ?
От балды вставил ? типа "на всякий пожанный" ?


 
dmitry kholl   (2006-10-17 16:59) [5]

> Ну а начерта тут вызов Close, скажи на милость ?

Как с ним так и без него диалог не закрывается.


 
Плохиш ©   (2006-10-17 17:45) [6]


for iForm := Screen.FormCount - 1 downto 0 do
begin
  tmpForm := Screen.Forms[iForm];
  if fsModal in tmpForm.FormState then
    begin
      tmpForm.Close;
    end;
end;


 
MsGuns ©   (2006-10-18 13:45) [7]

>procedure TfrmAlGenDlg.ALM_SELF_DESTRUCTION(var aMessage: TMessage);
>begin
> ModalResult := mrCancel;
> Close;
>end;

"Входит-выходит... Замечательно выходит !"
"Королей мешаю я с тузами, и с дебютом путаю дуплет"



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

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

Наверх




Память: 0.48 MB
Время: 0.067 c
2-1163482783
YurkaT
2006-11-14 08:39
2006.12.03
Сообщение, результата запроса, убрать


15-1163713710
dreamse
2006-11-17 00:48
2006.12.03
SQL запрос


15-1163512415
Александр Иванов
2006-11-14 16:53
2006.12.03
По XPath кто-нибудь подскажет?


2-1163244317
ant23
2006-11-11 14:25
2006.12.03
Как выделить весь текст в мемо


3-1159550644
Kley
2006-09-29 21:24
2006.12.03
Exel&Delphi