Определить, какая ячейка была нажата в TDBGrid, когда для dgRowSelect установлено значение True?

В Delphi 2010 есть ли способ определить, какая ячейка была нажата, когда для dgRowSelect установлено значение True?

Обычно я бы использовал обработчик событий OnCellClick(Column: TColumn), но он не работает должным образом. С dgRowSelect = False этой процедуре передается столбец, по которому щелкнули, но с dgRowSelect = True этой процедуре передается первый столбец, независимо от того, какой столбец был нажат.

Я не могу понять, где находится код, который вызывает передачу OnCellClick в параметре TColumn, если бы я мог найти, что я мог бы решить, как исправить это странное поведение.


person srayner    schedule 18.12.2012    source источник


Ответы (1)


Вы можете использовать координаты мыши, чтобы получить столбец. После вызова TDBGrid.MouseCoord возвращаемый TGridCoord.X содержит номер столбца, а Y содержит строку (которая, конечно, у вас уже есть):

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
  Pt: TPoint;
  Coord: TGridCoord;
  ClickCol: Integer;
begin
  Pt := DBGrid1.ScreenToClient(Mouse.CursorPos);
  Coord := DBGrid1.MouseCoord(Pt.X, Pt.Y);
  ClickCol := Coord.X;
  ShowMessage('You clicked column ' + IntToStr(ClickCol));
end;

Дополнительные сведения о TGridCoord см. в документации.

Протестировано с использованием того же приложения, которое использовалось для моего ответа на ваш предыдущий вопрос.

person Ken White    schedule 18.12.2012
comment
Идеальный ответ. Дает мне именно то, что мне нужно. Если это поможет кому-то еще, я использовал это, чтобы дать мне имя поля базы данных; DBGrid1.Columns[ClickCol - 1].Field.FieldName - person srayner; 19.12.2012
comment
+1 Этот ответ мне тоже помог, но это я или что-то не так с именами свойств? Обычно координаты мыши понимаются как относительное положение экрана. - person Laureano Bonilla; 27.10.2015
comment
ScreenToClient может сделать преобразование, я прав? - person Laureano Bonilla; 27.10.2015
comment
@LaureanoBonilla: ScreenToClient преобразуется в координаты сетки, которые передаются в MouseCoord для преобразования в положение строки/столбца. - person Ken White; 27.10.2015