Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2010, 03:28   #1
victorixx
Пользователь
 
Регистрация: 29.01.2010
Сообщений: 21
По умолчанию hint и DBGrid

Здравствуйте! Встала передо мной одна задачка...

Дано:
ДБГрид, связанный с базой данных.
Особенностями базы данных являются длинные значения полей, то есть значение не всегда (а точнее, почти всегда не) помещается в ячейку.
Необходимо:
При наведении мышки на ячейку, в которой значение отображено не полностью, выводить HINT с полным значением поля.
При этом, чтобы активный Row ДБГрида не менялся.

Видел в данном форуме один похожий случай. Там был выложен код, но в нем использовались такие свойства и методы как ActiveRecord и DataLink. У меня в ДБГриде таких свойств и методов нет.

Есть мысли? Заранее спасибо.
victorixx вне форума Ответить с цитированием
Старый 29.01.2010, 06:24   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
Здравствуйте! Встала передо мной одна задачка...

Дано:
ДБГрид, связанный с базой данных.
Особенностями базы данных являются длинные значения полей, то есть значение не всегда (а точнее, почти всегда не) помещается в ячейку.
Необходимо:
... установить набор компонентов EhLib и пользоваться DBGridEh, или как вывести подсказку для ячейки DBGrid
Советую EhLib !
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 29.01.2010, 08:51   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Могу предложить два способа:
1) onMouseMove для стандартного DBGrid
Код:
procedure TForm1.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;
2) К черту DBGrid. Делай отображение в StringGrid - там можно навернуть гораздо лучше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.02.2010, 22:45   #4
victorixx
Пользователь
 
Регистрация: 29.01.2010
Сообщений: 21
По умолчанию

Спасибо, Stilet. Помогло.
Только вот, интересно, можно как-нить вычислить координаты начала соответствующей ячейки, ну, чтобы хинт появлялся не в позиции мыши, а с начала ячейки? И мож кто-нить знает, как можно программно узнать, что текст выходит за пределы ячейки, то есть чтобы хинт появлялся только в случае, если весь текст не видать?

Цитата:
Сообщение от Stilet Посмотреть сообщение
К черту DBGrid. Делай отображение в StringGrid - там можно навернуть гораздо лучше.
К этому я еще не готов - слишком от многих опций DBGrid придется отказаться.

Последний раз редактировалось Stilet; 10.02.2010 в 08:11.
victorixx вне форума Ответить с цитированием
Старый 10.02.2010, 03:16   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Я делал так (для листбокса. Вам только чуток переделать):
Код:
procedure Tfmain.LBFoundMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
idx : Longint;
xsh,ysh: integer;
rects: TRect;
begin
idx:=LBFound.ItemAtPos(Point(x,y),True);
if (idx<0) or (idx=oldidx) then
Exit;
StaticHint.Visible:=False;
Application.ProcessMessages;
oldidx:=idx;
StaticHint.Caption:='';
if Canvas.TextWidth(LBFound.Items.Strings[idx])>LBFound.Width-4 then
begin
rects:=LBFound.ItemRect(idx);
xsh:=rects.Left;
ysh:=rects.Top;
StaticHint.Caption:=LBFound.Items.Strings[idx]+' ';
StaticHint.Left:=GBFinder.Left+LBFound.Left+xsh+2;
StaticHint.Top:=GBFinder.Top+LBFound.Top+ysh;//Y;
StaticHint.Visible:=True;
Application.ProcessMessages;
end;
end;
GBFinder - это групбокс, на котором находится листбокс LBFound.
StaticHint - это и есть StaticHint...
oldidx - предыдущая координата, где была показана длинная подсказка.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Hint на Edit mutabor Общие вопросы Delphi 17 28.08.2009 20:32
CTreeCtrl и hint iiunbreakableii Общие вопросы C/C++ 0 17.07.2009 14:59
Многострочный HINT Alex Cones Общие вопросы Delphi 8 27.04.2009 18:08
baloon hint Д'якон Win Api 2 08.02.2009 00:22
Hint в ComboBox Starscream Общие вопросы Delphi 3 27.02.2008 01:15