Re[2]: DMI формы
От: kavlad Россия http://www.wavesoft.ru
Дата: 23.12.04 08:30
Оценка:
Здравствуйте, liver, Вы писали:

Дай свое мыло, я тебе вышлю работающий пример.
... По ушам лупит Lacrimosa — Am Ende Der Stille
Re[3]: DMI формы
От: liver Россия  
Дата: 23.12.04 08:33
Оценка:
Здравствуйте, kavlad, Вы писали:

K>Здравствуйте, liver, Вы писали:


K>Дай свое мыло, я тебе вышлю работающий пример.


liver_13@mail.ru

пасибо а я уж было собрался вешаться
Re[3]: DMI формы
От: liver Россия  
Дата: 23.12.04 08:42
Оценка:
Здравствуйте, kavlad, Вы писали:

K>Здравствуйте, liver, Вы писали:


K>Дай свое мыло, я тебе вышлю работающий пример.



все все все !!!
разобрался !!!
вся фишка была в том, что надо было субменю сделать.
а нигде в доках про это не пишут.
спасибо всем
Re[3]: DMI формы
От: liver Россия  
Дата: 23.12.04 09:26
Оценка:
Здравствуйте, kavlad, Вы писали:

K>Здравствуйте, liver, Вы писали:


L>>Один товарищ сказал что надо вместо MDIform выставлять стиль формы в fsStayOnTop


K>Смело плюнь товарищу в лицо.


дело в том, что товарищ шарящий мужик...
да и он у себя делал такую фишку...
так что как-то ну никак не могу плюнуть
пусть даже он и ошибся
Re[13]: DMI формы
От: aish.I  
Дата: 23.12.04 09:49
Оценка:
Здравствуйте, 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;
Re[14]: DMI формы
От: aish.I  
Дата: 23.12.04 10:00
Оценка:
Здравствуйте, aish.I, Вы писали:

Да, будет работать корректно, если все кепшены форм (елементов меню) разные (напр. новые окно с порядковым номером, имена открытых файлов с полными путями и др.). Если это не подходит, надо искать другой путь.
Re[15]: DMI формы
От: liver Россия  
Дата: 23.12.04 10:10
Оценка:
Здравствуйте, aish.I, Вы писали:

AI>Здравствуйте, aish.I, Вы писали:


AI>Да, будет работать корректно, если все кепшены форм (елементов меню) разные (напр. новые окно с порядковым номером, имена открытых файлов с полными путями и др.). Если это не подходит, надо искать другой путь.


ну вобще-то прикольно.
возьмем на заметку куски кода
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.