Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Внизперключение MDI форм в меню Найти похожие ветки
← →
Olphi (2003-12-21 13:52) [0]Подскажите, как переключить MDI-форму, выбрав её в меню TMainMenu?
я делаю так: после открытия новой формы добавляю пункт TMenuItem в меню так, чтобы порядковый номер формы соответствовал номеру пункта.
А потом нужно сделать обработчиком клика (нового пункта меню) процедуру, которая делает активной формой ту, порядковый номер которой соответствует порядковому номеру пункта меню.
вот так не получается:
<pre>
procedure TFOrm1.ChangeMDI (n :integer);
begin
MDIchildren[n].Active;
end;
procedure TForm1.AddWindow;
var
it :TMenuItem;
begin
it := TMenuItem.Create (MainMenu1);
it.caption := "новое оно";
it.onClick := ChangeMDI (MDIChildCount);
end;
</pre>
← →
grusty (2003-12-21 14:19) [1]У компонента TForm есть свойство WindowMenu. Если в нем указать пункт меню TMainForm, то список открытых MDIChild форм будет помещаться в этот пункт меню автоматически...
← →
Olphi (2003-12-21 14:48) [2]уау. внатуре?
ты смотри! я проверю!
← →
Olphi (2003-12-21 14:58) [3]нифига. НЕ помещается туда никакой список!
что неправильно сделал?
← →
prophet (2003-12-21 16:11) [4]procedure TForm1.FormCreate(Sender: TObject);
begin
Menu := TMainMenu.Create(Self);
Menu.Items.Add(TMenuItem.Create(Self));
Menu.Items[0].Caption := "WindowMenu";
WindowMenu := Menu.Items[0];
Menu.Items[0].Add(TMenuItem.Create(Self));// парадокс, но почему то без
//этого не работает: меню дочерних окон должно заранее иметь какие-либо вложенные элементы
Menu.Items[0].Items[0].Caption := "Close"; //к примеру
end;
← →
Shirson (2003-12-22 08:43) [5]
procedure TFmain.NiClick(Sender:TObject);
var MO:TObject;
begin
MO:=(Sender as TMenuItem).Owner;
(MO as TForm).show;
(Sender as TMenuItem).Checked:=True;
end;
//----------------------------------------------------------------------------------------------
procedure TFmain.AddMenuItem(sender:Tobject);
var NI:TMenuItem;
begin
NI:=TMenuItem.Create((Sender as Tform));
FDM.N_Windows.Add(Ni); //Пункт главного меню
Ni.RadioItem:=true;
Ni.Caption:=(Sender as TForm).Caption;
Ni.Checked:=True;
Ni.OnClick:=NiClick;
Ni.Tag:=(Sender as TForm).Handle;
end;
Далее, в дочерней форме:
procedure TFChild.FormCreate(Sender: TObject);
begin
FMain.AddMenuItem(self);
end;
procedure TFChild.FormActivate(Sender: TObject);
var a:integer;
begin
for a:=0 to self.ComponentCount-1 do
if (self.Components[a] is TMenuItem) and (self.Components[a].tag=self.Handle) then
(self.Components[a] as TMenuItem).checked:=true;
// можно сделать проще, если caption каждой дочерней формы уникален. Тут заточка на возможное существование форм с одинаковым caption.
end;
При создании дочерней формы, она добавляет пункт меню в Mainmenu главной формы. (Причем являясь его owner. За счёт этого, при удалении формы удаляется и пункт меню). При активации формы, она ищет среди своих компонентов, компонент TMenuItem, у которого tag равен handle формы и найдя его, отмечает как выделенный. (Повторю, можно сделать проще, если использовать caption формы и искать по нему. Но если попадутся дочернии формы с одинаковыми caption - беда.)
При нажатии на пункт меню, он берёт своего owner и показывает его.
Удачи.
P.S.
Tip: Повесившись на обработчик MainMenuChange, можно отлавливать момент, когда не осталось ни одной дочерней формы
If FMain.MDIChildCount=0 then ...
и принимать меры.
← →
grusty (2003-12-22 10:53) [6]-->Olphi
В Delphi имеются демонстрационные пректы. Открой проект ..\\Borland\Delphi\Demos\Doc\TextEdit\.. и посмотри - там реализовано именно то, что тебе надо и о чем я тебе говорил (см. выше)...
Кроме того, на www.torry.net имеется замечательный компонент tb2k, который более гибче и позволяет реализовывать много интересных вещей...
← →
Крутыш (2003-12-22 11:06) [7]Братан если я тебя правильно понял тебе нужно: когда
создаётся новая MDI-Child форма, она добавлялась в меню "Окно".
И так все формы!!! А потом когда выбираешь в меню "Окно" эту
форму она активизировалась. Тогда тебе надо поискать компонент
ToolBar2000 там есть такой компонент его добавляешь в меню
он сам всё делает: и добавляет и удаляет.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c