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

Вниз

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

 
моё_имя   (2004-04-22 18:39) [0]

Идея такая: одна форма MDIForm и несколько MDIChild. Формы MDIChild создаются динамически:
...
AnyForm := TAnyForm.Create(Self);
AnyForm.Show;
...
Всё нормально. Всё работает. А при закрытии MDIChild"ов они ни хрена ни закрываются: то сворачиваются, то вообще не реагируют. Может это такая фича MDI-интерфейса, но всё-таки кто-нить может сказать как эти MDIChild"ы закрывать?


 
WebErr ©   (2004-04-22 18:42) [1]

В OnClose сделайте следующее:
Action := caFree.


 
ASMiD ©   (2004-04-22 18:42) [2]

А OnClose с caFree хоть есть?


 
WebErr ©   (2004-04-22 18:43) [3]

Я тоже не сразу понял, что это за бякость! :))))


 
моё_имя   (2004-04-22 18:43) [4]

и, кстати, событие OnClose на этих формах превосходно возникает...


 
моё_имя   (2004-04-22 18:44) [5]

спасибо.. заработало с caFree.. Первый раз MDI пишу.


 
WebErr ©   (2004-04-22 18:46) [6]


> и, кстати, событие OnClose на этих формах превосходно возникает...

Разумеется, а вот OnDestroy будет вызвано только при уничтожении главной MDI формы.

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


 
Andzej   (2004-04-24 20:00) [7]

Ну а вот у меня немного другая поблема.
Имеется форма MDI и в ней 3 формы MDIChild. Да вот уже долго мучаюсь не могу понять в чем дело:
один раз все формы открыкаются хорошо и закрываются тоже нормально, но в третий, в восьмой или в одинадцатый раз (рано или поздно) при открывании возникает ошибка или вообще формы путаются: при открытии, к примеру form2 реагирует form3 или form1(если форма 1,3 открыта) передается фокус одной из открытой формы, а не создается нужная.

 If (not Assigned(Form3))or(not Form3.Showing ) then
  begin
   Form3:=TForm3.Create(Self);
   Form3.Top:=0;
   Form3.Left:=450;
   Form3.Width:=Form1.Width-462;
   Form3.Height:=Form1.Height-77;
  end
 else
  begin
   Form3.Show;
   Form3.WindowState:=wsNormal;
  end;


У других формах тот же код.
Когда было две формы вроде бы небыло проблем, но как добавил третью так и начялся этот гиморой.

Неподскажите в чем дело? Заранее благодарен.


 
Игорь Шевченко ©   (2004-04-24 20:26) [8]


> Разумеется, а вот OnDestroy будет вызвано только при уничтожении
> главной MDI формы.


Архангельского начитался ?


 
Andzej   (2004-04-24 23:54) [9]

Ну, блин, наконец-то этот долбаный гиморой загоньчился.
Теперь вроде все ОК, работает :)))))).
А кому интересно пишу, может когда нибудь и пригодится:

 If Form2=nil then
  begin
   Form2:=TForm2.Create(Application);
   Form2.Width:=450;       // Это необязательно
   Form2.Height:=(Form1.Height div 2)-38; // Это тоже можно пропустить
  end
 else
  begin
   Form2.Show;
   Form2.WindowState:=wsNormal;
  end;


А при закрытии формы:

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


Такая фигня а пол днья на то ушло.



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

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
1-1079886820
Batoon
2004-03-21 19:33
2004.04.11
Тильда и VK_...


14-1079470597
Knight
2004-03-16 23:56
2004.04.11
Кто помнит интегралы?


4-1075545213
Шишкин Илья
2004-01-31 13:33
2004.04.11
Работа с иконками


14-1082357056
Sectey
2004-04-19 10:44
2004.04.11
Помогите найти Банников Н.А.


14-1082360010
Developerr
2004-04-19 11:33
2004.04.11
Смешанный домен Windows 2000