AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid: Zellen einzeln färben

Ein Thema von Brakeman · begonnen am 30. Jun 2009 · letzter Beitrag vom 30. Jun 2009
Antwort Antwort
Brakeman

Registriert seit: 23. Sep 2003
43 Beiträge
 
#1

Stringgrid: Zellen einzeln färben

  Alt 30. Jun 2009, 13:25
Hallo,
ich habe die Suche bereits bemüht, konnte aber wirklich nichts zu meiner Frage erfahren.

Ich habe in meinem Programm ein Stringgrid eingebaut, welches eine Matrix mit 9x9 Feldern darstellt. Ich möchte bestimmte Felder des Stringgrids (Spalte, Zeile) mit einer Farbe füllen.

Die Kombinationen hole ich mir aus einer Datei zeilenweise. So bekomme ich nacheinander Werte z.B. 1,1 und im nächsten Durchlauf 1,2. Nun sollen die Felder Spalte1, Zeile1 und Spalte1, Zeile2 gefärbt werden. Das Färben klappt auch, nur wird beim nächsten Durchlauf das vorige Feld wieder mit weiß gefüllt.

Ich möchte, dass beim Aufrufen von StringGrid1DrawCell nur das eine angegebene Feld gefüllt wird.

Kann mir jemand helfen?

Vielen Dank

Delphi-Quellcode:

var d,t: Single;


procedure TForm1.Button1Click(Sender: TObject);
var temp, dStr, tStr: String;
    i: Integer;
begin
OpenDialog1.Filter:='csv files (*.csv)|*.CSV';
OpenDialog1.InitialDir:=appPath;

if (OpenDialog1.Execute) then
 begin
  myFindSource:=OpenDialog1.FileName;
 end
else
 begin
  myFindSource:='';
  Exit;
 end;

Richedit2.Lines.LoadfromFile(OpenDialog1.Filename);

for i:=0 to RichEdit2.Lines.Count-1 do
 begin
  temp:=RichEdit2.Lines.Strings[i];
  dStr:=Copy( Explode(';', temp, 20)[14],2,3);
  d:=StrToFloat(dStr);

  tStr:=Copy( Explode(';', temp, 20)[15],2,3);
  t:=StrToFloat(tStr);
  StringGrid1.Repaint;
 end;
end;


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin

if (ACol = t) AND (ARow = d) then
 begin
  StringGrid1.Canvas.Brush.Color:= clPurple;
  StringGrid1.Canvas.FillRect(Rect);
  StringGrid1.Canvas.TextOut(Rect.Left+2, Rect.Top+2, StringGrid1.Cells[ACol, ARow]);
 end;

end;
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#2

Re: Stringgrid: Zellen einzeln färben

  Alt 30. Jun 2009, 13:54
Moin, Moin.
Solange DefaulDraw aktiv ist, werden in deiner jetzigen Variante immer alle nicht von dir behandelten Zellen mit der "normalen" Farbe dargestellt. Also, entweder DefaultDraw deaktivieren - was aber nur in seltenen Fällen sinnvoll ist, da du dann noch sehr viel mehr selber zeichnen musst, oder alle spezielle Zellen im OnDraw() berücksichtigen.
Ralph
  Mit Zitat antworten Zitat
Brakeman

Registriert seit: 23. Sep 2003
43 Beiträge
 
#3

Re: Stringgrid: Zellen einzeln färben

  Alt 30. Jun 2009, 14:03
Ich habe beim probieren auch festgestellt, dass es eher ungünstig ist das ganze Stringgrid ständig neuzuzeichnen. Ich sammle jetzt erst mal alle Feldkombinationen, die ich einfärben will und gehe dann in meiner Methode StringGrid1DrawCell mit einer Schleife über die Varianten und zeichne dann dort.

Vielen Dank für die Antwort.

Das Thema ist hiermit erledigt.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Stringgrid: Zellen einzeln färben

  Alt 30. Jun 2009, 14:14
Zitat von Brakeman:
... Das Thema ist hiermit erledigt.
Trotzdem noch ein Link.

So viel ist da ja nicht zu zeichnen finde ich.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#5

Re: Stringgrid: Zellen einzeln färben

  Alt 30. Jun 2009, 14:39
Hallo,

if (ACol = t) AND ... das soll funktionieren?
Einen Integer(ACol) mit einem Fließkommawert (t) vergleichen.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz