Текущий архив: 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.45 MB
Время: 0.011 c