Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.011 c
1-25331
dss
2003-12-22 15:58
2004.01.09
OLE: проблема переноса на другую машину


1-25318
tav
2003-12-22 18:21
2004.01.09
Как строку из ListBox-а скопировать в буфер?


3-25184
Sirus
2003-12-13 07:46
2004.01.09
Backup / Restore влияет на ORDER BY???


7-25628
Ev1972
2003-10-27 10:58
2004.01.09
Как программно определить путь к папке


14-25587
DelphiN!
2003-12-17 08:56
2004.01.09
Прога для маштабного изменения веб страниц





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