1

I'm a newbie when it comes to creating new events to components... and I noticed that TDBGrid has a OnCellClick, but sadly it doesnt have an OnCellDblClick event and it bothers me a lot the fact that if I double click anywhere in my grid the selected row will be used...

So, I wanted to create the OnCellDblClick event, but as I've said earlier, I don't know how to do it.

I noticed that a lot of people want this same event, but I can't find the answerd to it.

Is it possible to know if the double click was on a record, if it was, then do all the stuff I want with it?

  • 1
    You can ask with the `GetMessagePos` function for the position when the `OnDblClick` triggers and from that (after proper coordinate calculation) determine double clicked cell by the `MouseCoord` method. Or, you might e.g. override `MouseDown` method and handle double click in the way DB grid does. – Victoria Jan 23 '18 at 22:10

1 Answers1

1

Maybe you can use the DblClick together with the MouseDown event of the DBGrid
But this will only work if the Options.dgRowSelect is false

for example

type
  TForm1 = class(TForm)
  private
    FEmptySpace : boolean;
 ...

procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // in my test I only get here when clicked on empty part of the dbgrid
  FEmptySpace := TRUE;
end;

procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
  if FEmptySpace then
    showmessage('clicked in the middle of nowhere...')
  else
    showmessage(DBGrid1.Fields[DBGrid1.SelectedField.Index].AsString);

  FEmptySpace := FALSE;
end;

I have not tested this in all situations

In my test

  • Options.Editing := false
  • Options.dgRowSelect := false
  • Readonly := true
GuidoG
  • 11,359
  • 6
  • 44
  • 79