如何在TDbGrid中获取光标下的文本

Maw*_*awg 1 delphi mouseover tdbgrid

屏幕宽度不足以显示一些文本字段.我不知道如何自动包装它们,我怀疑它可以很容易地完成.

所以,我以为我会做类似的事情

procedure TForm1.FormMouseMove(Sender: TObject;
    Shift: TShiftState; X,Y: Integer);

   var column, row : Integer;
begin
  myDbGrid.MouseToCell(X, Y, column, row);
  myDbGrid.Hinst := myDbGrid.Cells(column, row); // <==== ooops
end;
Run Code Online (Sandbox Code Playgroud)

或者,也许这样做OnShowHint并获得鼠标坐标并将它们转换为列和行(更高效)

但是,当然,TDbGrid没有Cells.知道如何在用户将鼠标移动到网格的"单元格"上时如何设置控件的提示?

小智 8

使用此代码:

type
 THackGrid = class(TDBGrid);

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Cell: TGridCoord;
  ActRec: Integer;
begin
  Cell := DBGrid1.MouseCoord(X, Y);
  if dgIndicator in DBGrid1.Options then
    Dec(Cell.X);
  if dgTitles in DBGrid1.Options then
    Dec(Cell.Y);
  if THackGrid(DBGrid1).DataLink.Active and (Cell.X >= 0) and
    (Cell.Y >= 0) then
  begin
    ActRec := THackGrid(DBGrid1).DataLink.ActiveRecord;
    try
      THackGrid(DBGrid1).DataLink.ActiveRecord := Cell.Y;
      Caption := DBGrid1.Columns[Cell.X].Field.AsString;
    finally
      THackGrid(DBGrid1).DataLink.ActiveRecord := ActRec;
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)