Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как вывести Hint для ячейки TDBGrid?

01.01.2007

Создайте на форме DataSource1, Table1, DataSource2, Table2, DBGrid1. Table1 и Table2 свяжите со своей базой данных. DataSource1 и DataSource2 свяжите соответственно с Table1 и Table2. DBGrid1 свяжите с DataSource1 Table2 и DataSource2 нужны для доступа к какой-нибудь ячейке. Другой способ без их использования: при отрисовке значений ячеек (соответствующее событие), необходимо запомнить значения всех ячеек, находящихся на экране и производить выбор среди них.

unit Unit1;
 
interface
 
uses
 
Windows, Messages, SysUtils, Classes, Graphics, Controls,
 
Forms, Dialogs, Grids, DBGrids, Db, DBTables;
 
type
  TForm1
= class(TForm)
    DataSource1
: TDataSource;
    Table1
: TTable;
    DBGrid1
: TDBGrid;
    Table2
: TTable;
    DataSource2
: TDataSource;
    procedure
FormCreate(Sender: TObject);
 
private
   
{ Private declarations }
    procedure
AppMess(var Msg: TMsg; var Handled: Boolean);
 
public
   
{ Public declarations }
end;
 
var
  Form1
: TForm1;
 
implementation
{$R *.DFM}
 
procedure TForm1
.AppMess(var Msg: TMsg; var Handled: Boolean);
var
  X
, Y: integer;
  gpt
: TGridCoord;
  s
: string;
  w
, len: integer;
begin
 
if Msg.message=WM_MOUSEMOVE then
 
begin
   
if Msg.hwnd=DBGrid1.Handle then
   
begin
      x
:=LoWord(Msg.lParam);
      y
:=HiWord(Msg.lParam);
      gpt
:=DBGrid1.MouseCoord(x,y);
     
{получить строку и солбец, в которых находится курсор}
     
if (gpt.x>0) and (gpt.y>0) then
     
begin
        DataSource2
.DataSet.First;
        DataSource2
.DataSet.MoveBy(gpt.y-1);
        s
:=Table2.Fields[gpt.x-1].asString;
        w
:=DBGrid1.Columns[gpt.x-1].Width;
       
{получить ширину столбца}
        len
:=DBGrid1.Canvas.TextWidth(s);
       
{получить длину строки в пикселах}
       
if len > w then
          DBGrid1
.Hint:=s;
       
else
          DBGrid1
.Hint:='';
     
end;
   
end;
 
end;
end;
 
procedure TForm1
.FormCreate(Sender: TObject);
begin
  DBGrid1
.ShowHint := True;
 
Application.OnMessage := AppMess;
end;
 
end.

Взято с https://delphiworld.narod.ru