Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Раскраска строк в DevExpress QuantumGrid C++ Builder 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

fant1978

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет! Кто знает как раскрасить строки в DevExpress QuantumGrid C++ Builder 6 в зависимости от значения какого-нить поля.
Спасибо.

Всего записей: 12 | Зарегистр. 14-05-2003 | Отправлено: 16:06 05-04-2004
mastervigo



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
что-то типа DrawColumnCell, как в Grid'e

Всего записей: 1511 | Зарегистр. 17-08-2002 | Отправлено: 13:43 06-04-2004
Zioma



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если интересно, то я это делаю на Дельфях.
Но суть, впринципе, не меняется.
В обработчике OnCustomDrawCell пишешь код(пример моей процедуры):
 
procedure TfrmActs.ActsGridViewCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
 ARec : TRect;
 ATextToDraw : String;
 Val : integer;
 IsImage : boolean;
 Align : integer;
  procedure SetTextToDraw;
   begin
    ATextToDraw := AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index];
   end;
begin
 SetTextToDraw;
 ARec := AViewInfo.Bounds;
 Val := VarAsType(AViewInfo.GridRecord.Values[ViewFlag.Index], varInteger);
 ACanvas.Canvas.Brush.Color:=$00FAE6E6;
  if AViewInfo.GridRecord.Selected then ACanvas.Canvas.Brush.Color:=clMoneyGreen;
 ACanvas.Canvas.FillRect(ARec);
  if (AViewInfo is TcxCustomGridCellViewInfo) and (AViewInfo.Item.Index=ViewFlag.Index) then
   begin
    ACanvas.Canvas.FillRect(ARec);
// Здесь в зависимости от Val рисуется картинка. Таким же образом можна раскрасить строчку
     case Val of
      1: ilMarker.Draw(ACanvas.Canvas, ARec.Left+3, ARec.Top, 2);
      2: ilMarker.Draw(ACanvas.Canvas, ARec.Left+3, ARec.Top, 1);
      3: ilMarker.Draw(ACanvas.Canvas, ARec.Left+3, ARec.Top, 0);
     end;
    ATextToDraw:='';
   end;
.............................
 ADone:=True;
................
  if ADone then ACanvas.DrawText(ATextToDraw, AViewInfo.Bounds, Align);
.................
 
 
Если будут вопросы - обращайся.
 
 
 
 

Всего записей: 178 | Зарегистр. 21-11-2003 | Отправлено: 11:47 08-04-2004
SeVoCybershuter

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2zioma
не знаешь как сделать тоже самое, только с DBTreeList-ом?

Всего записей: 5 | Зарегистр. 12-09-2007 | Отправлено: 17:52 12-09-2007
Zioma



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
К сожалению программированием уже 1,5 года не занимаюсь (ударился в администрирование сиквела ) и под рукой компонент нет заинсталенных, но думаю, что нужно рыть в сторону поиска похожих обработчиков событий рисования ...

Всего записей: 178 | Зарегистр. 21-11-2003 | Отправлено: 14:23 14-09-2007
Valeron70

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вчерась тоже над этой проблемой бился, надо было затенить записи не текущего пользователя. Вот предварительные результаты.
procedure TMForm.cxDBTreeList1CustomDrawCell(Sender: TObject;
  ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo;
  var ADone: Boolean);
var
 ARect:TRect;
 s:string;
begin
 if AViewInfo.Column.ItemIndex<>4 then exit;
 
 ARect:= AViewInfo.BoundsRect;
 if not VarIsNull(AViewInfo.DisplayValue) then s:= AViewInfo.DisplayValue;
 ACanvas.Canvas.Brush.Color:=clWhite;
 ACanvas.Font.Color:=clBlack;
 if AnsiLowerCase(s)<>AnsiLowerCase(CurrentUser) then begin
  ACanvas.Canvas.Brush.Color:=$00FAE6E6;
 end;
 ACanvas.Canvas.FillRect(ARect);
 
 ADone:=True;
 ACanvas.DrawText(s, AViewInfo.BoundsRect,0);
end;
 
Добавлено:
А теперь я добрался до раскраски строки полностью:
procedure TMForm.cxDBTreeList1CustomDrawCell(Sender: TObject;
  ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo;
  var ADone: Boolean);
var
 ARect:TRect;
 Value,Compare:string;
begin
 if not VarIsNull(AViewInfo.DisplayValue) then Value:= AViewInfo.DisplayValue;
 if AViewInfo.Node.ValueCount>3 then Compare:=AViewInfo.Node.Values[4] ;
 
 ARect:= AViewInfo.BoundsRect;
 
 ACanvas.Canvas.Brush.Color:=clWhite;
 ACanvas.Font.Color:=clBlack;
 if AnsiLowerCase(Compare)<>AnsiLowerCase(CurrentUser) then begin
  ACanvas.Canvas.Brush.Color:=$00FAE6E6;
 end;
 ACanvas.Canvas.FillRect(ARect);
 
 ADone:=True;
 
 ACanvas.DrawText(Value, AViewInfo.BoundsRect,0);

Всего записей: 1 | Зарегистр. 12-11-2007 | Отправлено: 17:52 13-11-2007
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Даю свой вариант , тут просто на Delphi

Код:
 
procedure TForm6.cxGridDBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
  var
 ARec : TRect;
 Val,Val1 : double;
 i,j:integer;
begin
i:=cxGridDBTableView1KOLICH.Index;
j:=cxGridDBTableView1MINKOL.Index;
Val := VarAsType(AViewInfo.GridRecord.Values[i], varDouble);
Val1 := VarAsType(AViewInfo.GridRecord.Values[j], varDouble);
if val<=val1 then  begin
ACanvas.Canvas.Font.Color := clRed;
 ACanvas.Canvas.FillRect(ARec);
end;
 
 
end;
 
 

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 12:48 02-09-2010 | Исправлено: Andryshok, 15:07 02-09-2010
Arion



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Э... А что мешает использовать стандартный механизм стилей?
 

Код:
 
procedure TFrameSurface.OnGetFullNPVContentStyle(Sender: TcxCustomGridTableView;
  ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
  out AStyle: TcxStyle);
begin
  AStyle := cxGood;
 
  if ARecord.Values[4] = False then
    AStyle := cxWaiting;
 
  if ARecord.Values[3] = True then
    AStyle := cxDead;
end;
 

Всего записей: 436 | Зарегистр. 29-06-2003 | Отправлено: 09:20 07-09-2010
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Раскраска строк в DevExpress QuantumGrid C++ Builder 6


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru