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

Вниз

Список MDI окон   Найти похожие ветки 

 
webpauk ©   (2008-06-13 16:29) [0]

строю список mdichildren:
for fI := 0 to MDIChildCount-1 do

при закрытии mdiform (Close), из списка эта форма не исчезает.
в чем причина?


 
Правильный-Вася   (2008-06-13 16:37) [1]

видимо, у окна по умолчанию стоит Hide-реакция на Close


 
webpauk ©   (2008-06-13 16:39) [2]


> Правильный-Вася   (13.06.08 16:37) [1]
> видимо, у окна по умолчанию стоит Hide-реакция на Close

абычнае акно. без риакций


 
Игорь Шевченко ©   (2008-06-13 17:09) [3]


> абычнае акно. без риакций


Action := caFree в OnClose окна


 
webpauk ©   (2008-06-13 17:20) [4]


> Игорь Шевченко ©   (13.06.08 17:09) [3]

стоит...


 
MsGuns ©   (2008-06-13 17:33) [5]

Из чего следует, что форма "не исчезает" и в каком месте просматривается список дочек  ?


 
Игорь Шевченко ©   (2008-06-13 17:40) [6]


> стоит...


Все, телепатор сломался


 
webpauk ©   (2008-06-13 17:44) [7]

в главной форме строится список mdi форм.
после закрытия mdi формы, происходит построение списка заново.


 
webpauk ©   (2008-06-13 18:12) [8]

вот пример:
Form1 - fsMDIForm
Form2 - fsMDIChild

Panel1.align:=alTop;
(Butto1, Combobox1).Parent:=Panel1;

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Button1: TButton;
   ComboBox1: TComboBox;
   procedure Button1Click(Sender: TObject);
   procedure ComboBox1Click(Sender: TObject);
 public
   procedure SEtMDI;
 end;

var
 Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 TForm2.Create(Application).Caption:="Ôîðìà: "+FloatToStr(random(100));
 SEtMDI;
end;

procedure TForm1.SEtMDI;
var
 fI: Integer;
begin
 ComboBox1.Clear;
 for fI := 0 to MDIChildCount-1 do
 begin
   ComboBox1.AddItem(MDIChildren[fI].Caption, MDIChildren[fI]);
 end;
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
 TForm2(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).Show;
end;

end.


unit Unit2;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm2 = class(TForm)
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

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

end.


 
Игорь Шевченко ©   (2008-06-13 18:24) [9]


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


А с чего бы списку меняться - форма в этот момент еще существует.


 
webpauk ©   (2008-06-13 18:25) [10]


> Игорь Шевченко ©   (13.06.08 18:24) [9]

вот...
я про это и гаварю.
вопрос как?


 
engine ©   (2008-06-13 18:30) [11]

action := caFree;
 with Form1.ComboBox1.Items do
   Delete(IndexOf(Caption));
end;


 
webpauk ©   (2008-06-13 18:38) [12]


> engine ©   (13.06.08 18:30) [11]

ComboBox1 - только пример. всё намного хуже


 
webpauk ©   (2008-06-13 18:39) [13]


> engine ©   (13.06.08 18:30) [11]


> Delete(IndexOf(Caption));


а если у всех форм один и тот же Caption? кхм...


 
engine ©   (2008-06-13 18:41) [14]

> [12] webpauk ©   (13.06.08 18:38)

у меня телепатор сломался


 
webpauk ©   (2008-06-13 18:44) [15]


> webpauk ©   (13.06.08 18:38) [12]

то, что ты предложил - не решение...


 
Игорь Шевченко ©   (2008-06-13 18:50) [16]


> вот...
> я про это и гаварю.
> вопрос как?


вопрос - нафига ?

впрочем, посылай сообщение главному окну через PostMessage, чтобы обновил список, в FormDestroy mdi-child


 
webpauk ©   (2008-06-13 18:59) [17]

впрочем, посылай сообщение главному окну через PostMessage, чтобы обновил список, в FormDestroy mdi-child

дело....
работаит!


 
Германн ©   (2008-06-14 00:58) [18]


> webpauk ©   (13.06.08 18:59) [17]
>
> впрочем, посылай сообщение главному окну через PostMessage,
>  чтобы обновил список, в FormDestroy mdi-child
>
> дело....
> работаит!
>

И запомни этот совет на будущее. PostMessage помогает решить очень многие "трудные" вопросы при работе с VCL.


 
MsGuns ©   (2008-06-14 03:41) [19]

Зачем кому-то что-то посылать, не проще ли этот список смотреть по необходимости, например по нажатию на гл.форме кнопки "окна", тем более что у MDI это уже все есть.



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

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

Наверх




Память: 0.51 MB
Время: 0.017 c
11-1189856395
Robt
2007-09-15 15:39
2008.07.13
ComboBox


15-1211809617
Альф
2008-05-26 17:46
2008.07.13
Инсталятор с возможностью тихой установки


15-1211644660
@!!ex_from_browser
2008-05-24 19:57
2008.07.13
DMClient. Сдохла конференция Прочее


15-1212341902
Kostafey
2008-06-01 21:38
2008.07.13
С днем рождения ! 1 июня


2-1213096465
Анонимщики
2008-06-10 15:14
2008.07.13
WaitFor