Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.05;
Скачать: CL | DM;

Вниз

PopurMenu   Найти похожие ветки 

 
faiwer ©   (2010-09-11 15:30) [0]

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

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

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

P.S. D2010, W7


 
faiwer ©   (2010-09-11 15:36) [1]

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

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

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


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

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


 
faiwer ©   (2010-09-11 16:25) [3]

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


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

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


 
Джо ©   (2010-09-11 17:32) [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 18:31) [6]

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


 
faiwer ©   (2010-09-11 19:17) [7]

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


 
Джо ©   (2010-09-12 04:39) [8]


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

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


 
Джо ©   (2010-09-12 04:44) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2010.12.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
15-1282214120
Unknown_user
2010-08-19 14:35
2010.12.05
Многопроцессное MDI приложение


2-1284406232
ZV
2010-09-13 23:30
2010.12.05
Проблемы с компонентом TPanel


2-1284382841
Delphi
2010-09-13 17:00
2010.12.05
Приведение типов в методах TAction


6-1230233588
vad_shesh
2008-12-25 22:33
2010.12.05
Как определить, открыт ли эксель-файл в ЛС


15-1282879219
Дмитрий С
2010-08-27 07:20
2010.12.05
Оплата через assist или подобное.