DBGrid...

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

При использовании DBGrid активная ячейка выделяется другим цветом,но при потере DBGridом фокуса выделенные ячейки теряются. Как сделать,чтобы выделенные ячейки оставались выделенными при потере фокуса. И еще как определить top и left выделенной ячейки.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

DBGrid.Options там dgAlwaysShowSelection := true
Изображение
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

top и left
У DBGrid свойства и методы работающие с координатами ячеек (напр. Row, Col, GetCellRect) кажется не вынесены в область Public. Т.е. чтобы с ними работать, надо сделать фейковый класс от TDBGrid (или от любого его предка до TCustomGrid включительно) и разыменовать данный грид с использованием этого класса.

Примерно так:

Код: Выделить всё

Type
  TDBGrid1 = class(TDBGrid);
...

TDBGrid1(DBGrid1).GetCellRect.....;


Однако, Top и Left ячейки в DBGrid мало интересны. Так как они работают только с видимой на экране чатью талицы, и Row (номер текущей строки) не равен номеру текущей строки в DataSet.
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Да мне как раз и нужно работать только с видимой на экране частью DBGrid.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

И еще как определить top и left выделенной ячейки
У меня глюк? Этого вопроса изначально не было? или я опять не дочитал до конца...
кстати, зачем они нужны? может мы найдём обходной путь решения ;)
Изображение
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

может мы найдём обходной путь решения
Зачем, когда есть прямой - GetCellRect!
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

я типа долго писАл ;)
Изображение
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Как сделать так, чтобы прокрутка в одном DBGrid соответсвовала прокрутке в другом.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Можно синхронизировать текущую позицию в двух DataSet-ах.
Надо только быть уверенным, что в обоих одинаковое количество записей.

Table1.RecNo:=Table2.RecNo;

(Причем это надо делать не в событиях DBGrid, а в событии AfterScroll у DataSet-а.)

При этом правда возможно расхождение в самих гридах. Т.е. если они расположены горизонтально, то текущая строка в одном может оказаться выше или ниже текущей строки в другом. Чтобы еще и это устранить, то надо достучаться до свойства

TopLeft у одного грида (G1), а в другом (G2) сделать G2.TopRow:=G1.TopLeft.Y;

Свойства TopLeft и TopRow унаследованы от TCustomGrid, т.е. достучаться до них можно создавая фейковый класс TCustomGrid.
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

У меня как раз и есть такая ситуация: 2 DBGrida рядом и записей в них одинаковое кол-во и проблема как раз в том что текущая строка в одном не совпадает с текущей строкой в другом. Можно поподробнее как достучаться до их свойств.
Ответить