如何为DBGRID加上双击事件?(100分)

  • 主题发起人 主题发起人 xianxian
  • 开始时间 开始时间
我是不行,但也想知道答案!
 
dbgrid和onDblClick不就是双击事件吗?
 
xianxian 老兄;
写错了吧。
OnDblClick 事件已经有了,你是不是想要 OnClick 事件啊,这个确实没有,只有 OnCellClick,
OnTitleClick 等。OnClick 事件可以这样添加,我想你应该能从中得到启发怎样填加其他的事件:
TGridEx = class(TDBGrid)
protected
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
published
property OnClick;
end;
...
procedure TGridEx.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited;
Click;
end;
 
sorry, 我问的不清楚,应该是如何为DBGRID的网格部分加双击事件,不包括title和空白部分
等。
 
真不明白你想干什么,不过你可以这样做,下面是 TCustomDBGrid.MouseUp 虚方法,仔细读一读:
procedure TCustomDBGrid.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
var
Cell: TGridCoord;
SaveState: TGridState;
begin
SaveState := FGridState;
inherited MouseUp(Button, Shift, X, Y);
if (SaveState = gsRowSizing) or (SaveState = gsColSizing) or
((InplaceEditor <> nil) and (InplaceEditor.Visible) and
(PtInRect(InplaceEditor.BoundsRect, Point(X,Y)))) then Exit;
Cell := MouseCoord(X,Y); // 注意本行以及以下代码
if (Button = mbLeft) and (Cell.X >= FIndicatorOffset) and (Cell.Y >= 0) then
if Cell.Y < FTitleOffset then
TitleClick(Columns[RawToDataColumn(Cell.X)]) // 发送 OnTitleClick 事件
else
CellClick(Columns[SelectedIndex]); // 发送 OnCellClick 事件
end;

因为 DblClick 也是虚方法,所以你可以参照上面,override DblClick 方法。
首先添加一个事件:
private
FOnCellDblClick: TDBGridClickEvent;
published
property OnCellDblClick: TDBGridClickEvent read FOnCellDblClick write FOnCellDblClick;

procedure DblClick; override;
begin
// 参照 MouseUp 方法判断点击坐标,有选择性发送 OnCellDblClick 消息
end;

Clear ?
From: BaKuBaKu
 
接受答案了.
 
后退
顶部