Popup Menu是windows组件,默认只能控制弹出点,但弹出方向是向上还是向下是系统自动控制的。如果有屏幕下方有足够的空间,默认是向下的。但有的时候需要菜单向上弹出,如图所示:
以前我的做法是计算菜单高度,然后从左上角向下弹出,看似向上弹出的。可是这个菜单高度是个系统相关的东西,没有一个直接的属性在菜单弹出前得到。比如xp和vista的默认高度不一样,大字体的系统和标准字体的高度也不一样。
最近又找了一下,终于找到解决方案,放到这里供大家参考:
procedure TBusCaseManager.BitBtnPrintClick(Sender: TObject);
var
P: TPoint;
begin
inherited;
P := PanelBottom.ClientToScreen(Point(BitBtnPrint.Left,BitBtnPrint.Top));
TrackPopupMenu(PopupMenuPrint.Items.Handle, TPM_BOTTOMALIGN, P.X, P.Y, 0, BitBtnPrint.Handle, nil);
end;
关于TrackPopupMenu的用法请参考windows api帮助。