DBGrid1DrawColumnCell зарисовывает Title.Caption

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

DBGrid1DrawColumnCell зарисовывает Title.Caption

Сообщение andal » 01.11.2007 17:31:52

Добавляю колонку
Код: Выделить всё
DBGrid1.Columns.Add.Title.Caption := 'ФИО';

Затем в DBGrid1DrawColumnCell пытаюсь его заполнить
Код: Выделить всё
  if (Column.Title.Caption = 'ФИО')
   then
     with TDBGrid(Sender).Canvas do
      begin
       colText :=
       trim(DataModule1.selfromdict('Sotrud',
       DataSource1.DataSet.FieldByName('ID_Sotrud').Text,'Famil'))+' '+
       trim(DataModule1.selfromdict('Sotrud',
       DataSource1.DataSet.FieldByName('ID_Sotrud').Text,'Imya'))+' '+
       trim(DataModule1.selfromdict('Sotrud',
       DataSource1.DataSet.FieldByName('ID_Sotrud').Text,'Otches'));
       FillRect(Rect);
       TextOut(Rect.Left + 2, Rect.Top + 2,trim(colText));
      end;
  TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);


В результате получаю в Title наложение последней записи и названия колонки. Борюсь второй день. Кто-нибудь сталкивался?
andal
незнакомец
 
Сообщения: 9
Зарегистрирован: 21.03.2007 11:00:47

Сообщение Attid » 01.11.2007 19:34:49

изврат, какой сервер БД ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение alexs » 01.11.2007 23:32:52

Насколько я помню, метод DBGrid1DrawColumnCell
вызывается при отрисовке не только области данных, но и колонок, индикатора и т.д. - скорее всего именно с этим ты и столкнулся.

PS.
Перед процедурой происовки, например при создании формы, создай локальные переменные, в которые загониш указателит на нужные поля - во первых увеличется скорость, т.к. не нужно будет каждый раз их искать (FieldByName - очень медленная процедура), во вторых - читать станет проще.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение andal » 02.11.2007 09:16:28

изврат, какой сервер БД ?


Да знаю я, что можно sql-запросом можно все, что угодно получить, но вот захотелось поизвращаться. ;)

Насколько я помню, метод DBGrid1DrawColumnCell
вызывается при отрисовке не только области данных, но и колонок, индикатора и т.д. - скорее всего именно с этим ты и столкнулся.


И это я тоже понял. Как мне в условии прописать, чтобы title пропускалось при отрисовке?
andal
незнакомец
 
Сообщения: 9
Зарегистрирован: 21.03.2007 11:00:47

Сообщение alexs » 02.11.2007 14:34:03

Я не уверен в правильности - но посмотри на параметр State этого метода - кажется тебе надо обработать состояние gdFixed

а вобще для твого примера лучше использовать калькулируемое поле, или (что проще для тебя) - собрать ФИО до кучи ешё в запросе в вычисляемую колонку
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение andal » 06.11.2007 12:17:35

alexs писал(а): не уверен в правильности - но посмотри на параметр State этого метода - кажется тебе надо обработать состояние gdFixed


Спасибо тебе, добрый человек!

if (Column.Title.Caption = 'ФИО') and not (gdFixed in state)

заработало.
andal
незнакомец
 
Сообщения: 9
Зарегистрирован: 21.03.2007 11:00:47

Re: DBGrid1DrawColumnCell зарисовывает Title.Caption

Сообщение victorgugo » 18.03.2009 23:54:28

при вызове процедуры:

procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);

возникает ошибка:

Unit1.pas(37,67) Error: Identifier not found "TGridDrawState"

Кто знает чем может быть вызвана даная проблема и как ее устранить?
Заранее спасибо!
victorgugo
новенький
 
Сообщения: 17
Зарегистрирован: 04.03.2009 03:11:20

Re: DBGrid1DrawColumnCell зарисовывает Title.Caption

Сообщение Logo » 19.03.2009 00:12:27

"TGridDrawState" определен в модуле "Grids"
У Вас в uses прописан "Grids"?

Указывайте версию fpc и Lazarus
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: DBGrid1DrawColumnCell зарисовывает Title.Caption

Сообщение victorgugo » 19.03.2009 00:22:42

Lazarus-0.9.24-fpc-2.2.0-20071114-win32.exe

В uses добавил Grids и всё заработало!
Большое спасибо!
victorgugo
новенький
 
Сообщения: 17
Зарегистрирован: 04.03.2009 03:11:20


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

Рейтинг@Mail.ru