![]() |
Tstringgrid einzelne Zellen färben
Hallo,
ist es eigentlich möglich einzelne Zellen in einem Stringgrid anders zu formatieren. (Farbe, Schrift) Hab in der Oh nix gefunden.... Danke |
Re: Tstringgrid einzelne Zellen färben
|
Re: Tstringgrid einzelne Zellen färben
:hi:
Such mal nach OwnerDraw und ähnlichem. mfg Tobias |
Re: Tstringgrid einzelne Zellen färben
Ich sage nur : "Brush.Color" und "Font.Color" Was gefärbt werden soll kannst du locker über Col und Row einstellen.
|
Re: Tstringgrid einzelne Zellen färben
hallo, danke für eure Antworten.
Aber ich verstehe nicht ganz, dass ganze passiert doch dann nur wenn ich die Anwendung starte. Aber es soll praktisch einfach so gehen:
Delphi-Quellcode:
Geht sowas nicht, oder gibt es da ne gute Freewarekompo?Stringgrid1.cells[5,3].color:=clred; Danke für eure HIlfe |
Re: Tstringgrid einzelne Zellen färben
Hallo Dragon27
Ich habe bei Delphi-Source.de folgendes gefunden. Es färbt zwar ganze Zeilen, doch ich denke so verstehst Du einmal das Prinzip wie Du vorzugehen hast.
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); begin if odd(ARow) then begin //bei ungeraden Zeilen StringGrid1.Canvas.Brush.Color := clYellow; StringGrid1.Canvas.FillRect(Rect); end; end; mfg Armin |
Re: Tstringgrid einzelne Zellen färben
...oder einzelne Zellen...
Code:
Grüsse!
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); begin with TStringGrid(Sender).Canvas do begin if (ACol=1) and (ARow=1) then begin Brush.Color:= clRed; FillRect(Rect); end; end; end; |
Re: Tstringgrid einzelne Zellen färben
Hi!
Lässt sich auch irgendwie der Text in einer einzelnen Zelle färben, sodass man in verschiedenen Zellen unterschiedliche Textfarben hat? Danke euch! mfg Jojo |
Re: Tstringgrid einzelne Zellen färben
Was zu tun ist steht doch hier schon mehrmals. :???: Man könnte dasselbe zwar nochmals wiederholen, aber wozu ?
|
Re: Tstringgrid einzelne Zellen färben
Der Event wird pro Zelle einmal getriggert, und erhält die Zelle(als Zeile/Spalte) als Parameter.
|
Re: Tstringgrid einzelne Zellen färben
Hi!
Ich kann dem vorher geschriebenen nicht wirklich entnehmen wie ich die Textfarbe unterschiedlich machen kann. Bei mir wird das immer für das gesamt Stringgrid übernommen, auch wenn es im OndrawCell-ereignis ist. Mit der Hintergrundfarbe einer Zelle klappt es bei mir, mit der Textfarbe jedoch nicht! Wäre dankbar, wenn mir da jemand helfen könnte! Danke! mfg Jojo |
Re: Tstringgrid einzelne Zellen färben
Die Textfarbe ist eine Eigenschaft des Fonts
|
Re: Tstringgrid einzelne Zellen färben
aber das geschieht dann beim erstellen von dem stringgrid oder?
ich bin nämlich auf der suche nach einer funktion mit der ich das im nachhinein noch ändern kann also wenn eine gewisse bedingung erfüllt ist jedesmal neu zeichnen erscheint mir als nonsens |
Re: Tstringgrid einzelne Zellen färben
Nein, beim zeichnen jeder einzelnen Zelle
|
Re: Tstringgrid einzelne Zellen färben
okay...
aber jetzt hab ich das angwendet und mein text ist weg, also einfach nur überzeichnet, und wird erst wieder freigegeben wenn ich auf die zelle klicke. bei der zelle in der ich gerade den text am eingeben bin geschieht nicht im geringsten etwas. |
Re: Tstringgrid einzelne Zellen färben
Welchen Wert hat .DefaultDrawing?
|
Re: Tstringgrid einzelne Zellen färben
Poste Teile des Quelltextes, insbesondere die OnDrawCell-Prozedur. Sonst wird das nichts. :P
|
Re: Tstringgrid einzelne Zellen färben
Zitat:
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:
Damit funktioniert es bei mir auch mit oder ohne (bzw. zu- oder abgeschaltetem) Defaultdrawing perfekt.
StringGrid1.Canvas.Font.Color:=Farbe[ACol,ARow];
StringGrid1.Canvas.TextRect(Rect,Rect.Left{+2},Rect.Top{+2},StringGrid1.cells[ACol,ARow])[ACol,ARow]) Dafür, daß die für den Hintergrund zugewiesene Farbe auch angezeigt wird, könnte übrigens der Befehl
Delphi-Quellcode:
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.
StringGrid1.Canvas.FrameRect(Rect)
Edit: FrameRect zeichnet einen farbigen Rahmen um die Zelle, während
Delphi-Quellcode:
die Zelle komplett farbig (aus-)füllt.
StringGrid1.Canvas.FrameRect(Rect)
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. |
AW: Tstringgrid einzelne Zellen färben
Hier wird alles sehr gut beschrieben. Bei mir hat's funktioniert, schön einfach geschrieben.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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