将TPopupMenu对齐到表单的右侧?

nor*_*aul 10 delphi winapi

如何将TPopupMenu与表单的右侧对齐?问题是在调用之前似乎没有办法获得弹出菜单的宽度Popup(X, Y: Integer).

我试图获得类似于Chrome中系统菜单的行为.

在此输入图像描述

Ser*_*yuz 14

最简单的解决方案是自己启动弹出菜单:

procedure TForm1.Panel1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var
  PopupPt: TPoint;
begin
  PopupPt := ClientToScreen(Point(ClientWidth, 0));
  TrackPopupMenu(PopupMenu1.Handle, TPM_RIGHTALIGN or TPM_TOPALIGN,
      PopupPt.X, PopupPt.Y, 0, PopupList.Window, nil);
end;
Run Code Online (Sandbox Code Playgroud)

请参阅文档TrackPopupMenuTrackPopupMenuEx各种标志的含义.


Ond*_*lle 13

你也可以只设置AlignmentpaRight和呼叫

with ClientToScreen(Point(ClientWidth - 1, 0)) do
  Popup(X, Y);
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案有一个奇怪的小问题.如果您有双显示器并且应用程序已最大化,则弹出窗口将显示在第二台显示器上.简单的解决方法是使用ClientWidth - 1. (3认同)