--------------------------------- 第2个问题 我在窗口上有一个弹出菜单,PopupMenu1,我想让它弹出时,向上弹出(类似Windows的开始菜单)。 我现在用的方法是获取菜单中每个Item的高度,然后计算坐标后,再Popup(X,Y); 获取弹出菜单的高度的函数如下,是我在网上找到的。 function GetPopMenuHeight(hWnd: THandle; PopupMenu: TPopupMenu): Integer; var I: Integer; lprcRect: TRect; begin Result:= 0; for I:= 0 to PopupMenu.Items.Count - 1 do begin GetMenuItemRect(hWnd, PopupMenu.Handle, I, lprcRect); Inc(Result, lprcRect.Bottom - lprcRect.Top); end; end;
看了一下TIcon的源码,发现果然有问题: function TIcon.GetHeight: Integer; begin Result := FImage.FSize.y;//载入文件后第一次使用时,它会返回0,这样得到的结果就不正确了 if Result = 0 then Result := GetSystemMetrics(SM_CYICON) end;