![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PopupMenu [Windows]
z007 © (2004-07-10 23:51:00)Почему(?)-то не так как всегда работает.
При показанном Popup (например, к форме), на повторный щелчок правой кнопкой меню не реагирует: по идее должно появляться заново - в месте щелчка. Ан нет...
Как поправить?
z007 (2004-07-18 11:48:00) [1]Я извиняюсь за беспокойство :)
Оказалось достаточным указать
Result.PopupMenu1.Flags := TPM_RIGHTBUTTON;
Vladimir Kladov (2004-07-14 15:46:00) [2]А если TKOLApplet на форме лежит? (без MCK - отдельно от MainForm создается Applet, как в примере)?
z007 (2004-07-13 23:07:00) [3]Почему-то не помогает...
Дело вот в чем. Создаю пустой kol-проект, делаю popupMenu для формы.
Щелкаю правой кнопкой - меню появляется.
Передвигаю мышь в другую область формы, щелкаю правой кнопкой. Новое меню не появляется, прежнее - не исчезает (содержание меню зависит от того, в какой точке нажата правая кнопка).Пока что приходится нажимать левую кнопку, чтобы сбросить всплывшее меню.
Gandalf (2004-07-12 18:57:00) [4]Це по API-шному, по грамотному... Если у тебя мыша не подвинулась - то меню не показываться. Можно немного мышь сдвигать или делать проверку на меню... Мне это не совсем нравиться - надо проверить координаты старой - а я просто делаю сдвиг на пиксель...
//[function WndProcAutoPopupMenu]
function WndProcAutoPopupMenu( Control: PControl; var Msg: TMsg; var MsgRslt: Integer ): Boolean;
begin
if (Msg.message = WM_CONTEXTMENU) and
(Control.fAutoPopupMenu <> nil) then
begin
{$IFDEF USE_MENU_CURCTL}
PMenu( Control.fAutoPopupMenu ).fCurCtl := Control;
{$ENDIF USE_MENU_CURCTL}
if GetMenu(Control.Handle)=0 then // Проверка если меню уже есть
PMenu( Control.fAutoPopupMenu ).Popup( SmallInt( LoWord( Msg.lParam ) ),
SmallInt( HiWord( Msg.lParam ) ) )
else
PMenu( Control.fAutoPopupMenu ).Popup( SmallInt( LoWord( Msg.lParam ) ),
SmallInt( HiWord( Msg.lParam )+1 ) );
Result := TRUE;
end
else
Result := FALSE;
end;