Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Drawgrid füllen und färben
D. Annies - Fr 23.07.04 21:04
Titel: Drawgrid füllen und färben
Hi, Delpher!
Ich habe ein "altes" Problem und schon ein bisschen probiert. Leider ohne Erfolg. Ich möchte in d3prof ein Drawgrid mit den Werten eines Stringgrids (oder eines Arrays) in dem sich Noten, also die Zahlen 1 - 6 befinden, füllen.
Eine Zelle (Wert) mit dem Inhalt 5 oder 6, soll rot eigefärbt werden. Das Stringgrid besteht aus 30 Zeilen (Schülern) mit je 15 Noten (Spalten). Wie kann das gehen? Für eure Antwort(en) wäre ich sehr dankbar! Bis dann,
Detlef Annies :?
Keldorn - Fr 23.07.04 21:24
Hallo
was ist denn jetzt dein eigentliches Problem?wo genau haperts?
wenn es dir nur um das Zeichnen geht, gugg nach
ONDRAWCELLL, da sind einige Codebeispiele. Einfach beim setzten der Hintergrundfarbe die jeweilige stringgrid-zelle abfragen den wert ermitteln und entsprechend die farbe setzen. Die jeweilige Zelle bekommst du mit den acol und arow-werten heraus, die bei dem ondrawcellereignis übergeben werden. ob du ein string oder drawgtid verwendest ist egal aber du annst auch gleich alles mit einem stringgrid machen.
Stolpersteinchen zu evtl gefundenen code-bsps wird sein, daß bei d3prof das ondrawcellereignis anders aussah. bei höheren dephi-Versionen heißen die zu zeichnende Zelle
acol
arow, bei d3 nur col und row. Ich arbeite beim zeichnen immer mit with, damits allgemein bleibt:
also
Delphi-Quelltext
1: 2: 3: 4:
| with stringgrid do begin if arow=1 then ... end |
bei d3 sprichst du dann evtl nicht die übergebene row und col an sondern die row und col-eigenschaft des grids, also die gerade ausgewählte zelle. Das mußt du beachten, entweder kein with oder du änderst die Variablen der proc.
Mfg Frank
D. Annies - Sa 24.07.04 10:08
Danke erstmal für deine schnelle Antwort, Keldorn!
Habe jetzt gesehen, dass du schon öfter bei diesem Thema helfen konntest. Noch einmal zu mir: Habe mich jetzt schon von dem Drawgrid gelöst, und denke, dass es nur mit einem Stringgrid gehen kann.
Wie gesagt, in dem STRINGGRID befinden sich Noten, ca 35 Schüler (Zeilen) mit je ca. 15 Noten (Spalten). Die 5en und 6en sollen rot eingefärbt werden. Die Daten werden problemlos vorher aus einem DBGrid in das Stringgrid eingelesen.
Wie kann ich die einzelnen Zellen ansprechen (For-Schleifen?) und so die benötigte Aktion jeweils auslösen?
Danke für weitere Hilfe,
Detlef Annies :?
Keldorn - Sa 24.07.04 10:35
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if gdfixed in state then exit; with sender as Tstringgrid do begin if (cells[acol,arow]='5') or (cells[acol,arow]='6') then canvas.Brush.Color := clred else canvas.Brush.Color := clWindow; canvas.fillrect(rect); canvas.textout(rect.Left+2,rect.Top+2,cells[acol,arow]); end; end; |
ondarwcell wird immer ausgelöst, wenn sich die zelle ändert, du brauchst das nicht extra auslösen
Mfg Frank
D. Annies - Sa 24.07.04 12:11
Hallo, Frank!
Dein Code war voll der Bringer!! 8) :lol: 8)
Genauso sollte es funktionieren! Interessant dein Hinweis mit acol, arow statt col, row!
Vielen Dank, es war dein 1200. Beitrag
Detlef Annies :idea:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!