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

Вниз

Список 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
2-1213251527
Yury
2008-06-12 10:18
2008.07.13
очистка каталога


15-1212158996
Ega23
2008-05-30 18:49
2008.07.13
Попить пива


4-1192974092
ilopX
2007-10-21 17:41
2008.07.13
Недокументированная функция SetShellWindow


4-1192558662
lock95
2007-10-16 22:17
2008.07.13
Настройка BIOS из программы под Windows


15-1211704704
Kostafey
2008-05-25 12:38
2008.07.13
С днем рождения ! 25 мая





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