zoukankan      html  css  js  c++  java
  • delphi TDbGrid 右键 PopupMenu 菜单只在有数据的地方弹出

    最近用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. 

  • 相关阅读:
    Postgres窗口函数学习
    关于KMP算法
    Kettle应用实例
    mybatis中po类继承另一个po类时查不出另一个po类里的属性
    查看Mybatis动态SQL
    取每个班前5名成绩的sql
    scatter/gather与map/reduce技术的布道推广从换个说法开始
    神奇的O記
    【坑】软件的大版本的各类小版本支持问题
    oracle时间处理tochar的黑幕坑
  • 原文地址:https://www.cnblogs.com/heimirror/p/1855841.html
Copyright © 2011-2022 走看看