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

 

Code:

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.

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить