手工通过代码来控制右键菜单的弹出

为什么使用MouseDown事件而不用MouseUp事件呢? 通过实践,我得出MouseUp事件在点击的时候并不总是被触发.

procedure TPipeFrame.PipeListViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Pt : TPoint;
begin

//通过Button参数和Shift参数都可以获取鼠标的左右键信息,
//而使用Shift参数应该采用下面的方式
//if (ssRight in Shift) then
if Button = mbRight then
begin
if Assigned(PipeListView.Selected) then
begin
MenuEditPipe.Enabled := True;
MenuDelPipe.Enabled := True;
end else begin
MenuEditPipe.Enabled := False;
MenuDelPipe.Enabled := False;
end;
//这里应该使用GetCursorPos函数来取得鼠标坐标点,否则会产生坐标点错位的问题.

GetCursorPos(Pt);
PipeListViewPopupMenu.Popup(Pt.X, Pt.Y);
//错位严重
//PipeListViewPopupMenu.Popup(X, Y);
//X轴无错位,Y轴有一些错位,估计与隐藏标题栏有关
//PipeListViewPopupMenu.Popup(ClientToScreen(Point(X, Y)).X, ClientToScreen(Point(X, Y)).Y);
end;
end;

评论

此博客中的热门博文

如何解决在Delphi2009中添加pas组件的问题

在Delphi中操作Sap对象造成内存增长的原因

杀死团队的七种武器(转)