Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

Закрытие 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.038 c
2-1163715808
DoktorX
2006-11-17 01:23
2006.12.03
Как в масив добавить результат полученный с анализа изображения?


15-1163187248
koha
2006-11-10 22:34
2006.12.03
Уважаемые господа!


2-1163772222
lsvit
2006-11-17 17:03
2006.12.03
unrar.dll


8-1145967247
Azeem
2006-04-25 16:14
2006.12.03
gluLookAt()


15-1163421348
Двоишник
2006-11-13 15:35
2006.12.03
Prolog





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский