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

Вниз

Работа с дочерними формами   Найти похожие ветки 

 
Irisss   (2010-11-15 14:37) [0]

Из главной формы (VCL Form) создаются дочерние формы.
При закрытии главной формы нужно пройти по всем дочерним формам и закрыть их, чтобы отработал метод Close (в этом методе у каждой формы есть еще некоторые действия, которые нужно выполнить)
Вопрос:
1. как получить количество дочерних форм?
2. как обратиться к конкретной форме, зная их количество?

Спасибо


 
12 ©   (2010-11-15 14:44) [1]

for i := 0 to MainForm.MDIChildCount - 1 do MainForm.MDIChildren[i].Close;


 
12 ©   (2010-11-15 14:45) [2]

а не
or i := MainForm.MDIChildCount - 1 downto 0 do MainForm.MDIChildren[i].Close;


 
Irisss   (2010-11-15 15:05) [3]

MDIChildCount показывает равно 0 при открытых формах

попробывал сделать так:
       count := Self.FFormManager.ComponentCount;
       if ( count > 0 )
       then begin
           for i := count - 1 downto 0
           do begin
               if ( Self.FFormManager.Components[ i ] is TForm )
               then begin
                   Caption := TForm(Self.FFormManager.Components[ i ]).Caption;
                   TForm(Self.FFormManager.Components[ i ]).Show;
                   TForm(Self.FFormManager.Components[ i ]).Close;
               end;
           end;

но пока ругается на метод Show,


 
RWolf ©   (2010-11-15 15:11) [4]

При закрытии главной формы закроется всё приложение, а значит, обработчики закрытия всех открытых форм так или иначе будут вызваны.


 
12 ©   (2010-11-15 15:19) [5]


> При закрытии главной формы закроется всё приложение, а значит,
>  обработчики закрытия всех открытых форм так или иначе будут
> вызваны.
>


по-идее да, но не факт

пишу

TfrmChild = class(TForm)
procedure TfrmChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
end;

TfrmSubject = class(TfrmChild)
procedure TfrmSubject.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 ShowMessage( "" );
 inherited;
end;

не кажет ничего при закрытии  TMainForm


 
Irisss   (2010-11-15 15:25) [6]

приложение закрывается, а обработчики не вызываются.
Там стоит MessageDlg, он не вызывается


 
И. Павел ©   (2010-11-15 15:32) [7]

> приложение закрывается, а обработчики не вызываются.
> Там стоит MessageDlg, он не вызывается

Это не показатель. При Application->Terminate тоже MessageDlg не вызывается, хотя процедура, вызвавшая Terminate, выполняется до конца.


 
RWolf ©   (2010-11-15 15:36) [8]


> Irisss   (15.11.10 15:25) [6]
> стоит MessageDlg, он не вызывается

обработчик вызывается, просто MessageDlg не срабатывает. Если при закрытии форм нужно что-то спросить, то да, закрывать их надо вызовом метода Close перед закрытием главной формы.


 
Irisss   (2010-11-15 15:40) [9]

собственно мне как раз и нужно, что показать каждую форму и спросить у пользователя, хочет он ее закрыть или нет


 
Irisss   (2010-11-15 15:43) [10]

В каждой форме у меня на обработчике
FormCloseQuery стоит MessageDlg, который спрашивает, закрыть ли текущую форму


 
clickmaker ©   (2010-11-15 15:43) [11]

> показать каждую форму и спросить у пользователя, хочет он
> ее закрыть или нет

OnCloseQuery


 
Irisss   (2010-11-15 16:18) [12]

Такой код решил мою проблему полностью (FFormManager - главная форма)
       for i := Self.FFormManager.ComponentCount - 1 downto 0
       do begin
           if ( Self.FFormManager.Components[ i ] is TForm )
           then begin
               AForm := Self.FFormManager.Components[ i ] as TForm;
               if ( AForm.Visible = True )
               then begin
                   AForm.Show();
                   AForm.Close();
               end;
           end;
       end;

Спасибо всем


 
Leonid Troyanovsky ©   (2010-11-15 22:18) [13]


> Irisss   (15.11.10 16:18) [12]

> Такой код решил мою проблему полностью (FFormManager - главная
> форма)
>        for i := Self.FFormManager.ComponentCount - 1 downto

Screen.Forms.

--
Regards, LVT.



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

Форум: "Начинающим";
Текущий архив: 2011.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
8-1209465480
farrex
2008-04-29 14:38
2011.02.06
сравнение графических возможностей delphi с др. "редакторами"


2-1289799666
antsa
2010-11-15 08:41
2011.02.06
Чтение цвета символа в консоли


2-1289631411
Fredwriter
2010-11-13 09:56
2011.02.06
Потоки


2-1289987934
SIV5000
2010-11-17 12:58
2011.02.06
Component KeyDown


11-1229287775
DenisArd
2008-12-14 23:49
2011.02.06
Как загрузить иконку нужного формата?





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