type TDBGridHack = class(TCustomDBGrid); ................... function GrabDbGridCellText(AGrid : TDBGrid; X, Y : Integer) : string; var Pt : TGridCoord; CurrentRec : Integer; HasTitles, HasIndicator : boolean; begin HasTitles := dgTitles in AGrid.Options; HasIndicator := dgIndicator in AGrid.Options; Pt := AGrid.MouseCoord(X, Y); if AGrid.DataSource.DataSet.Active and (Pt.Y >= 0) and not ((Pt.Y = 0) and HasTitles) and not ((Pt.X = 0) and HasIndicator) then begin CurrentRec := TDbGridHack(AGrid).DataLink.ActiveRecord; if HasTitles then Pt.Y := Pt.Y - 1; if HasIndicator then Pt.X := Pt.X - 1; TDbGridHack(AGrid).DataLink.ActiveRecord := Pt.Y; try Result := AGrid.Columns[Pt.X].Field.AsString; finally TDbGridHack(AGrid).DataLink.ActiveRecord := CurrentRec; end; end else Result := ''; end; |
Пример вызова:
procedure TForm1.RxDBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Label1.Caption:=GrabDbGridCellText(RxDBGrid1,x,y); end; |
Проверено только на Delphi 5. [001947]