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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
1-30891
Great DAN
2002-05-30 07:26
2002.06.10
Объект TListBox


14-30981
dlp
2002-05-06 19:13
2002.06.10
ПОМОГИТЕ ЛЮДИ ДОБРЫЕ!!!


1-30748
Alia
2002-05-30 13:12
2002.06.10
Изменение шрифтов


1-30739
Juriy
2002-05-28 16:12
2002.06.10
TActionList в runtime


8-30923
BigFoot
2002-01-26 20:59
2002.06.10
Что-то типа автоответчика