Einzelnen Beitrag anzeigen

Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#18

Re: Tstringgrid einzelne Zellen färben

  Alt 11. Jan 2010, 20:35
Zitat von mkinzler:
Welchen Wert hat .DefaultDrawing?
Tut mir leid, hier einen Asbachthread wieder aufzuwärmen, aber mit Defaultdrawing hat das nichts (oder nicht unbedingt) etwas zu tun.

Entscheidend ist zunächst einmal:

- eine „Hintergrundmatrix“ mit den Farbwerten (bietet sich der Typ TColor an) bereitzustellen, ggf. auch für die beiden Farbwerte (Zellhintergrund- und Zellschriftfarbe),
- diese (logischerweise rechtzeitig, also vor Stringgridzellenfärbung) zu füllen und
- sie dauerhaft bereitzuhalten, zumal OnDraw-Ereignise auch dann stattfinden, wenn das StringGrid schon gefüllt ist und man mit einem anderen Formular/Fenster über jenes „wischt“.

Die nach meiner Beobachtung alles entscheidenden zwei Befehle (für die zellbezogene Textfärbung) lauten:

Delphi-Quellcode:
StringGrid1.Canvas.Font.Color:=Farbe[ACol,ARow];
StringGrid1.Canvas.TextRect(Rect,Rect.Left{+2},Rect.Top{+2},StringGrid1.cells[ACol,ARow])[ACol,ARow])
Damit funktioniert es bei mir auch mit oder ohne (bzw. zu- oder abgeschaltetem) Defaultdrawing perfekt.

Dafür, daß die für den Hintergrund zugewiesene Farbe auch angezeigt wird, könnte übrigens der Befehl

StringGrid1.Canvas.FrameRect(Rect) sorgen, den ich in jenem Kontext auch fand, doch das probierte ich nicht aus, also ohne Gewähr. Er wirkt jedenfalls so herrlich adäquat zu seinem Pendant.

Edit: FrameRect zeichnet einen farbigen Rahmen um die Zelle, während

StringGrid1.Canvas.FrameRect(Rect) die Zelle komplett farbig (aus-)füllt.

Diese Diskussion aufmerksam verfolgt, ich muß es leider so deutlich ausdrücken, habe ich bei einigen durchaus den Eindruck, daß sie die präzise Antwort nicht wissen, aber unbedingt etwas dazu schreiben müssen und so tun als ob. Auch in anderen Foren sind ähnliche Diskussionsverläufe bei Anfragen bezüglich des zellspezifischen, zellindividuellen Färben der Hintergründe und/oder Einträge von StringGrids zu beobachten. Ein echter Dauerbrenner, weil dieser Objektlasse m.E. letztlich wichtige Eigenschaften fehlen (oder die sich doch nicht so simpel programmieren lassen). Doch eben gerade weil das kaum irgendo erschöpfend beantwortet wurde, tauchen derlei Fragen immer und immer wieder auf.
  Mit Zitat antworten Zitat