У меня есть событие OnMouseMove, в течение которого я хочу найти значение определенной ячейки (не обязательно под мышью). В основном возникает вопрос: Как получить доступ к данным ячейки, используя координаты x и y, не выбирая его, изменяя фокус и т. Д.?Как определить значение ячейки DbGrid во время события OnMouseMove
0
A
ответ
2
Тофик, вы можете использовать MouseCoord
процедуры, чтобы получить текущую строку и седловины, но показать значение поз [Col,Row]
необходимо установить DataLink.ActiveRecord
свойства в значение строки и создать новый класс потомок, чтобы получить доступ к защищенному собственности ,
проверить этот код
type
THackGrid = class(TCustomDBGrid); //Create a new class to access the protected properties
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Cell : TGridCoord;
Row,Col : integer;
OrigActiveRecord : integer;
begin
inherited;
Cell:=DBGrid1.MouseCoord(X,Y);
Col:= Cell.X;
Row:= Cell.Y;
if dgTitles in DBGrid1.Options then Dec(Row); //if the titles are shown then adjust Row index (-1);
if dgIndicator in DBGrid1.Options then Dec(Col); //if the indicator is shown then adjust the Column index (-1);
if THackGrid(DBGrid1).DataLink.Active and (Row>=0) and (Col>=0) then
begin
OrigActiveRecord:=THackGrid(DBGrid1).DataLink.ActiveRecord; //save the original index
try
THackGrid(DBGrid1).DataLink.ActiveRecord:= Row;
Label1.Caption:=DBGrid1.Columns[Col].Field.AsString; //show the current value in a tlabel
finally
THackGrid(DBGrid1).DataLink.ActiveRecord:= OrigActiveRecord; //restore the index
end;
end;
end;
Вам не нужно, чтобы получить MouseCoord. Событие OnMouseMove уже имеет их. – Linas
@ Linas, значения X и Y возвращают точку (X, Y), вам нужна функция 'MouseCoord' для преобразования значений thees в индексы col и row, проверьте эту ссылку http://docwiki.embarcadero.com/VCL /en/Grids.TCustomGrid.MouseCoord – RRUZ
Спасибо, это сработало. У меня есть ощущение, что должен быть какой-то более простой способ. Я имею в виду, что DbGrid должен хранить эти значения где-то, чтобы их рисовать. Разве мы не можем как-то напрямую обращаться к ним? –