Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

PopurMenu


faiwer ©   (2010-09-11 15:30:00) 

Доброго времени суток. У меня два, наверное, простых вопроса.

1. Как можно отобразить подменю, отдельно от его родителя? К примеру у меня есть a: TPopurMenu, а в нём b: TMenuItem, в котором в свою очередь есть несколько вложенных TMenuItem. Моя задача отобразить только вложенные в b пункты меню. Это реально?

2. У меня есть подменю, в котором каждый пункт как CheckBox (выбор колонов таблице для просмотра). Хотелось бы, чтобы при нажатии на любой из пунктов, подменю не пропадало. Это реализуемо?

P.S. D2010, W7


Джо   (2010-09-12 04:44:00) [1]

По п. 2 я бы сделал, как предложил Германн ©   (11.09.10 16:04) [2].
Меню с нестандартным поведением должно и выглядеть нестандартно. Меню стандартно всегда закрывается после выбора элемента. Если оно не закрывается, это и не должно выглядеть, как меню. Пусть это будет, скажем, плавающая панель.


Джо   (2010-09-12 04:39:00) [2]


> Германн ©   (11.09.10 18:31) [6]
> Всё равно пункт 2 в PopupMenu работать не будет. Или я что-
> то не понимаю?

Конечно, не будет :)


faiwer   (2010-09-11 19:17:00) [3]

Похоже пункт 2 проще всего реализовать вызывая Popur(x,y) в тех же x,y, что и раньше, а затем эмулировать клик мыши в нужное подменю (ещё надо как то найти его координаты, или послать ему сигнал perform). В общем всё что ни приходит в голову на ету тему, сплошной гемморой. Похоже проще будет делать не подменю, а по нажатию на "вид", закрывать 1 контекстное меню, и тут же грузить где нидь посередине другое... Тухловато, но хоть как то )


Германн   (2010-09-11 18:31:00) [4]

Всё равно пункт 2 в PopupMenu работать не будет. Или я что-то не понимаю?


Джо   (2010-09-11 17:32:00) [5]

Пишем приблизительно такую функцию:

procedure CopySubMenuItems(Source: TMenuItem; Dest: TPopupMenu);
var
 I: Integer;
 Mi: TMenuItem;
begin
 Assert (Dest <> nil, 'Dest must point to existing TPopupMenu instance');

 for I := 0 to Source.Count - 1 do
 begin
   Mi := TMenuItem.Create(Dest);
   Mi.Caption := Source.Items[i].Caption;
   Mi.OnClick := Source.Items[i].OnClick;
   // В общем, копируем все нужные свойства
   Dest.Items.Add(Mi);
 end;
end;


И с ее помощью копируем пункты нужного нам подменю в отдельное TPopupMenu.


Медвежонок Пятачок   (2010-09-11 17:22:00) [6]

все подменю - в отдельные попап меню и затем PopupMenu1.Popup(x,y);


faiwer   (2010-09-11 16:25:00) [7]

Угу, а есть более кошерные варианты?


Германн   (2010-09-11 16:04:00) [8]

Просто своё окно внешне похожее на меню может помочь решить обе эти задачи.


faiwer   (2010-09-11 15:36:00) [9]

Думаю этот скрин поможет разъяснить ситуацию http://s53.radikal.ru/i140/1009/4b/e07ada34999b.jpg

Это длинное меню, создаваемое динамичеки, я хочу запускать не только из этого PopurMenu, но ещё и повесить на MainMenu, и на кнопку.

Что касается второго вопроса, думаю вполне очевидно, что если надо несколько колонок скрыть или показать, очень неудобно всё время мучать правую кнопку мыши :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо