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

Вниз

доступ к дочерним окнам MDI   Найти похожие ветки 

 
Oleg_Al   (2003-10-10 10:11) [0]

А если усложнить по отображению дочнрних окон MDI на ToolBar"e: есть n- цадть (очень много) дочерних форм и крайне сложно к методу вызова каждой из них подписывать код, создающий кнопку на ToolBar"e.
Есть ли некое событие, реагирующее на создание дочерней формы для заданной главной, к которому и можно было бы привязаться?
Может быть кто-нибудь знает, как работает механизм генерации списка дочерних форм для главного меню (свойство TForm WindowMenu) и можно ли использовать как-то его?


 
Е-Моё имя ©   (2003-10-10 10:27) [1]

WM_MDICreate
возьми компонент TElegantMDI например
он с открытым кодом
делает кнопки на панели для окон


 
Delph ©   (2003-10-10 16:08) [2]

>Form2.Tag:=MDIChildCount-1;

Эта строчка не совсем корректна. Существует вероятность появления двух дочерних форм с одинаковыми Tag - ами.
Пример: Допустим вы создали подряд 3 разных дочерних формы Form1, Form2,Form3. У Form3.Tag=2. Затем, закрыли Form1 и Form2.Теперь вновь создадим их: MDIChildCount=2 -> Form1.tag=1;
MDIChildCount=3 -> Form1.tag=2;

Предлагаю такой вариант:

Unit Main;

type
TMain_ = class(TForm)

procedure prChldShow(Sender: TObject);



public
{ Public declarations }

procedure prCreateChForm(FType:TComponentClass;FName:TForm);

end;

var
Main_: TMain_;

implementation



procedure TMain_.prCreateChForm(FType:TComponentClass;FName:TForm);
var I:Integer;
TB:TToolButton;
BEGIN
for I:=0 to MDIChildCount-1 do
begin
if (MDIChildren[I].ClassType = FType) then
begin
MDIChildren[I].BringToFront;
Exit;
end;
end;
Application.CreateForm(FType,FName);
TB:=TToolButton.Create(TBarMain);
TB.Parent:=TBarMain;
TB.Caption:=FName.Caption;
TB.Style:=tbsCheck;
TB.Grouped:=true;
TB.OnClick:=prChldShow;
END;

procedure TMain_.prChldShow(Sender: TObject);
var I:integer;
BEGIN
for I:=0 to MDIChildCount-1 do
begin
if (MDIChildren[I].Caption=TToolButton(Sender).Caption) then
MDIChildren[I].BringToFront;
end;
END;


Создаем дочернюю форму нужного нам типа:

procedure TMain_.Button1Click(Sender: TObject);
begin
prCreateChForm(TForm1,Form1);
end;


 
Юрий Федоров ©   (2003-10-10 16:15) [3]

Думаю, что самый простой вариант - общий предок у всех Child форм, в его конструкторе можно делать все, что хочешь с главной формой (и не только :-)))



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

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

Наверх




Память: 0.47 MB
Время: 0.036 c
3-74041
RDen
2003-10-02 12:40
2003.10.23
Select from Query


3-74059
_Novice_
2003-10-02 15:29
2003.10.23
MSAccess to SQL


1-74244
MMF
2003-10-13 13:07
2003.10.23
переопределение событий ActiveDocument


7-74508
Nosik_alex
2003-08-06 10:17
2003.10.23
как создать виртуальный принтер


14-74396
Manfred
2003-10-02 16:03
2003.10.23
Визуальное программирование: расслабляет?