Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Tstringgrid einzelne Zellen färben (https://www.delphipraxis.net/26624-tstringgrid-einzelne-zellen-faerben.html)

Dragon27 26. Jul 2004 20:25


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

Keldorn 26. Jul 2004 20:26

Re: Tstringgrid einzelne Zellen färben
 
Hallo

selber zeichnen im Hier im Forum suchenondrawcell-ereignis

Mfg Frank

Mirilin 26. Jul 2004 20:27

Re: Tstringgrid einzelne Zellen färben
 
:hi:

Such mal nach OwnerDraw und ähnlichem.


mfg Tobias

Hansa 26. Jul 2004 20:33

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.

Dragon27 26. Jul 2004 21:48

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:

Stringgrid1.cells[5,3].color:=clred;
Geht sowas nicht, oder gibt es da ne gute Freewarekompo?


Danke für eure HIlfe

aschne1 26. Jul 2004 22:15

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

mischerr 26. Jul 2004 22:16

Re: Tstringgrid einzelne Zellen färben
 
...oder einzelne Zellen...
Code:
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;
Grüsse!

Jojojoxx 22. Aug 2007 11:49

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

Hansa 22. Aug 2007 11:53

Re: Tstringgrid einzelne Zellen färben
 
Was zu tun ist steht doch hier schon mehrmals. :???: Man könnte dasselbe zwar nochmals wiederholen, aber wozu ?

mkinzler 22. Aug 2007 11:56

Re: Tstringgrid einzelne Zellen färben
 
Der Event wird pro Zelle einmal getriggert, und erhält die Zelle(als Zeile/Spalte) als Parameter.

Jojojoxx 22. Aug 2007 11:57

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

mkinzler 22. Aug 2007 12:00

Re: Tstringgrid einzelne Zellen färben
 
Die Textfarbe ist eine Eigenschaft des Fonts

Shirakava 1. Mai 2008 19:27

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

mkinzler 1. Mai 2008 19:29

Re: Tstringgrid einzelne Zellen färben
 
Nein, beim zeichnen jeder einzelnen Zelle

Shirakava 1. Mai 2008 19:50

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.

mkinzler 1. Mai 2008 20:00

Re: Tstringgrid einzelne Zellen färben
 
Welchen Wert hat .DefaultDrawing?

Hansa 1. Mai 2008 20:17

Re: Tstringgrid einzelne Zellen färben
 
Poste Teile des Quelltextes, insbesondere die OnDrawCell-Prozedur. Sonst wird das nichts. :P

Delphi-Laie 11. Jan 2010 20:35

Re: Tstringgrid einzelne Zellen färben
 
Zitat:

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

Delphi-Quellcode:
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

Delphi-Quellcode:
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.

Steph.Delphi 11. Jun 2012 17:25

AW: Tstringgrid einzelne Zellen färben
 
Hier wird alles sehr gut beschrieben. Bei mir hat's funktioniert, schön einfach geschrieben.
http://www.ansatheus.de/_at_dokserve...stringgrid.pdf


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