Здравствуйте, liver, Вы писали:
Дай свое мыло, я тебе вышлю работающий пример.
... По ушам лупит Lacrimosa — Am Ende Der Stille
Здравствуйте, kavlad, Вы писали:
K>Здравствуйте, liver, Вы писали:
K>Дай свое мыло, я тебе вышлю работающий пример.
liver_13@mail.ru
пасибо

а я уж было собрался вешаться
Здравствуйте, kavlad, Вы писали:
K>Здравствуйте, liver, Вы писали:
K>Дай свое мыло, я тебе вышлю работающий пример.
все все все !!!
разобрался !!!
вся фишка была в том, что надо было субменю сделать.
а нигде в доках про это не пишут.
спасибо всем
Здравствуйте, kavlad, Вы писали:
K>Здравствуйте, liver, Вы писали:
L>>Один товарищ сказал что надо вместо MDIform выставлять стиль формы в fsStayOnTop
K>Смело плюнь товарищу в лицо.
дело в том, что товарищ шарящий мужик...
да и он у себя делал такую фишку...
так что как-то ну никак не могу плюнуть

пусть даже он и ошибся
Здравствуйте, liver, Вы писали:
L>тогда может кто поделится куском кода, как самому это сделать ?
Главная форма — TMainForm, главное меню — MainForm.MainMenu, в нем четвертый пункт — "Окно".
В кепшены элементов меню заносятся кепшены дочерних форм.
Дочерняя форма — TItemsListForm.
В главной форме описываеш функцию:
procedure TMainForm.acActivateExecute(Sender: TObject);
var
I : Integer;
begin
for I := 0 to MDIChildCount - 1 do
if TItemsListForm(MDIChildren[I]).Caption = TAction(Sender).Caption then
begin
MDIChildren[I].Show;
Break;
end;
end;
При создании дочерней формы:
procedure TItemsListForm.FormCreate(Sender: TObject);
var
MI : TMenuItem;
AC : TAction;
begin
Caption := NewCaptionMes + IntToStr(MainForm.MDIChildCount);
MI := TMenuItem.Create(MainForm.MainMenu);
AC := TAction.Create(MI);
AC.OnExecute := MainForm.acActivateExecute;
AC.Caption := Caption;
MI.Action := AC;
MI.Checked := True;
MainForm.MainMenu.Items[3].Insert(0, MI);
end;
При закрытии дочерней формы:
procedure TItemsListForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
...
if Action = caFree then
MainForm.MainMenu.Items[3].Find(Caption).Free;
end;
При изменении заголовка дочерней формы нужно делать так:
procedure TItemsListForm.SetListName(const Value: AnsiString);
begin
TAction(MainForm.MainMenu.Items[3].Find(Caption).Action).Caption := Value;
Caption := Value;
end;
И для "крутизны", когда текущая форма отмечается галочкой в меню можно сделать так:
procedure TItemsListForm.FormActivate(Sender: TObject);
var
I : Integer;
begin
for I := 0 to MainForm.MainMenu.Items[3].Count - 1 do
if MainForm.MainMenu.Items[3].Items[I] =
MainForm.MainMenu.Items[3].Find(Caption) then
MainForm.MainMenu.Items[3].Items[I].Checked := True
else
MainForm.MainMenu.Items[3].Items[I].Checked := False;
end;
Здравствуйте, aish.I, Вы писали:
AI>Здравствуйте, aish.I, Вы писали:
AI>Да, будет работать корректно, если все кепшены форм (елементов меню) разные (напр. новые окно с порядковым номером, имена открытых файлов с полными путями и др.). Если это не подходит, надо искать другой путь.
ну вобще-то прикольно.
возьмем на заметку куски кода