Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Раскраска строк в DevExpress QuantumGrid C++ Builder 6

Автор: fant1978
Дата сообщения: 05.04.2004 15:06
Привет! Кто знает как раскрасить строки в DevExpress QuantumGrid C++ Builder 6 в зависимости от значения какого-нить поля.
Спасибо.
Автор: mastervigo
Дата сообщения: 06.04.2004 12:43
что-то типа DrawColumnCell, как в Grid'e
Автор: Zioma
Дата сообщения: 08.04.2004 10:47
Если интересно, то я это делаю на Дельфях.
Но суть, впринципе, не меняется.
В обработчике 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);
.................


Если будут вопросы - обращайся.




Автор: SeVoCybershuter
Дата сообщения: 12.09.2007 16:52
2zioma
не знаешь как сделать тоже самое, только с DBTreeList-ом?
Автор: Zioma
Дата сообщения: 14.09.2007 13:23
К сожалению программированием уже 1,5 года не занимаюсь (ударился в администрирование сиквела ) и под рукой компонент нет заинсталенных, но думаю, что нужно рыть в сторону поиска похожих обработчиков событий рисования ...
Автор: Valeron70
Дата сообщения: 13.11.2007 16:52
Вчерась тоже над этой проблемой бился, надо было затенить записи не текущего пользователя. Вот предварительные результаты.
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);
Автор: Andryshok
Дата сообщения: 02.09.2010 11:48
Даю свой вариант , тут просто на 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;

Автор: Arion
Дата сообщения: 07.09.2010 08:20
Э... А что мешает использовать стандартный механизм стилей?


Код:
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;

Страницы: 1

Предыдущая тема: Задержка времени в Delphi 7


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.