Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цветной шрифт в TDBGridEh 
:(
    Опции темы
Akella
  Дата 22.2.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Как закрасить синим цветом, например, шрифт у всей строки, в зависимости от значание того или иного поля таблицы. smile
PM MAIL   Вверх
sexton
Дата 22.2.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: 1
Всего: 9



Цитата(<Spawn> @ 21.7.2003, 05:43 Найти цитируемый пост)
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if  then
with DBGrid1.Canvas do
begin
Brush.Color:=clMenu;
Font.Color:=clBlack;
FillRect(Rect);
TextOut(Rect.Right-TextWidth(Column.Field.Text)-2,Rect.Top+2,Column.Field.Text)
end
end
else DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end.


(с) Поиск рулит
PM MAIL WWW ICQ   Вверх
Akella
Дата 22.2.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



прочти внимательно название темы и протестируй свой код
Добавлено @ 14:29
я протестировал

Код

procedure TfmOfficesSearch.dbgApart3DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin

if (Column.FieldName = 'ARENDA') AND (Column.Field.AsString = 'T') then
with dbgApart3.Canvas do
begin
//  Brush.Color:=clBlue;
  Font.Color:=clBlack;
  FillRect(Rect);
  TextOut(Rect.Right-TextWidth(Column.Field.Text)-2,Rect.Top+2,Column.Field.Text)
end
else
 dbgApart3.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;



сообщение компилятора

[Pascal Error] uOfficesSearch.pas(1094): E2010 Incompatible types: 'DBGridEh.TGridDrawState' and 'uOfficesSearch.TGridDrawState'
Добавлено @ 14:31
ругается на State
dbgApart3.DefaultDrawColumnCell(Rect,DataCol,Column,State);
PM MAIL   Вверх
Vas
Дата 22.2.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 4
Всего: 28



Код

Procedure TFormAbonent.DBGridFindDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
Begin
      if TDBGrid(Sender).DataSource.DataSet.FieldByName('Close_flag').AsString='T' then
        begin
          TDBGrid(Sender).Canvas.Font.Color:=clBlue; 
          TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
        end;
//А это чтобы при установке фокуса на ячейку не получилось что фокус синий и текст синий
  if (gdSelected in State) then
    begin
      TDBGrid(Sender).Canvas.Font.Color:=clHighLightText;
      TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;
End;

Добавлено @ 14:40
В BDGridEh можно проще если у тебя стоит в OptionsEh dghHighlightFocus=True
Код

Procedure TForm1.DBGridEhPairsDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
Begin
  if TDBGridEh(Sender).DataSource.DataSet.FieldByName('Iswork').AsString='F' then
    TDBGridEh(Sender).Canvas.Font.Color:=clBlue
  else
    TDBGridEh(Sender).Canvas.Font.Color:=clBlack;
   TDBGridEh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
End;



Это сообщение отредактировал(а) Vas - 22.2.2006, 14:34


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
sexton
Дата 22.2.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: 1
Всего: 9



Цитата(Akella @ 22.2.2006, 14:24 Найти цитируемый пост)
[Pascal Error] uOfficesSearch.pas(1094): E2010 Incompatible types: 'DBGridEh.TGridDrawState' and 'uOfficesSearch.TGridDrawState'

Это ваще-то был пример для DBGrid.

Это сообщение отредактировал(а) sexton - 22.2.2006, 15:14
PM MAIL WWW ICQ   Вверх
Akella
Дата 22.2.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



[B]sexton, мне не нужен пример для DBGrid[/B]
PM MAIL   Вверх
Vas
Дата 22.2.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 4
Всего: 28



Akella, дык вроде же написали дял DBGridEh


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Akella
Дата 22.2.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Vas,
Цитата(Vas @ 22.2.2006, 14:34 Найти цитируемый пост)
TDBGridEh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);

компилятор ругается на эту строку, на параметр State

Цитата

[Pascal Error] uOfficesSearch.pas(1094): E2010 Incompatible types: 'DBGridEh.TGridDrawState' and 'uOfficesSearch.TGridDrawState'

PM MAIL   Вверх
sexton
Дата 22.2.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: 1
Всего: 9



Читаем справку, там пишут:
Цитата

TGridDrawState represents information that is useful when rendering the cell of a grid.

enum Grids__3 { gdSelected, gdFocused, gdFixed };
typedef Set<Grids_3, gdSelected, gdFixed> TGridDrawState;

Description
TGridDrawState represents state information about the cell of a grid that is being rendered. It is a set that includes 0 or more of the following:

Value            Meaning
gdSelected The cell is currently selected.
gdFocused The cell has input focus.
gdFixed          The cell is in the fixed region of the grid.


То есть, попробуй при вызове DefaultDrawColumnCell в параметр State запихивать одно из указанных значений.
PM MAIL WWW ICQ   Вверх
Akella
Дата 22.2.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



решил проблему так:

в USES
Grids, ComCtrls, ToolWin, GridsEh,
обратите внимание, что Grids установил раньше чем GridsEh

раньше было наоборот
Добавлено @ 17:11
компилятор не ругается, но теперь другая проблема, цвет шрифта во всех строках и колонках не "красится"
Добавлено @ 17:14
это код закрашивает шрифт только у одной колонки, а мне нужно у всей строки smile
Код

procedure TfmOfficesSearch.dbgApart3DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
  if (Column.FieldName = 'ID') and (Column.Field.AsString <> '') then
   TDBGridEh(Sender).Canvas.Font.Color:=clBlue;

  TDBGridEh(Sender).DefaultDrawColumnCell(rect,datacol,column,State);
end;


PM MAIL   Вверх
Romikgy
Дата 22.2.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Код

procedure TfmOfficesSearch.dbgApart3DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
  if (Column.FieldName = 'ID') and (Column.Field.AsString <> '') then
   TDBGridEh(Sender).Canvas.Font.Color:=clBlue
else
  TDBGridEh(Sender).DefaultDrawColumnCell(rect,datacol,column,State);
end;

smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Akella
Дата 22.2.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Romikgy, что непонятного?
мне нужно закрвсить шрифт у всей строки данной таблицы. а не только у конкретной колонки
PM MAIL   Вверх
Romikgy
Дата 22.2.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



У какой строки условие вставь


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Albinos_x
Дата 22.2.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



попробуй убрать условие :
Цитата(Romikgy @ 22.2.2006, 17:18 Найти цитируемый пост)
if (Column.FieldName = 'ID') and (Column.Field.AsString <> '') then

и перебрать столбцы в цикле


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Vas
Дата 23.2.2006, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 4
Всего: 28



Цитата(Albinos_x @ 22.2.2006, 18:42 Найти цитируемый пост)
и перебрать столбцы в цикле

Зачем, надо просто при прорисовке каждой колонки проверять на соответствие нужного поля датасета:
Вот так работает без проблем без всяких циклов красится вся строка:
Код

Procedure TForm1.DBGridEhPairsDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
Begin
  if TDBGridEh(Sender).DataSource.DataSet.FieldByName('Iswork').AsString='F' then
    TDBGridEh(Sender).Canvas.Font.Color:=clBlue;
   TDBGridEh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
End;



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.