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

Материал из DRKB

Как вывести 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.


Source: http://delphiworld.narod.ru/
ID: 01291
ID: 03077