![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
отображение Hint у DBGrid [D7, MS Access]
Lex_! © (2005-05-11 13:21:00)Попытка номер два.....
Имееться DBGrid с одним видимым полем (полей всего три)
Требуется: при наведении мышки на DBGrid на конкретное значение в столбце вывести хинт где указано то что находиться в другом поле (в неотображенном)
тоесть: есть запись содержащая -
текстполя1 текстполя2(не отображается
при наведении на текстполя1 в хинте показать надпись "текстполя2"
sniknik (2005-05-11 16:29:00) [21]я вообще думал свой буфер сделать (если бы пришлось решать подобное)
ну типа
TMyDBGrid = class(TDBGrid)
Hints: array of string;
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
end;
Hints на onResize меняем размер, в DrawCell сощраняем нужную запись в буфер, ARow - номер строки (= позиции в буфере) есть, в событии копируем то что нам нужно(1 или несколько полей для нинта из текущего DataLink-а), вызываем родительскую перерисовку и все.
по onMouseMove смотрим позицию в гриде (как выше показывал) и если изменилась показываем hint.
в общем очень просто. так думаю ;о)) у тебя сложнее?
sniknik (2005-05-11 16:18:00) [22]значит пропустил... вышли тогда если не сложно.
Johnmen (2005-05-11 16:12:00) [23]>значит в стандартном всетаки нету, раз для него сырцы ктото для этого писал...
Да есть же. Просто в сырцах пример использования со смещением ActiveRecord'а в DataLink'е.
sniknik (2005-05-11 15:31:00) [24]> Есть сырцы со стандартным... Но очень сырые, но основной принцип поясняющие.
значит в стандартном всетаки нету, раз для него сырцы ктото для этого писал...
не, спасибо конечно, но я худо бедно способен и сам это реализовать. ;о)) просто думал чтото пропустил, есть буфер а я его не вижу...
Johnmen (2005-05-11 14:48:00) [25]Есть сырцы со стандартным... Но очень сырые, но основной принцип поясняющие.
sniknik (2005-05-11 14:44:00) [26]> Может кто разовьет тему?
нафига? зачем чегото там высчитывать, что можно элементарно получить в событии на отрисовке поля (например) без всяки вычислений прямым копированием.
sniknik (2005-05-11 14:41:00) [27]> А в буфере есть поля записи которые не определены вообще в гриде?... у меня там написано одно поле и все..
ну так делай этот буфер/массив сам, и сохраняй в него то что тебе нужно.
кстати не встречал чтото такого буфера, это только TDBGridEh есть или в стандартном гриде тоже? (нестандартные компонентами у нас запрещено использовать, что надо пиши сам, поэтому EhLib-а не имею)
КиТаЯц (2005-05-11 14:38:00) [28]Ну и мне как-то без надобности... Дай-ка тоже ляпну не подумавши... ;)
Имеем Х и У без учета скролинга. Надо с учетом скролинга. Если я не ошибаюсь то текущая запись ДатаСета в гриде всегда на экране... Далее надо получить что-то вроде кординат текущей записи и потом:
Х (У) искомое := Х (У) записи под мышью/высоту строк Грида - (У) записи текущей...
Может кто разовьет тему?
sniknik (2005-05-11 14:36:00) [29]> это номера записей отображаемых, а не действительных.
истинно так, с гриде вообше всего столько строк сколько видно(иногда на одну больше, это я чегото проверял, сталкивался) а не по числу записей в рекордсете (как многие почемуто думают). поэтому и будет первая запись в гриде показывать 1(/0) а не 148-ю от начала рекордсета. но соответствие проставить всетаки можно, начало откуда грид рисует в самом гриде и запоминается.
было бы зачем. ;о) (както незаметно и давно уже отошол от понятий какие в striggrid трактуются, и както странно так стало, то, что тогда важным считал сейчас совсем не нужно...)
Lex_! (2005-05-11 14:33:00) [30]
> Johnmen © (11.05.05 14:17) [5]
> >Надо в общем по положению курсора в гриде перейти на запись
>
>
> Не надо. Есть буфер отображаемых записей. Из него и тянуть...
> Идеальный пример кода, как это сделать, см. в исходниках
> TDBGridEh из библиотеки EhLib.
А в буфере есть поля записи которые не определены вообще в гриде?... у меня там написано одно поле и все..
Virgo_Style (2005-05-11 14:22:00) [31]sniknik © (11.05.05 13:59) [3]
Как бы не наврать... Но по-моему, проверить все же надо было ;-)
Насколько я помню свои неудачные попытки, X и Y получаются без учета скроллинга, то есть, это номера записей отображаемых, а не действительных.
Впрочем, мне это тоже давно без надобности :o)
sniknik (2005-05-11 14:17:00) [32]> Это место подробнее можно?.
вообщето это я не подумав ляпнул. ;о)) DataLink.Fields это скорее всего поля в текущей записи а не номера записей...
тебе придется скорее всего сохранять хинты для каждой отображаемой в гриде записи (менять в списке можно по отрисовке там все одно на каждую запись свое событие). т.е. сделать масив записей по числу строк в гриде... и т.д. пробуй.
Johnmen (2005-05-11 14:17:00) [33]>Надо в общем по положению курсора в гриде перейти на запись
Не надо. Есть буфер отображаемых записей. Из него и тянуть...
Идеальный пример кода, как это сделать, см. в исходниках TDBGridEh из библиотеки EhLib.
Lex_! (2005-05-11 14:10:00) [34]
> А что именно интересует? Показ хинта или показ др.поля?
Показ в хинте другого поля.
Надо в общем по положению курсора в гриде перейти на запись в таблице которая на данный момент отображается в гриде, и показать одно из полей записи в хинте
> координаты в гриде нашли, в датасете y должен соответствовать
> значению поля DataLink.Fields[y] (опять вроде бы ;о)), сам
> этого не делал...). все, вот и все соответствие (надо только
> проверить ;о), мне это было без надобности).
Это место подробнее можно?.
тоесть как перейти на запись в датасете (лучше в таблице) на ту на которой расположена мыш в данный момент
sniknik (2005-05-11 13:59:00) [35]Virgo_Style © (11.05.05 13:46) [2]
серьезно?
это же очень просто
var
Point: TPoint;
GridCoord: TGridCoord;
begin
Point:= DBGrid1.ScreenToClient(Mouse.CursorPos);
GridCoord:= DBGrid1.MouseCoord(Point.X, Point.Y);
GridCoord.X - //это колонка
GridCoord.Y - //это строка (вроде бы ;о)), проверь)
координаты в гриде нашли, в датасете y должен соответствовать значению поля DataLink.Fields[y] (опять вроде бы ;о)), сам этого не делал...). все, вот и все соответствие (надо только проверить ;о), мне это было без надобности).
Virgo_Style (2005-05-11 13:46:00) [36]Кажется, проблема тут в соответствии "координата мыши - запись в DataSet". Я в свое время решения не нашел...
Johnmen (2005-05-11 13:36:00) [37]А что именно интересует? Показ хинта или показ др.поля?