怎么DBGRID的点两次ONTitleBtnClick事件,会触发ONDBClick事件??我是点标题排序,不过点快一点就触发了双击事件了,有没办法使双击标题也不能触发ONDBClick事件?只能点里面的内容才触发?
--------------------
 回复人: yleiou(yl) ( ) 信誉:100  2004-7-2 11:16:08  得分: 0  
 
 
   
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
  ShowMessage('sadf');
end;procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  DBGrid1.OnDblClick := nil;
  ShowMessage('asdfasdfasd');
  DBGrid1.OnDblClick := Form1.DBGrid1DblClick;
end;我这里实现
------------------------上面是人家帮我解答的
我刚试了一下行,不过试多几次又不行~
我的标题按钮事件是这样:procedure TfrmJ_edit.DBGridEh3TitleBtnClick(Sender: TObject; ACol: Integer;
  Column: TColumnEh);
 var sortstring:string; //排序列begin
dbgrideh3.OnDblClick:=nil;
……
……
……
dbgrideh3.OnDblClick:=DBGridEh3.onDblClick;
end;
-----------
双击事件是这样:
procedure TfrmJ_edit.DBGridEh3DblClick(Sender: TObject);
begin
suibutton8.OnClick(sender);
end;
  

解决方案 »

  1.   

    我有两个窗体都是这样做的
    不过有一个窗体 双击标题按钮 会触发 DblClick事件另一个窗体,只要点击了标题按纽,DblClick事件就没了,再点下面的也不能触发了不知道什么原因
      

  2.   

    刚才的那帖是
    http://community.csdn.net/Expert/topic/3139/3139828.xml?temp=.8476068
      

  3.   

    回复人: yleiou(yl) ( ) 信誉:100  2004-7-2 11:16:08  得分: 0  
     
     
       
    procedure TForm1.DBGrid1DblClick(Sender: TObject);
    begin
      ShowMessage('sadf');
    end;procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      DBGrid1.OnDblClick := nil;
      ShowMessage('asdfasdfasd');
      DBGrid1.OnDblClick := Form1.DBGrid1DblClick;
    end;我这里实现
    -------------
    上面的测试之所以可以的原因是 点标题TitleClick的时候
    是ShowMessage('asdfasdfasd');
    焦点转到ShowMessage上来了,所以就没有双击标题栏的概念
    --------
    不信,你把程序改成这样试一下,
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      DBGrid1.OnDblClick := nil;
     // ShowMessage('asdfasdfasd'); //把这一段注释掉,或者执行别的,只要不让焦点从DBGrid1转移开来就行
      DBGrid1.OnDblClick := Form1.DBGrid1DblClick;
    end;
    ---
    这样的话就双击标题按钮,也执行OnDblClick
      

  4.   

    dbgrideh3.OnDblClick:=DBGridEh3.onDblClick; 你看看你的这个和我的 DBGrid1.OnDblClick := Form1.DBGrid1DblClick; 一样吗?差别是什么???  了解这个后 问题自然解决
      

  5.   

    我新建了一个工程去试一下procedure TForm1.DBGridEh1DblClick(Sender: TObject);
    begin
    SHOwmessage('双击了DBGRIDEH');
    end;procedure TForm1.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer;
      Column: TColumnEh);
      var a:integer;
      begin
    dbgrideh1.OnDblClick:=nil;
     a:=a+1;
    dbgrideh1.OnDblClick:=form1.DBGridEh1DblClick;
    end;
    双击标题的时候,还是会执行DblClick
      

  6.   

    不好意思 换个方法解决吧  失误
    private//Form类里添加 
     OldGridWnd : TWndMethod;
     procedure NewGridWnd (var Message : TMessage);
    public
    ——————procedure TForm1.NewGridWnd(var Message : TMessage);
    begin
      if Message.Msg = WM_LBUTTONDBLCLK then
         Message.Msg := 0
      else
        OldGridWnd(Message);
    end;procedure TForm1.DBGrid1DblClick(Sender: TObject);
    begin
      DBGrid1.WindowProc := OldGridWnd;
    end;procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      DBGrid1.WindowProc := NewGridWnd;
      ADODataSet1.Sort := Column.FieldName + ' DESC';
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      OldGridWnd := DBGrid1.WindowProc;
    end;有个失误就是想使用双击时必须添加DBGrid1.WindowProc := OldGridWnd; 你先看看  共同探讨
      

  7.   

    执行了
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      DBGrid1.WindowProc := NewGridWnd;
    end;之后procedure TForm1.DBGrid1DblClick(Sender: TObject);
    begin
      DBGrid1.WindowProc := OldGridWnd;
     SHOwmessage('双击了DBGRID');
    end;
    就没放应了
      

  8.   

    在suibutton8.OnClick(sender);
    中判断如果是标题行双击就不执行代码不行吗?