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

Вниз

MDI Child форма   Найти похожие ветки 

 
matvey   (2002-05-30 13:37) [0]

Подскажите, как мне закрыть MDI Child форму,
в событии onClose - Action:=caFree, но
form1.close - выдаёт ощибку!


 
Внук   (2002-05-30 13:46) [1]

Как сказал бы Анатолий Подгорецкий - ошибка в 17-ой строке


 
matvey   (2002-05-30 13:50) [2]

что-то не особо понял...


 
Игорь Шевченко   (2002-05-30 13:51) [3]

А ее не надо close...


 
matvey   (2002-05-30 13:57) [4]

ну конечно надо, иначе бы не спрашивал... когда закрываешь обычным "крестиком" всё работает, а мне надо программно!


 
Игорь Шевченко   (2002-05-30 14:00) [5]

release.
К примеру, закрытие всех окон:

procedure TfMain.CloseAllMDIChilds;
begin
while ActiveMDIChild <> nil do begin
ActiveMDIChild.Release();
Application.ProcessMessages();
end;
end;





 
kaif   (2002-05-30 14:13) [6]

2 Игорь Шевченко © (30.05.02 14:00)
Гениально!
А я всегда по инерции делал
for i := MDIChildCount - 1 downto 0 do
MDIChildren[i].Close;


 
matvey   (2002-05-30 14:13) [7]

да, такое я знаю, но мне надо, чтобы из дочернего окна открывалось другое, а оно само при этом закрывалось!


 
Игорь Шевченко   (2002-05-30 14:28) [8]

Тогда неработающий код - в студию


 
Внук   (2002-05-30 14:39) [9]

>>Игорь Шевченко ©
Я же с этого и начал :-)

Как бы автор сам ответил на такой вопрос: "У меня не работает программа. Что делать?"


 
matvey   (2002-05-30 21:20) [10]

да вот собственно что я делал:

procedure TForm2.Button1Click(Sender: TObjet);
begin
Form2.Close;
TForm3.Create(Self);
end;

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

обе формы - MDIChild.

а вот что выдаёт:
Project Project1.exe raised exception class EAccesessViolation whith message "Accsess violation at address 0045CC75 in module "Project1.exe"



 
Внук   (2002-05-31 09:20) [11]

>>matvey (30.05.02 21:20)
Да, сурово. Фактически, уничтожение формы происходит из ее же собственного метода. Добрее надо быть :)
Во-первых, здесь надо использовать TForm.Release (см. Игорь Шевченко © (30.05.02 14:00)), или PostMessage(...WM_CLOSE...) как вариант.
Во-вторых. При создании формы типа TForm3 ее владельцем назначается экземпляр формы типа TForm2, который к тому моменту уже уничтожен. Здесь надо что-то вроде TForm3.Create(Application);


 
nedden   (2002-05-31 10:54) [12]

я извращался так:

В основной форме :

procedure TfrmMain.FormShow(Sender: TObject);
var i : integer;
begin
for i :=0 to MDIChildCount-1 do MDIChildren[i].Close;
end;

в дочке :

procedure TfrmLog.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action :=caNone;
ShowWindow(Handle,SW_HIDE);
end;

при инициализации дочки :
ShowWindow(frmLog.Handle,SW_MAXIMIZE);



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

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

Наверх





Память: 0.46 MB
Время: 0.006 c
1-30860
Arhangel
2002-05-29 15:59
2002.06.10
Toolbar?


1-30822
Wins
2002-05-31 13:58
2002.06.10
создать doc - файл и заполнить в нем таблицу


1-30876
Andrew22
2002-05-29 16:27
2002.06.10
Закрытие проги.


3-30724
studentik
2002-05-19 04:54
2002.06.10
UnSort


7-31015
VBill
2002-03-14 00:58
2002.06.10
Дискета в дисководе





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