我在检测发生了哪个鼠标事件时遇到问题。我希望在用户单击鼠标一次时显示说明,并在用户双击时执行其他操作。
我尝试过使用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;
答案 0 :(得分:2)
Delphi网格有OnClick
和OnDblClick
个事件处理程序。
唯一的问题是这些事件处理程序不会将当前选定的单元格作为参数传递 但是通过一些代码,这很容易解决。
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;