DBGrid...
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 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
- Контактная информация:
У DBGrid свойства и методы работающие с координатами ячеек (напр. Row, Col, GetCellRect) кажется не вынесены в область Public. Т.е. чтобы с ними работать, надо сделать фейковый класс от TDBGrid (или от любого его предка до TCustomGrid включительно) и разыменовать данный грид с использованием этого класса.top и left
Примерно так:
Код: Выделить всё
Type
TDBGrid1 = class(TDBGrid);
...
TDBGrid1(DBGrid1).GetCellRect.....;
Однако, Top и Left ячейки в DBGrid мало интересны. Так как они работают только с видимой на экране чатью талицы, и Row (номер текущей строки) не равен номеру текущей строки в DataSet.
-
- Сообщения: 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
- Откуда: СПБ
- Контактная информация:
я типа долго писАл 


-
- Сообщения: 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.
Надо только быть уверенным, что в обоих одинаковое количество записей.
Table1.RecNo:=Table2.RecNo;
(Причем это надо делать не в событиях DBGrid, а в событии AfterScroll у DataSet-а.)
При этом правда возможно расхождение в самих гридах. Т.е. если они расположены горизонтально, то текущая строка в одном может оказаться выше или ниже текущей строки в другом. Чтобы еще и это устранить, то надо достучаться до свойства
TopLeft у одного грида (G1), а в другом (G2) сделать G2.TopRow:=G1.TopLeft.Y;
Свойства TopLeft и TopRow унаследованы от TCustomGrid, т.е. достучаться до них можно создавая фейковый класс TCustomGrid.
-
- Сообщения: 117
- Зарегистрирован: 10 ноя 2005, 02:00
У меня как раз и есть такая ситуация: 2 DBGrida рядом и записей в них одинаковое кол-во и проблема как раз в том что текущая строка в одном не совпадает с текущей строкой в другом. Можно поподробнее как достучаться до их свойств.