TPopupMenu
От: Blondin  
Дата: 23.01.03 12:55
Оценка:
Подскажите пожалуйста, можно ли при нажатии правой кнопки мыши на пункте PopupMenu вызвать другое PopupMenu?
Re: TPopupMenu
От: Sergey Ten http://www.fastalgo.com
Дата: 23.01.03 13:14
Оценка:
Здравствуйте, Blondin, Вы писали:

B>Подскажите пожалуйста, можно ли при нажатии правой кнопки мыши на пункте PopupMenu вызвать другое PopupMenu?


Зачем? Можно сделать меню любой вложенности — см help на TMenuItem.Items (хотя вложенность больше одного дополнительного уровня — моветон)
Re[2]: TPopupMenu
От: AssAsin  
Дата: 23.01.03 16:21
Оценка:
Здравствуйте, Sergey Ten, Вы писали:

B>>Подскажите пожалуйста, можно ли при нажатии правой кнопки мыши на пункте PopupMenu вызвать другое PopupMenu?

ST>Зачем? Можно сделать меню любой вложенности — см help на TMenuItem.Items

Мне подумалось: Пуск -> Документы (это ведь popup?) -> WM_RBUTTONDOWN -> Новый popup. Может, у Blondin нечто похожее??
Re[3]: TPopupMenu
От: Sergey Ten http://www.fastalgo.com
Дата: 23.01.03 18:07
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.