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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> закраска cells в dxDBGrid, помогите разобраться 
:(
    Опции темы
Napalm
Дата 4.3.2004, 18:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











подскажите пожалуйста как изменить цвет фона или шрифта в определенных ячейках dxDBGrid
  Вверх
Maverick
Дата 5.3.2004, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: 2
Всего: 10



Между прочим, тема и мне достаточно близка.... Подскажите, плиз как закрасить, предположим строку в зависимости от значения поля в ней...
Если предположим, поле пустое - вся строка красная, иначе - зеленая....
Я думаю, это имелось в виду в вопросе.....


--------------------
smile
PM ICQ GTalk   Вверх
AlexV1
Дата 5.3.2004, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 Не знаю, что такое DxDBGrid, но для Rx так:
Подсветка строк в RxGrid'e, удовлетворяющие какому-либо условию

Код

procedure TForm1.DBGrid1GetCellParams(Sender: TObject; Field: TField;
  AFont: TFont; var Background: TColor; Highlight: Boolean);
begin
  // Если зн-е поля id=NULL, то подсветить всю строку
  if Field.DataSet.FieldByName('id').IsNull then
  begin
    if Highlight then Background := clHighlight;
//      else Background := clLime;
  end;
end;


Если нужно подсветить не всю строку, а только зн-е в одной из колонок,
то заменить условие на
Код

   if Field.FieldName='id' then if Field.value=NULL then

 
M
z-END
кнопка код создана для того чтобы ее нажимать


Это сообщение отредактировал(а) z-END - 11.8.2006, 17:24
PM MAIL   Вверх
Maverick
Дата 5.3.2004, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: 2
Всего: 10



Спасибо... счас будем пробовать сопостовлять...

DxDBGrid - DevExpress Quantum Grid.... Очень мощный грид.... Ссылки, где скачать - есть на форуме...



--------------------
smile
PM ICQ GTalk   Вверх
Napalm
Дата 9.3.2004, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

 procedure TForm1.DBGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
  ASelected, AFocused, ANewItemRow: Boolean; var AText: String;
  var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
  var ADone: Boolean);
begin
if not ANode.HasChildren then
begin
    if (DBGrid1.FocusedNode=ANode) and (not ASelected) then
      AColor:=clAqua;
end;
end;


вот нашел.  правда не совсем то что нужно. этот кусок подсвечивает текущую строку другим цветом (Аква). как только уходишь с него все возвращается... пытался ставить другое условие, но со строками получается чехорда. може кто еще чего раскапает 
 
M
z-END
кнопка код создана  для того чтобы ее нажимать


Это сообщение отредактировал(а) z-END - 11.8.2006, 17:23
PM MAIL   Вверх
Napalm
Дата 9.3.2004, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 о! нашел. тут надо другое событие обрабатывать. это я пытался по анологии с простым dbgrid делать. сдесь оказывается надо 

Код

procedure TForm1.DBGrid1CustomDraw(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxDBTreeListColumn;
  const AText: String; AFont: TFont; var AColor: TColor; ASelected,
  AFocused: Boolean; var ADone: Boolean);
begin

if (ATExt>'0')and(acolumn.Field.FieldName='k1') then AColor:=clRed;
end;



фон поля вывода поля k1 из таблицы если там не 0 будет красный smile 
 
M
z-END
кнопка код создана  для того чтобы ее нажимать


Это сообщение отредактировал(а) z-END - 11.8.2006, 17:24
PM MAIL   Вверх
Akella
Дата 11.8.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



поднимаю тему, актуально сейчас для версии 5.
Как раскрасить cxGrid разными цветами и шрифтами в зависимости от значения конкретной ячейки?

Добавлено @ 14:19 
вот надыбал, но работает некорректно
Код
    if (TcxGridDBColumn(AViewInfo.Item).DataBinding.DataController.DataSet.FieldByName('AMOUNTONBEGIN').Value < 0) then begin
      ACanvas.Font.Color := clRed;
    end;


раскрашивается всё красным, верне всё красным, т.к. значение ячейки первой записи отрицательное
PM MAIL   Вверх
Akella
Дата 11.8.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



так тоже тест всего грида красный
Код
    if (TcxGridDBColumn(AViewInfo.Item).DataBinding.DataController.DataSet.FieldByName('AMOUNTONBEGIN').Value < 0) then
      ACanvas.Font.Color := clRed
    else
      ACanvas.Font.Color := clWindowText ;


Добавлено @ 14:32 
забыл сообщить, что обрабатываю событие OnCustomDrawCell
PM MAIL   Вверх
z-END
Дата 11.8.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102




M
z-END
Napalm, AlexV1,  в следующий раз просто буду удалять. уважайте тех кто читает ваши посты.



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Fedia
Дата 13.8.2006, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 13



Akella, можно попробовать так:
Код

procedure TConvertDBGridDemoMainForm.cxGridDBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if (AViewInfo.Item.DataBinding.FilterFieldName = 'AMOUNTONBEGIN') and (AViewInfo.Value < 0)  then
  ACanvas.Font.Color:=clRed;
end;
.
Если же есть необходимость изменить цвет шрифта для всех полей, имеющих значение меньшее нуля, то могу предложить следующий вариант:
Код

procedure TConvertDBGridDemoMainForm.cxGridDBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if ((VarType(AViewInfo.Value) and varTypeMask = varInteger) or
    (VarType(AViewInfo.Value) and varTypeMask = varDouble)) and
    (AViewInfo.Value < 0) then
  ACanvas.Font.Color:=clRed;
end;


Это сообщение отредактировал(а) Fedia - 13.8.2006, 04:36


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Akella
Дата 29.8.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



с меня +

Добавлено @ 09:52 
Код

procedure TConvertDBGridDemoMainForm.cxGridDBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if ((VarType(AViewInfo.Value) and varTypeMask = varInteger) or
    (VarType(AViewInfo.Value) and varTypeMask = varDouble)) and
    (AViewInfo.Value < 0) then
  ACanvas.Font.Color:=clRed;
end;


разукрашивает отдельно каждую ячейку
PM MAIL   Вверх
Fedia
Дата 29.8.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 13



Akella,  я думал ты вообще забыл про этот вопрос smile


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Akella
Дата 29.8.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



и я думал, что забыл, но вруг этот грёбанный DevExpress ни с того ни с чего начал опять красить как попало

вопрос по теме?
вот твой код:
Код
procedure TConvertDBGridDemoMainForm.cxGridDBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if ((VarType(AViewInfo.Value) and varTypeMask = varInteger) or
    (VarType(AViewInfo.Value) and varTypeMask = varDouble)) and
    (AViewInfo.Value < 0) then
  ACanvas.Font.Color:=clRed;
end;

красит конкретную ячейку, а как вся строку закрасить?
PM MAIL   Вверх
Fedia
Дата 29.8.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 13



Цитата(Akella @  29.8.2006,  11:58 Найти цитируемый пост)
красит конкретную ячейку, а как вся строку закрасить?

А при выполнении какого условия строчку необходимо закрасить ?


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Akella
Дата 29.8.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



если значение любой ячейки строки числовое и мньше нуля
PM MAIL   Вверх
Fedia
Дата 30.8.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 13



Цитата(Akella @  29.8.2006,  15:09 Найти цитируемый пост)
если значение любой ячейки строки числовое и мньше нуля

Млин, задача оказалась не из легких. Но, слава Богу, решаемая smile
Если у тебя работал вариант закраски отдельных ячеек, то теоретически должен сработать и этот:
Код

var
  Form1: TForm1;
  RecN: Integer = -1;
  DoDraw: Boolean;
//...
var
  i, n: integer;
begin
  if AViewInfo.GridRecord.RecordIndex<>RecN then
  begin
    RecN:=AViewInfo.GridRecord.RecordIndex;
    DoDraw:=False;
    with cxGrid1DBTableView1.DataController do
    begin
      for i:=0 to AViewInfo.GridRecord.ValueCount-1 do
      if (VarType(Values[RecN, i]) and varTypeMask in
        [varInteger, varDouble]) then
      if (Values[RecN, i] < 0) then
      begin
        DoDraw:=True;
        Break;
      end;
    end;
  end;
  if DoDraw then
  ACanvas.Font.Color:=clRed;
end;

Как видишь использования глобальных переменных избежать не удалось. Можно конечно сделать и без них, но тогда для каждой ячейки придется перебирать все значения строки, что в общем притормаживает прорисовку. А отдельного события прорисовки строки я не нашел.
cxGrid1DBTableView1 из примера типа TcxGrid1DBTableView. Если при настройке грида ты менял названия его объектов, то название этого должно находиться выше кнопки "Customize..." справа.

Это сообщение отредактировал(а) Fedia - 30.8.2006, 22:10


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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