Suchst Du sowas? (Nur Fragmente als Idee)
Delphi-Quellcode:
procedure SetKategorieColor(iID : Integer; Field : TField; frmDBG : TfrmDGB);
begin
if (Field.AsString = csDublette) then frmDBG.SetCellColor(clPurple,clWhite)
else if (Field.AsString = csFormatUnbekannt) then frmDBG.SetCellColor(clRed,clYellow)
else if (Field.AsString = csFrame) then frmDBG.SetCellColor(clBlue,clWhite)
else
...
else if (Copy(Field.AsString,1,4) = 'HTTP') then frmDBG.SetCellColor(clRed,clWhite)
else if (Copy(Field.AsString,1,6) = 'Socket') then frmDBG.SetCellColor(clRed,clWhite)
;
if (frmDBG.dbg.Tag = iID) then begin
frmDBG.dbg.Canvas.Font.Style := [fsBold];
frmDBG.SwapColor;
end else begin
frmDBG.dbg.Canvas.Font.Style := [];
end;
end;
procedure TfrmDGB.SwapColor; // Cellfarbe und Schriftfarbe vertauschen.
var
clTemp : TColor;
begin
clTemp := dbg.Canvas.Brush.Color;
dbg.Canvas.Brush.Color := dbg.Canvas.Font.Color;
dbg.Canvas.Font.Color := clTemp;
end;
procedure TfrmDGB.SetCellColor(clBrush : TColor; clFont : TColor);
begin
dbg.Canvas.Brush.Color := clBrush;
dbg.Canvas.Font.Color := clFont;
end;
procedure TfmMain.frmDBGImageUrlsdbgDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
sName : String;
begin
sName := AnsiUpperCase(Column.FieldName);
if sName = 'KATEGORIE' then begin // Für dieses Feld wollen wir 'ne Sonderbehandlung.
SetKategorieColor(fImgUrlID.AsInteger,Column.Field,frmDBGImageUrls);
end else begin
if (frmDBGImageUrls.dbg.Tag = fImgUrlID.AsInteger) then begin // Abfragen, ob' der aktuelle Satz ist.
frmDBGImageUrls.dbg.Canvas.Font.Style := [fsBold];
frmDBGImageUrls.dbg.Canvas.Font.Color := clBlack;
end else begin
frmDBGImageUrls.dbg.Canvas.Font.Style := [];
end;
end;
// Der Aufruf von DefaultDrawColumnCell am Ende ist wichtig, sonst klappt es nicht.
frmDBGImageUrls.dbg.DefaultDrawColumnCell(Rect, DataCol, Column, State);
inherited;
end;
Hier gibt es ein Formular (TfmMain) mit u. a. dem Frame (TfrmDGB), auf welchem ein tJVDBGrid (dbg) liegt.
Dem DBGrid wird im Ereignis OnDrawColumnCell die Methode frmDBGImageUrlsdbgDrawColumnCell zugewiesen.
Eventuell kanmnst Du Dir hieraus was passendes zusammensuchen.
Prinzipiell kann man im Ereignis zu OnDrawColumnCell an den Spaltennamen zu der aktuell gezeichneten Zelle kommen und davon abhängig die Inhalte der anderen Spalten zum gleichen Datensatz abfragen und darauf "farblich" reagieren.
Man muss bei der Verarbeitung im Ereignis immer von der Zelle ausgehen, die gezeichnet wird. Man kann nicht von einer Zelle aus eine andere farblich umgestaltenn, sondern nur für die gerade zu zeichnende Zelle auf die Werte der anderen Spalten zum Datensatz reagieren.