![]() |
Datenbank: absoluteDB • Version: 7 • Zugriff über: Delphi?
OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle
Moin !
Da will ich mich mal ein erstes Mal versuchen... :-) (Hoffe ich mach nicht gleich alles falsch ! Ich möchte über OnDrawColumnCell eines dbGrids in der Zeile X die Zelle in der Spalte Y in Abhängikeit des Zellenwertes wegen mir in der Spalte Y+2 ändern (z.b. farbe, egal): Spalte1........Spalte2...Spalte3 x1)rot/grün...(x2)......(x3)Wahr/Falsch.... Zeile x Also ist x3 wahr wird x1 rot, ist x3 falsch wird x1 grün. Das würde mir schon reichen. Ich kann nur immer in einer Spalte "spielen"..... OK, also wäre nett wenn ihr eine Idee habt. P.S.: Sollte ein diebezüglicher Beitrag bereits existieren bitte nicht schimpfen, sondern bitte kurz vermuten warum ich den nicht gefunden habe. also thanks frank |
AW: OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle
Suchst Du sowas? (Nur Fragmente als Idee)
Delphi-Quellcode:
Hier gibt es ein Formular (TfmMain) mit u. a. dem Frame (TfrmDGB), auf welchem ein tJVDBGrid (dbg) liegt.
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; 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. |
AW: OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle
Je nach Grid, kann man das anders machen, aber für VCL.TDBGrid:
In OnDrawColumncell prüfst du, ob du in der Zelle bist, die du anders dargestellt haben möchtest. Du hast auf die Werte der anderen Zellen Zugriff, bzw auf die Feldwerte: ![]() Dein Grid bewegt sich synchron zur Datenmenge und umgekehrt, dh die Zeile eines Grids entspricht der aktuellen Zeile der Datenmenge dh du kannst direkt in der Datenmenge deinen Wert holen und darauf reagieren. Ähnliche Frage: ![]() Genügt das zum Weitermachen? |
AW: OnDrawColumnCell - EINE Zelle färben, abhängig vom Wert einer anderen Zelle
moin !
vielen dank, alles gut ! entscheidend für mich idi.... war der hinweis: "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." habe es exact umgekehrt probiert.... netten tag frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz