Подскажите пожалуйста, можно ли при нажатии правой кнопки мыши на пункте PopupMenu вызвать другое PopupMenu?
Здравствуйте, AssAsin, Вы писали:
AA>Мне подумалось: Пуск -> Документы (это ведь popup?)
Я пробовал повесить хук на мышь (там возможно определить, какая кнопка мыши вызовет WM_COMMAND), но попытки активизировать второе popup меню, не убрав с экрана первого, ни к чему не привели:
function MouseProc(nCode: Integer; wParam: LongInt; lParam: LongInt): Integer; stdcall;
var
p: PMouseHookStruct;
r: TPoint;
begin
if (nCode = HC_NOREMOVE) and (wParam <> WM_MOUSEMOVE) then
begin
p := Pointer(lParam);
if wParam = WM_RBUTTONUP then
begin
r := Form1.ScreenToClient(p^.pt);
EndMenu; // Без этого PopupMenu2 не появляется
PostMessage(Form1.Handle, WM_USER, p^.pt.x, p^.pt.y);
Result := 1;
Exit;
end;
end;
Result := 0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowsHookEx(WH_MOUSE, @MouseProc, HInstance, GetCurrentThreadID);
end;
procedure TForm1.WMUser(var AMessage: TMessage);
begin
PopupMenu2.Popup(AMessage.WParam, AMessage.LParam);
end;
Так что сомневаюсь я, что там обычный popup. Иначе вот эти ребята остались бы без работы:
http://www.animatedmenus.com