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

    Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->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

    代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->procedure TForm1.gridAccountMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
    begin
      if (Button = mbright) and ShowPopupMenuthen
      begin
        if (gridAccount.SelectedField <> nil) then  //如果有数据
        begin
          //弹出菜单即可
        end;
      end;
      showpop := True;
    end;

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

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

  • 相关阅读:
    数据库水平切分(拆库拆表)的实现原理解析(转)
    json序列化 & 反序列化
    数据库工作原理
    【原创】python多线程测试接口性能
    XML解析(DOM、ElementTree)及转换为JSON
    nginx+supervisor+gunicorn+flask
    3、爬取干货集中营的福利图片
    Python多环境扩展管理
    九、frp对外提供简单的文件访问服务
    八、frps服务端与nginx可共用80端口
  • 原文地址:https://www.cnblogs.com/jijm123/p/10990263.html
Copyright © 2011-2022 走看看