2010-08-05 7 views
0

У меня есть событие OnMouseMove, в течение которого я хочу найти значение определенной ячейки (не обязательно под мышью). В основном возникает вопрос: Как получить доступ к данным ячейки, используя координаты x и y, не выбирая его, изменяя фокус и т. Д.?Как определить значение ячейки DbGrid во время события OnMouseMove

ответ

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; 
+0

Вам не нужно, чтобы получить MouseCoord. Событие OnMouseMove уже имеет их. – Linas

+0

@ Linas, значения X и Y возвращают точку (X, Y), вам нужна функция 'MouseCoord' для преобразования значений thees в индексы col и row, проверьте эту ссылку http://docwiki.embarcadero.com/VCL /en/Grids.TCustomGrid.MouseCoord – RRUZ

+0

Спасибо, это сработало. У меня есть ощущение, что должен быть какой-то более простой способ. Я имею в виду, что DbGrid должен хранить эти значения где-то, чтобы их рисовать. Разве мы не можем как-то напрямую обращаться к ним? –