Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.12.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1284811932
Arkadi4
2010-09-18 16:12
2010.12.12
hint со значением ячеек gbrid


2-1284753474
mfender
2010-09-17 23:57
2010.12.12
Странности с конструктором


15-1283137842
Ewans
2010-08-30 07:10
2010.12.12
Создание полноценного чата на Flash


2-1284885575
Telebot
2010-09-19 12:39
2010.12.12
TWebBrowser грузит сильно ЦП (более 50%) и ест много памяти


4-1241873558
pushkin42
2009-05-09 16:52
2010.12.12
Получить список файлов драйвера для устройства





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский