TPopupMenu如何与表单的右侧对齐?问题是在调用Popup(X, Y: Integer)
之前似乎没有办法获得弹出式菜单的宽度。将TPopupMenu与表单的右侧对齐?
我试图得到一个类似于Chrome中系统菜单的行为。
TPopupMenu如何与表单的右侧对齐?问题是在调用Popup(X, Y: Integer)
之前似乎没有办法获得弹出式菜单的宽度。将TPopupMenu与表单的右侧对齐?
我试图得到一个类似于Chrome中系统菜单的行为。
最简单的解决办法是将自己推出的弹出式菜单:为TrackPopupMenu
或各种标志的意思
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;
见文档TrackPopupMenuEx
。
+1一如既往的出色工作 – 2012-07-25 12:19:15
+1,塞尔特克 - 大卫说。 :-) – 2012-07-25 12:20:35
+1 - 肯说,大卫说:) – Shambhala 2012-07-25 15:47:29
重复:[Windows操作系统。更改下拉菜单位置](http://stackoverflow.com/q/4721989) – 2012-07-25 11:37:41
@Sertac - 我不明白这是一个重复的问题。 a)它用Delphi标记。 b)它不是简单地移动弹出窗口。它要求菜单的宽度是已知的,所以可以计算位置。 – norgepaul 2012-07-25 11:46:56
在移动菜单窗口之前,您可以获取其大小/位置。 VCL不提供您要求的功能,因此您必须使用api调用。我认为这使得它是重复的,但也许不是。 – 2012-07-25 11:51:21