DMI формы
От: liver Россия  
Дата: 20.12.04 06:38
Оценка:
Добрый день.
Вобщем есть проект на MDI формах.
Ну и надо, чтоб в MainMenu был пункт "окна", в котором был бы список всех MDIChild на данный момент.
Как правильно реализовывать данную фишку ?
Я прицепил на клик по пункту меню "окна" кусок кода, который перебирает все MDIChild
и записывает их Caption.
Надож чтоб по клику активизировалась выбранная форма.
А вот как это сделать не знаю.
Подскажите.
Re: DMI формы
От: kavlad Россия http://www.wavesoft.ru
Дата: 20.12.04 07:15
Оценка:
Здравствуйте, liver, Вы писали:

L>Ну и надо, чтоб в MainMenu был пункт "окна", в котором был бы список всех MDIChild на данный момент.

L>Как правильно реализовывать данную фишку ?
L>Я прицепил на клик по пункту меню "окна" кусок кода, который перебирает все MDIChild
L>и записывает их Caption.

Это все делается автоматом. У формы есть свойство WindowMenu.
... По ушам лупит начальство
Re[2]: DMI формы
От: liver Россия  
Дата: 20.12.04 07:24
Оценка:
Здравствуйте, kavlad, Вы писали:

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


L>>Ну и надо, чтоб в MainMenu был пункт "окна", в котором был бы список всех MDIChild на данный момент.

L>>Как правильно реализовывать данную фишку ?
L>>Я прицепил на клик по пункту меню "окна" кусок кода, который перебирает все MDIChild
L>>и записывает их Caption.

K>Это все делается автоматом. У формы есть свойство WindowMenu.


блин, как же все просто оказалось
сорри за глупый вопрос
Re[2]: DMI формы
От: liver Россия  
Дата: 20.12.04 07:31
Оценка:
Здравствуйте, kavlad, Вы писали:

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


L>>Ну и надо, чтоб в MainMenu был пункт "окна", в котором был бы список всех MDIChild на данный момент.

L>>Как правильно реализовывать данную фишку ?
L>>Я прицепил на клик по пункту меню "окна" кусок кода, который перебирает все MDIChild
L>>и записывает их Caption.

K>Это все делается автоматом. У формы есть свойство WindowMenu.


выходит система сама пишет пункт меню "окна"
а если система англоязычная "windows"?
выходит таким образом можно привязаться только к конкретному меню, а не пункту меню.
Re[3]: DMI формы
От: kavlad Россия http://www.wavesoft.ru
Дата: 20.12.04 07:41
Оценка:
Здравствуйте, liver, Вы писали:

L>выходит таким образом можно привязаться только к конкретному меню, а не пункту меню.


Именно к пункту.
... По ушам лупит начальство
Re[4]: DMI формы
От: liver Россия  
Дата: 20.12.04 08:33
Оценка:
Здравствуйте, kavlad, Вы писали:

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


L>>выходит таким образом можно привязаться только к конкретному меню, а не пункту меню.


K>Именно к пункту.


спасибо.
Re[4]: DMI формы
От: liver Россия  
Дата: 21.12.04 06:18
Оценка:
Здравствуйте, kavlad, Вы писали:

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


L>>выходит таким образом можно привязаться только к конкретному меню, а не пункту меню.


K>Именно к пункту.



Вобщем поставил я для MDIMainForm параметр WindowMenu нужный мне пункт меню.
нифига...
поставил для каждой из MDIChildForm параметр WindowMenu нужный мне пункт меню.
нифига...

что не так делаю... ???
Re[5]: DMI формы
От: kavlad Россия http://www.wavesoft.ru
Дата: 21.12.04 06:40
Оценка:
Здравствуйте, liver, Вы писали:

L>что не так делаю... ???


Почитай статьи:
Разработка MDI приложений в Delphi
Создание приложения MDI

Посмотри пример в Delphi\Demos\Doc\TextEdit

Еще почитай что-нибудь из Re: "Классические" книги по Delphi
Автор: kavlad
Дата: 20.10.04
... По ушам лупит начальство
Re[5]: DMI формы
От: ak_miass Россия  
Дата: 21.12.04 06:48
Оценка:
Здравствуйте, liver, Вы писали:


L>Вобщем поставил я для MDIMainForm параметр WindowMenu нужный мне пункт меню.

L>нифига...
L>поставил для каждой из MDIChildForm параметр WindowMenu нужный мне пункт меню.
L>нифига...

L>что не так делаю... ???


Я недавно задавал в этом форуме аналогичный вопрос. Мне сказали, что проблема связана с русскими символами, и посоветовали добавлять '&' в начале названия каждого подпункта меню в WindowMenu. В принципе заработало.
Re[6]: DMI формы
От: liver Россия  
Дата: 21.12.04 06:52
Оценка:
Здравствуйте, ak_miass, Вы писали:

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



L>>Вобщем поставил я для MDIMainForm параметр WindowMenu нужный мне пункт меню.

L>>нифига...
L>>поставил для каждой из MDIChildForm параметр WindowMenu нужный мне пункт меню.
L>>нифига...

L>>что не так делаю... ???


_>Я недавно задавал в этом форуме аналогичный вопрос. Мне сказали, что проблема связана с русскими символами, и посоветовали добавлять '&' в начале названия каждого подпункта меню в WindowMenu. В принципе заработало.



спасибо.
будем пробовать.
Re[6]: DMI формы
От: liver Россия  
Дата: 21.12.04 06:53
Оценка:
Здравствуйте, ak_miass, Вы писали:

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



L>>Вобщем поставил я для MDIMainForm параметр WindowMenu нужный мне пункт меню.

L>>нифига...
L>>поставил для каждой из MDIChildForm параметр WindowMenu нужный мне пункт меню.
L>>нифига...

L>>что не так делаю... ???


_>Я недавно задавал в этом форуме аналогичный вопрос. Мне сказали, что проблема связана с русскими символами, и посоветовали добавлять '&' в начале названия каждого подпункта меню в WindowMenu. В принципе заработало.


а кстати, у меня имена в менюхах на английском.
только Caption на русском.
Re[7]: DMI формы
От: ak_miass Россия  
Дата: 21.12.04 07:14
Оценка:
Здравствуйте, liver, Вы писали:


L>а кстати, у меня имена в менюхах на английском.

L>только Caption на русском.

Я про них и имел в виду.
Re[8]: DMI формы
От: liver Россия  
Дата: 21.12.04 07:20
Оценка:
Здравствуйте, ak_miass, Вы писали:

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



L>>а кстати, у меня имена в менюхах на английском.

L>>только Caption на русском.

_>Я про них и имел в виду.


ыходит пункты меню надо называть '&Окна'
и сами Кэпшины для чилдформ аналогично.
Re[9]: DMI формы
От: ak_miass Россия  
Дата: 21.12.04 07:32
Оценка:
Здравствуйте, liver, Вы писали:

L>ыходит пункты меню надо называть '&Окна'

Да. Например, у нас есть пункт меню MWindow с Caption = '&Окна', в нём есть подменю '&Каскад', '&Вертикально', '&Горизонтально'. Указываем для родительской формы WindowMenu = MWindow.
Пункты для дочерних окон в этом случае будут создаваться автоматически. Вместо знака & будет подчёркнут следующий за ним символ.


L>и сами Кэпшины для чилдформ аналогично.

Нет.
Re[10]: DMI формы
От: liver Россия  
Дата: 21.12.04 07:56
Оценка:
Здравствуйте, ak_miass, Вы писали:

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


L>>ыходит пункты меню надо называть '&Окна'

_>Да. Например, у нас есть пункт меню MWindow с Caption = '&Окна', в нём есть подменю '&Каскад', '&Вертикально', '&Горизонтально'. Указываем для родительской формы WindowMenu = MWindow.
_>Пункты для дочерних окон в этом случае будут создаваться автоматически. Вместо знака & будет подчёркнут следующий за ним символ.

это не есть гут.
может как-то еще можно выйти из положения ???


L>>и сами Кэпшины для чилдформ аналогично.

_>Нет.
Re[10]: DMI формы
От: liver Россия  
Дата: 22.12.04 06:15
Оценка:
Здравствуйте, ak_miass, Вы писали:

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


L>>ыходит пункты меню надо называть '&Окна'

_>Да. Например, у нас есть пункт меню MWindow с Caption = '&Окна', в нём есть подменю '&Каскад', '&Вертикально', '&Горизонтально'. Указываем для родительской формы WindowMenu = MWindow.
_>Пункты для дочерних окон в этом случае будут создаваться автоматически. Вместо знака & будет подчёркнут следующий за ним символ.


L>>и сами Кэпшины для чилдформ аналогично.

_>Нет.

Вобщем сделал все как тут писалось...
нифига...
прочел кучу статей по этому поводу...
нифига...
и так делал и этак...
ну ни в какую...
пишут, что TMenuItem должен быть первого уровня, пожалуйста...
но эфекта никакого...
уже и на английском кэпшины писал, что только не делал...
у меня Delphi 5, WinXP SP2
я просто в отчаянии...
Re[11]: DMI формы
От: ak_miass Россия  
Дата: 22.12.04 06:19
Оценка:
Здравствуйте, liver, Вы писали:

L>я просто в отчаянии...


Ну зачем сразу так. Помнится когда-то я тоже с этим глюком бился , но в конце концов решил сделать такую менюху сам — оказалось вовсе не сложно.
Re[12]: DMI формы
От: liver Россия  
Дата: 22.12.04 06:24
Оценка:
Здравствуйте, ak_miass, Вы писали:

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


L>>я просто в отчаянии...


_>Ну зачем сразу так. Помнится когда-то я тоже с этим глюком бился , но в конце концов решил сделать такую менюху сам — оказалось вовсе не сложно.


просто не хочется изобретать велосипед...если он уже есть...
да и как-то пробовал я...
на итем менюхи навесить событие, которое впихивает туда все кэпшины окон.
надож еще указатели на них хранить...чтоб потом окна открывать...
вобщем...я так понимаю стандартными средствами никак, да...

тогда может кто поделится куском кода, как самому это сделать ?
Re: DMI формы
От: liver Россия  
Дата: 23.12.04 07:48
Оценка:
Здравствуйте, liver, Вы писали:

L>Добрый день.

L>Вобщем есть проект на MDI формах.
L>Ну и надо, чтоб в MainMenu был пункт "окна", в котором был бы список всех MDIChild на данный момент.
L>Как правильно реализовывать данную фишку ?
L>Я прицепил на клик по пункту меню "окна" кусок кода, который перебирает все MDIChild
L>и записывает их Caption.
L>Надож чтоб по клику активизировалась выбранная форма.
L>А вот как это сделать не знаю.
L>Подскажите.

И сново я
все уже перепробовал.
Уже пошагово делал, как знакомые говорят.
Ничего не получается.
Один товарищ сказал что надо вместо MDIform выставлять стиль формы в fsStayOnTop
но у меня дельфи ругается, мол не могу найти MDIform
может это глюк Delphi 5 ???
Re[2]: DMI формы
От: kavlad Россия http://www.wavesoft.ru
Дата: 23.12.04 08:15
Оценка:
Здравствуйте, liver, Вы писали:

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


Смело плюнь товарищу в лицо.
... По ушам лупит Gods Tower — Till Death Do Us Part
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...
Пока на собственное сообщение не было ответов, его можно удалить.