delphi TDbGrid 右键 PopupMenu 菜单只在有数据的地方弹出

   2023-02-09 学习力0
核心提示:最近用delphi做开发,用到了DbGrid控件,想在控件上点击鼠标右键弹出菜单关联DbGrid的 Popupmenu 倒是可以实现,但是这样的效果是不管你在哪里单击鼠标右键只要在DBGrid里面就会弹出菜单,我想只在数据区弹出,网上查了N多了资料,没有找到满意的偶然间发现,

最近用delphi做开发,用到了DbGrid控件,想在控件上点击鼠标右键弹出菜单

关联DbGrid的 Popupmenu 倒是可以实现,但是这样的效果是不管你在哪里单击鼠标右键

只要在DBGrid里面就会弹出菜单,我想只在数据区弹出,网上查了N多了资料,没有找到满意的

偶然间发现,当在DbGrid上单击鼠标右键的时候,当鼠标在数据区的时候不会触发 MouseDown事件

这样我就想用 MouseUp和MouseDown 区分鼠标是不是在数据区 ,然后弹出菜单

首先定义一个全局变量:

var ShowPopupMenu :Boolean = true; //默认情况下可以弹出菜单

然后定义MouseDown事件 当鼠标在非数据区的时候会触发事件,这时候将ShowPopMenu设为False

 

procedure TForm1.gridAccountMouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  
if (Button = mbright) then
  
begin
    ShowPopupMenu :
= False; 
  
end;
end;

当鼠标弹起的时候在MouseUp事件里判断 ShowPopupMenu 是否为 true

procedure TForm1.gridAccountMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
  
if (Button = mbright) and ShowPopupMenuthen
  
begin
    
if (gridAccount.SelectedField <> nilthen  //如果有数据
    
begin
      //弹出菜单即可
    
end;
  
end;
  showpop :
= True;
end;

 

这样就可以实现在数据区的时候弹出右键菜单了

注:由于俺是新手只能用这种笨方法实现了,如果哪位仁兄有更好的方法希望能告知 thx. 

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

点击排行