如何让DBGrid的数据区响应OnMuseDown事件 ( 积分: 50 )

  • 主题发起人 主题发起人 hyxic
  • 开始时间 开始时间
H

hyxic

Unregistered / Unconfirmed
GUEST, unregistred user!
DBGrid在有数据的时候,点击是指响应OnClick事件,而不响应OnMuseDown,我想在点击数据的时候触发OnMuseDown事件,应该怎么做!谢谢了,只有这么多分了,都送上了!
 
DBGrid 本身就有 OnMuseDown, 没有 OnClick 啊。
 
搞错了,是OnCellClick不是OnClick
 
点击DBGrid时先相应OnMuseDown,鼠标左键放开时才响应OnCellClick。
 
有数据时点击数据区不响应OnMouseDown事件,只有点击空白处才响应,我现在是想点击数据区也相应OnMouseDown事件,应该怎么做,急急急急!
 
估计是 DBGrid 的 bug,换成 DBGridEh 即可。
 
发送消息:sendmessage(DBGrid.handle,WM_MBUTTONDOWN,0,0)
 
to moyiying:请问如何发送,在什么情况下发送?谢谢!
 
拦截WM_LBUTTONDOWN

private
SaveDBGridWndProc: TWnMethod;
procedure NewDBGridWndProc(var Message: TMessage);


procedure TForm1.FormCreate(Sender: TObject);
begin
SaveDBGridWndProc := DBGrid1.WindowProc; //保存原来的消息处理过程
DBGrid1.WindowProc := NewDBGridWndProc; //设定新的消息处理过程
end;

procedure TForm1.NewDBGridWndProc(var Message: TMessage);
begin
if Message.Msg = WM_LBUTTONDOWN then //如果是左键按下,处理
begin
end;
SaveDBGridWndProc(Message); //调用原来的消息处理过程处理消息
end;
 
感谢ANiDelphi,问题还没彻底解决(无论在什么地方按下都会相应,我只要求在DBGrid里有效)
 
oneditbutton事件下寫吧
if Uppercase(TDBGrid(Sender).SelectedField.FieldName)='P1' then
GetP1data
 
只有DBGrid时会响应的,是不是在处理中打开了新窗口
改成下面就不会了。
procedure TForm1.NewDBGridWndProc(var Message: TMessage);
begin
SaveDBGridWndProc(Message); //调用原来的消息处理过程处理消息
if Message.Msg = WM_LBUTTONDOWN then //如果是左键按下,处理
begin
ShowMessage(Format('鼠标在%d.%d按下', [Message.LParamLo, Message.LParamHi]));
end;
end;
 
非常感谢ANiDelphi高手终于出现了,就是你,给你散分了!!!谢谢!
 
后退
顶部