Delphi XE3:如何在网格上检测CellClick和DblClick

时间:2014-03-28 13:43:15

标签: delphi datagrid

我在检测发生了哪个鼠标事件时遇到问题。我希望在用户单击鼠标一次时显示说明,并在用户双击时执行其他操作。

我尝试过使用TTimer,但这不起作用。双击显示消息并执行“DoSomething”程序。

我使用TDBGrid和OnCellClick以及OnDblClick。

示例代码:

procedure timerTimer(Sender: TObject);
begin
  timer.Enabled := false;
  fFlagaDblClick := false;
  ShowMessage('sample message');
end;

procedure gridListCellClick(Column: TColumn);
begin
    timer.Enabled := true;
    fFlagaDblClick := False;
end;

procedure gridListDblClick(Sender: TObject);
begin
   timer.Enabled := false;
   fFlagaDblClick := True;
   DoSomething;
end;

2 个答案:

答案 0 :(得分:2)

Delphi网格有OnClickOnDblClick个事件处理程序。

enter image description here

唯一的问题是这些事件处理程序不会将当前选定的单元格作为参数传递 但是通过一些代码,这很容易解决。

procedure TForm24.GridDisassemblyDblClick(Sender: TObject);
begin
  ShowMessage('Current row is '+IntToStr(GridDisassembly.Row)
              +'; current column is: '+IntToStr(GridDisassembly.Col));
end;

为了使当前选定的列不是0 xGrid.Options,不得启用goRowSelect

答案 1 :(得分:0)

我有解决方案: 在过程gridListDblClick中,我禁用事件OnCellClik并在gridListEnter中启用。 它正在工作。

procedure timerTimer(Sender: TObject);
begin
  timer.Enabled := false;
  fFlagaDblClick := false;
  ShowMessage('sample message');
end;

procedure gridListCellClick(Column: TColumn);
begin
    timer.Enabled := true;
    fFlagaDblClick := False;
end;

procedure gridListDblClick(Sender: TObject);
begin
   gridList.OnCellClick := nil;
   timer.Enabled := false;
   fFlagaDblClick := True;
   DoSomething;
end;

procedure gridListEnter(Sender: TObject);
begin
  inherited;
  gridList.OnCellClick := gridListCellClick;
end;