Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Hint для любой ячейки TDBGrid


serg! ©   (2004-10-11 12:09:00) 

Добрый день!

Как выводить Hint для любой ячейки компонента TDBGrid? При этом в свойстве Options флаг RowSelect установлен в True.


Vlad   (2004-10-11 13:54:00) [1]

Выдрал с какого-то сайта:

Q: Очень хочется чтобы при движении мышкойпо столбцам DBGrid'а на тех ячейках, в которых длина строки данных длинеечем ширина самой ячейки, вылезал бы hint с необрезанной строкой.
unit DBGridEx;
{ ==================================================== }

{ ==================================================== }
interface
{ ==================================================== }
uses DBGrids, Grids, Controls, Classes, Forms;

type
   TDBGridEx = class( TDBGrid )

     private
       OldGridCoord : TGridCoord;
     public
       Application : TApplication;

       function MouseCoord(X,Y: Integer): TGridCoord;
       function GetEditText(ACol,ARow: Longint): string;override;
       procedure MouseMove(Shift:TShiftState; X, Y: Integer);override;

     published
       property OnMouseMove;
       property OnMouseDown;
       property OnMouseUp;
   end;

procedure Register;

{ ==================================================== }
implementation
{ ==================================================== }

function TDBGridEx.MouseCoord(X, Y: Integer): TGridCoord;
begin
 Result := inherited MouseCoord(X, Y);
end;

function TDBGridEx.GetEditText(ACol, ARow: Longint): string;
begin
 if (ACol > 0) and (ACol < ColCount) and (ARow > 0) and(ARow < RowCount)
then
   Result := inherited GetEditText(ACol, ARow)
 else
   Result := '';
end;

procedure TDBGridEx.MouseMove(Shift: TShiftState; X, Y: Integer);
Var
C:TGridCoord;
OldActive:Integer;
Value:String;
begin
 inherited MouseMove (Shift, X, Y);

  C:=MouseCoord(X,Y);
  if (OldGridCoord.X = C.X) and (OldGridCoord.Y = C.Y)then Exit;

  OldGridCoord := C;

  Value := '';
  OldActive := DataLink.ActiveRecord;
  Try
   if C.Y > 0 then
     DataLink.ActiveRecord := C.Y-1
   else
     DataLink.ActiveRecord := C.Y;
   {Value := GetFieldValue(C.X);}

   Value := GetEditText(C.X,C.Y);
  Finally
   DataLink.ActiveRecord := OldActive;
  End;

  if Application <> nil then
    Application.CancelHint;

  Hint:=Value;

end;

{ ==================================================== }

procedure Register;
begin
 RegisterComponents('Data Controls',[TDBGridEx]);
end;

{ ==================================================== }
end.


begin...end   (2004-10-11 13:17:00) [2]


> А то только для StringGrid'а нашел

Неужто там такая большая разница в этом?


Skeptik   (2004-10-11 13:08:00) [3]

> serg!
могу поделиться компонентом, скажи куда.


serg!   (2004-10-11 12:46:00) [4]

А нельзя ли поподробнее? А то только для StringGrid'а нашел


KSergey   (2004-10-11 12:13:00) [5]

На "королевстве" есть статьи на сей счет


Наверх

Титульная страница Поиск, карта сайта Написать письмо