Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Fr 23.07.04 21:04 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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 Suche in: Delphi-Forum, Delphi-Library 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
ausblenden 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 24.07.04 10:35 
ausblenden 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);      //bei d3 hier acol und arow schreiben und auch in der dekl. oben in Tform
begin
  if gdfixed in state then exit; ///keine fixierten Zellen
  with sender as Tstringgrid do
    begin
      // wenn benötigt, hier noch ein z.B. if acol>1, wenn die Noten erst in der 2. Spalte stehen
      if (cells[acol,arow]='5'or (cells[acol,arow]='6'then canvas.Brush.Color := clred
                                                          else canvas.Brush.Color := clWindow;
      canvas.fillrect(rect);
      //Text ausgeben, wie du den zentriert ausgibst, steht auch x-mal im Forum
      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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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: