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

Создайте на форме 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.


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

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...