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

Вниз

Как вставить свои пункт в PopUp меню?   Найти похожие ветки 

 
AHTOH   (2003-10-05 20:56) [0]

Код такой:

popupmenu1.Popup(300,300);
sysmenu:=popupmenu1.handle;
AppendMenu(SysMenu, mf_SEPARATOR and MF_OWNERDRAW, 0, #0);
AppendMenu(SysMenu, mf_BYPOSITION and mf_popup and MF_OWNERDRAW, My_MenuItem, "Новый пункт");
drawmenubar(popupmenu1.Handle);

Для MainMenu и системного меню формы - работает, а для попапа - нет...


 
Almaz ©   (2003-10-06 02:05) [1]

Сначала отвечу на вопрос "почему ?". Ответ очевиден, если внимательно рассмотреть код функции Popup класса TPopupMenu:

procedure TPopupMenu.Popup(X, Y: Integer);
...
begin
...
FItems.RebuildHandle;
...
TrackPopupMenu(FItems.Handle, AFlags, X, Y, 0 { reserved }, PopupList.Window, nil);
end;


Обратите внимание на выделенную строку - в ней происходит вызов функции, которая пересоздает меню, основываясь на данных, прописанных в свойстве Items класса, тем самым все вызванные вами AppendMenu попросту исчезнут.

Теперь отвечу на вопрос "как ?". Тут все зависит от того - хотите ли вы пользоваться VCL или WinAPI. Если вы выбираете VLC, то проблема решается чтением хелпа ;) в результате чего вы придете к чему-то вроде :

var
NewItem: TMenuItem;
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := "-";
PopupMenu1.Items.Add(NewItem);

NewItem := TMenuItem.Create(Self);
NewItem.Caption := "Новый пункт";
PopupMenu1.Items.Add(NewItem);
...


Если же вы решили использовать WinAPI (не зря же задали вопрос в соответствующей конференции :), то мой вам совет - не мешайте тогда водку с портвейном ;) в смысле - если пользуетесь WinAPI то про класс TPopupMenu забудьте и используйте функцию TrackPopupMenu.
Но если вы все же настаиваете на выбранном пути, то пропишите приведенный вами код в обработчик события OnChange для вашего PopupMenu1.

Удачи.


 
ARTEMKA   (2003-10-06 03:01) [2]

>>>Almaz
А не подскажешь как сделать popup чтоб слева например вставить вертикальную полосу градентную, как например бывает во многих приложениях


 
Almaz ©   (2003-10-06 03:32) [3]


> ARTEMKA (06.10.03 03:01) [2]
> >>>Almaz
> А не подскажешь как сделать ...

Подскажу - это делается при помощи OnDrawItem. Но если хотите обсудить это более подробно, то задайте этот же вопрос в отдельной ветке.

Удачи.


 
AHTOH   (2003-10-06 13:43) [4]

Спасибо, попробую TrackPopupMenu



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

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

Наверх




Память: 0.47 MB
Время: 0.027 c
14-90115
val_5
2003-11-03 17:33
2003.11.27
Windows CE


1-89894
Кен
2003-11-12 07:04
2003.11.27
Почему массивы Boolean сохраняются на диск как одно


1-89998
Saturn
2003-11-17 10:34
2003.11.27
Греческий алфавит


1-89893
uu
2003-11-15 13:00
2003.11.27
события


3-89777
Dimaz-z
2003-11-06 20:39
2003.11.27
Индексы...