Главная страница
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.014 c
8-74325
wara
2003-06-21 13:24
2003.10.23
Понижение числа точек в JPG- файле


4-74520
pool
2003-08-18 17:14
2003.10.23
как узнать раскладку клавиатуры


1-74218
Сергей Б.
2003-10-09 17:37
2003.10.23
Label1.caption - переменная вместо 1


3-73976
Dark Elf
2003-10-01 12:29
2003.10.23
Поиск по всем полям


14-74390
pasha_golub
2003-10-06 14:57
2003.10.23
Схожу с ума от С