Форум: "Основная";
Текущий архив: 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.005 c