Страница 1 из 1
DBGrid...
Добавлено: 07 дек 2005, 02:21
Viktor Zull
При использовании DBGrid активная ячейка выделяется другим цветом,но при потере DBGridом фокуса выделенные ячейки теряются. Как сделать,чтобы выделенные ячейки оставались выделенными при потере фокуса. И еще как определить top и left выделенной ячейки.
Добавлено: 07 дек 2005, 15:24
Игорь Акопян
DBGrid.Options там dgAlwaysShowSelection := true
Добавлено: 08 дек 2005, 10:22
Naeel Maqsudov
top и left
У DBGrid свойства и методы работающие с координатами ячеек (напр. Row, Col, GetCellRect) кажется не вынесены в область Public. Т.е. чтобы с ними работать, надо сделать фейковый класс от TDBGrid (или от любого его предка до TCustomGrid включительно) и разыменовать данный грид с использованием этого класса.
Примерно так:
Код: Выделить всё
Type
TDBGrid1 = class(TDBGrid);
...
TDBGrid1(DBGrid1).GetCellRect.....;
Однако, Top и Left ячейки в DBGrid мало интересны. Так как они работают только с видимой на экране чатью талицы, и Row (номер текущей строки) не равен номеру текущей строки в DataSet.
Добавлено: 08 дек 2005, 11:02
Viktor Zull
Да мне как раз и нужно работать только с видимой на экране частью DBGrid.
Добавлено: 08 дек 2005, 11:17
Игорь Акопян
И еще как определить top и left выделенной ячейки
У меня глюк? Этого вопроса изначально не было? или я опять не дочитал до конца...
кстати, зачем они нужны? может мы найдём обходной путь решения

Добавлено: 08 дек 2005, 11:23
Naeel Maqsudov
может мы найдём обходной путь решения
Зачем, когда есть прямой - GetCellRect!
Добавлено: 08 дек 2005, 11:49
Игорь Акопян
я типа долго писАл

Добавлено: 18 дек 2005, 03:19
Viktor Zull
Как сделать так, чтобы прокрутка в одном DBGrid соответсвовала прокрутке в другом.
Добавлено: 15 янв 2006, 00:16
Naeel Maqsudov
Можно синхронизировать текущую позицию в двух DataSet-ах.
Надо только быть уверенным, что в обоих одинаковое количество записей.
Table1.RecNo:=Table2.RecNo;
(Причем это надо делать не в событиях DBGrid, а в событии AfterScroll у DataSet-а.)
При этом правда возможно расхождение в самих гридах. Т.е. если они расположены горизонтально, то текущая строка в одном может оказаться выше или ниже текущей строки в другом. Чтобы еще и это устранить, то надо достучаться до свойства
TopLeft у одного грида (G1), а в другом (G2) сделать G2.TopRow:=G1.TopLeft.Y;
Свойства TopLeft и TopRow унаследованы от TCustomGrid, т.е. достучаться до них можно создавая фейковый класс TCustomGrid.
Добавлено: 16 янв 2006, 01:40
Viktor Zull
У меня как раз и есть такая ситуация: 2 DBGrida рядом и записей в них одинаковое кол-во и проблема как раз в том что текущая строка в одном не совпадает с текущей строкой в другом. Можно поподробнее как достучаться до их свойств.