Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.12;
Скачать: CL | DM;

Вниз

hint со значением ячеек gbrid   Найти похожие ветки 

 
Arkadi4   (2010-09-18 16:12) [0]

Имеется dbgrid. Длина текста в некоторых ячейках превышает ширину этих ячеек. Как сделать так, чтобы при наведении курсора на ячейку появлялся полный текст, находящийся в этой ячейке?

пробовал такой вариант:

procedure TForm3.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var mc:TGridCoord;
begin
mc:=DBGrid1.MouseCoord(x,y);
DBGrid1.Hint:=DBGrid1.DataSource.DataSet.Fields[mc.x-1].AsString;
DBGrid1.ShowHint:=true;
Application.ActivateHint(Mouse.CursorPos);
end;


выдало ошибку "List index out of bounds (-2)"

delphi 7, 2007
windows 7


 
Anatoly Podgoretsky ©   (2010-09-18 17:15) [1]

> Arkadi4  (18.09.2010 16:12:00)  [0]

А значение mc.x имеет допустимое значение? Или ты его от булды взял?


 
Arkadi4   (2010-09-20 20:27) [2]


> А значение mc.x имеет допустимое значение? Или ты его от
> булды взял?
>


не понял вопроса. в смысле?


 
Вуйко Францишко   (2010-09-21 04:41) [3]

>> Arkadi4   (18.09.10 16:12) DBGrid1.Hint:=DBGrid1.DataSource.DataSet.Fields[mc.x-1].AsString;

DBGrid1.MouseCoord(x,y) возвращает индексы ("координаты") ячейки в гриде по X и по Y. Значение в X никакого отношения к индексу поля в наборе данных не имеет. Y вообще не применимо к набору данных.

Для получения поля через индекс Х, следует обратиться к соответствующей колонке:
var
 F: TField;

F := DBGrid1.Columns[mc.x-1].Field;
if (F <> nil) then
 DBGrid1.Hint := F.AsString
else
 DBGrid1.Hint := "";


Но перед тем, как это делать, следует разобраться с Y.

А с Y ситуация сложнее. Дело в том, что набор данных в Delphi работает как курсор. "В лоб", путем перемещения указателя набора данных на требуемую запись, проблема не решается. Как вариант, можно забраться в protected свойства TDBGrid:

type
 TMyDBGrid = class(TDBGrid);

И потом, установив TMyDBGrid(DBGrid1).DataLink.ActiveRecord := <нужное значение в пределах отображаемых записей>, получить значение требуемого поля. И не забыть потом вернуть ActiveRecord в прежнее значение.

"Нужное значение в пределах отображаемых записей", будьте добры, посчитайте сами на основании текущего TMyDBGrid(DBGrid1).Row и нужного Y.


 
Anatoly Podgoretsky ©   (2010-09-21 09:29) [4]


> не понял вопроса. в смысле?

Значит, что индекс должен быть не больше количества элементов в списке - 1, и не меньше 0


 
Arkadi4   (2010-09-21 15:28) [5]

Спасибо всем откликнувшимся! Проблема решена.

procedure TForm3.AppMess(var Msg: TMsg; var Handled: Boolean);
var
 X, Y: integer;
 mc: TGridCoord;
 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);
     mc:=DBGrid1.MouseCoord(x,y);
     if (mc.x>0) and (mc.y>0) then
     begin
       DataModule2.DataSource1.DataSet.First;
       DataModule2.DataSource1.DataSet.MoveBy(mc.y-1);
       s:=DataModule2.AdoQuery1.Fields[mc.x-1].asString;
       w:=DBGrid1.Columns[ mc.x-1].Width;
       len:=DBGrid1.Canvas.TextWidth(s);
       if len > w then
         DBGrid1.Hint:=s
       else
         DBGrid1.Hint:="";
     end;
   end;
 end;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  DBGrid1.ShowHint := True;
  Application.OnMessage := AppMess;
end;


 
Вуйко Францишко   (2010-09-21 19:47) [6]

Проблема не решена. Более того, появились новые проблемы.


 
Leonid Troyanovsky ©   (2010-09-22 12:59) [7]


> Arkadi4   (21.09.10 15:28) [5]

http://delphimaster.net/view/2-1275568305

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2010.12.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
15-1283442883
ProgRAMmer Dimonych
2010-09-02 19:54
2010.12.12
Хардлинки на DVD


15-1282711293
12
2010-08-25 08:41
2010.12.12
Идиотские рекламы


3-1249327055
DmitrichJ
2009-08-03 23:17
2010.12.12
Организация поиска по документам в БД


6-1230923741
Deltas
2009-01-02 22:15
2010.12.12
Внутренний IP


2-1284816023
KuJIoBaT
2010-09-18 17:20
2010.12.12
ValueListEditor