procedure TMainForm.Image1(Sender: TObject);
var
  X, Y: Integer;
  P: TPoint;
begin
  P.X:= pn_StatusBar.BoundsRect.Left + pn_MainView_LeftSide.Width;
  P.Y:= pn_StatusBar.BoundsRect.Top;
  Windows.ClientToScreen(Panel1.Handle, P);
  X:= P.X;
  Y:= P.Y;  Y:= Y - GetPopMenuHeight(Self.Handle, PopupMenu_StartMenu) - 6;
  PopupMenu_StartMenu.Popup(X, Y);
end;//获取popupmenu的高度。
function GetPopMenuHeight(Handle: THandle; PopupMenu: TPopupMenu): Integer;
var
  i, sHeight: Integer;
  vRect: TRect;
begin
  sHeight:=   0;
  for i:= 0 to PopupMenu.Items.Count   -   1   do
  begin
    GetMenuItemRect(Handle, PopupMenu.Handle, PopupMenu.Items[i].MenuIndex, vRect);
    sHeight:= sHeight + (vRect.Bottom - vRect.Top{每个菜单项的高度});
  end;
  result:= sHeight;
end;有2个问题想请教下。
现在有个问题是,我第一次点击Image1,弹出PopupMenu,位置不对,跟踪后是发现 GetPopMenuHeight 返回的值是 0,但第二次popup就可以返回正确的高度。因为我的popupmenu里面的内容是预先设置好的。并不是onPupup时临时添加的。感觉不应该会返回0才对。不知道为什么了?还有一个是,我点击image popup一个菜单。但popup后,该image不会返回onmouseup事件。
操作是。点击image1-->弹出菜单-->点击菜单和image外的其他空余地方。我是把image1放在一个panel上的。点击在panel的空白地方。就不会返回image1.onmouseup事件。
不知道有没有方法解决。