Einfach ist es wirklich nicht, aber es lohnt sich. Aber jeder soll die Komponenten einsetzen die er möchte. Hier mal ein Beispiel was auf einen zukommen kann. Es handelt sich um einen CustomDraw in einem DBGrid.
TDbgrid (VCL)
Delphi-Quellcode:
procedure TfrmLsKopfListe.dbgLsKopfDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if tblLsKopf.FieldByName('Status').Asstring <> '' then
dbgLskopf.Canvas.Brush.Color := clRed
else if UpperCase(tblLskopf.FieldByName('InfoIntern').AsString) = 'OFFEN' then
begin
if gdSelected in State then
begin
dbgLskopf.Canvas.Brush.Color := clBlue;
dbgLsKopf.Canvas.Font.Color := clYellow;
end
else
begin
dbgLskopf.Canvas.Brush.Color := clYellow;
dbgLsKopf.Canvas.Font.Color := clBlack;
end;
end;
dbgLsKopf.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
cxGrid (DevExpress):
Delphi-Quellcode:
procedure TfrmLsKopfListe.cxGridLsLopfDBTableViewLsKopfCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
vStatus : Variant;
sStatus, sInfo : string;
begin
vStatus := AViewInfo.GridRecord.Values[TcxGridDbTableView(Sender).GetColumnByFieldName('Status').Index];
// if not vStatus = null then -> cxGrid6
if not VarIsNull(vStatus) then
sStatus := UpperCase(VarToStr(vStatus));
sInfo := UpperCase(VarToStr(AViewInfo.GridRecord.Values[TcxGridDbTableView(Sender).GetColumnByFieldName('InfoIntern').Index]));
if sStatus <> '' then
ACanvas.Canvas.Brush.Color := clRed
else if sInfo = 'OFFEN' then
begin
if AViewInfo.Selected then
begin
ACanvas.Canvas.Brush.Color := clBlue;
ACanvas.Canvas.Font.Color := clYellow;
end
else
begin
ACanvas.Canvas.Brush.Color := clYellow;
ACanvas.Canvas.Font.Color := clBlack;
end;
end;
end;