博文

目前显示的是 十二月, 2006的博文

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

为什么使用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;