![]() |
Stringgrid Felder bei Formcreate färben
Hallo
Also ich hatte vor ein kleines Spiel zu schreiben. In einer Multidimensionellen Array ist die Map eingetragen Auf 0 kann man gehen auf -1 nicht. Nun wollte ich dass wenn das Spiel startet (also form.create) dass alle Felder mit 0 als Inhalt Grün gefärbt werden und alle mit -1 Rot. Ich hab schon 2 stunden dran gesessen und hab auch schon genug gegoogelt nur find ich nicht wirklich eine passende Lösung. |
Re: Stringgrid Felder bei Formcreate färben
Nicht beim Erzeugen der Form, sondern beim Zeichnen (OwnerDraw; onDrawCell)
|
Re: Stringgrid Felder bei Formcreate färben
ok das hab ich zwar auch versucht
aber irgendwie läuft bei mir etwas schief
Delphi-Quellcode:
wenn ich das somache kommt ein komisches resultat raus.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var i,j:integer; begin for i:=0 to 9 do begin for j:=0 to 9 do begin form1.stringgrid1.Cells[i,j]:=IntToStr(map[i,j]); if(map[i,j]=-1)then begin stringgrid1.Canvas.Brush.Color:=clred; stringgrid1.Canvas.FillRect(Rect); end else begin stringgrid1.Canvas.Brush.Color:=clgreen; stringgrid1.Canvas.FillRect(Rect); end; end; end; end; Ich hab echt keine Ahnung wie ich es anstellen soll. |
Re: Stringgrid Felder bei Formcreate färben
Du brauchst keine Schleife.
Das OnDrawCell Ereignis wird schon für jede Zelle aufgerufen, welche neu gezeichnet werden soll. |
Re: Stringgrid Felder bei Formcreate färben
oh wie dumm -.-
Also es läuft jetzt Nur es sieht bisschen unschön aus. Durch das ganze geOnDrawed sieht man überall linien. Kann man das irgendwie umgehen ausschalten oder sonst was? |
Re: Stringgrid Felder bei Formcreate färben
Was für Linien?
|
Re: Stringgrid Felder bei Formcreate färben
also sieht so aus wenn eine szene dauernd neugezeichnet werden würde
man kann es nicht screenshoten. Sieht aber hässlich aus. Und noch eine kleine Nebenfrage: Man sieht ja auf dem Stringgrid auf welcher Zelle man sich grade befindet(Nicht Focus sonder gestrischelte Kiste). Kann man das auch irgendwie wegschaffen? |
Re: Stringgrid Felder bei Formcreate färben
Zitat:
Ist DefaultDrawing aktiv? |
Re: Stringgrid Felder bei Formcreate färben
also es kommen diese Linien weil ich in die Stringgrid die -1 0 und 2(für die position des Spielers) hineinschreibe.
Das scheint Die Stringgrid nicht zu mögen. Wie genau stelle ich das mit dem State ein? |
Re: Stringgrid Felder bei Formcreate färben
Das ist nichts zum Einstellen, sondern sagt dir ob, die aktuell gezeichnete Zelle markiert ist.
|
Re: Stringgrid Felder bei Formcreate färben
Liste der Anhänge anzeigen (Anzahl: 1)
hm also ich meinte wie man es wegmachen kann
im attachment liegt ein screenshot davon was ich meine. |
Re: Stringgrid Felder bei Formcreate färben
Schalte DefaultDrawing ab.
|
Re: Stringgrid Felder bei Formcreate färben
Liste der Anhänge anzeigen (Anzahl: 1)
Super hatt geklappt vielen Dank
Hab da noch ein Problem:
Delphi-Quellcode:
So sieht meine Map Array aus.map:array[0..9,0..9] of integer = ((-1,-1,-1,-1,-1,-1,-1,-1,-1,-1), //0 (-1, 0, 0, 0, 0, 0, 0, 0 ,0,-1), //1 (-1, 0, 0, 0, 0, 0, 0, 0, 0,-1), //2 (-1, 0,-1,-1, 0, 0, 0, 0, 0,-1), //3 (-1, 0,-1, 0, 0, 0, 0, 0, 0,-1), //4 (-1, 0, 0, 0, 2, 0, 0, 0, 0,-1), //5 (-1, 0, 0, 0, 0,-1,-1,-1, 0,-1), //6 (-1, 0,-1,-1,-1, 0, 0, 0, 0,-1), //7 (-1, 0, 0, 0, 0, 0, 0,-1, 0,-1), //8 (-1,-1,-1,-1,-1,-1,-1,-1,-1,-1)); //9 Aber irgendwie zeichnet er das Feld auf die Stringgrid um 90 grad gedreht. Im Attachment kann man es nachschauen.
Delphi-Quellcode:
so sieht der OnDrawCell aus
procedure TfrmMapMv.sgMapDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var i,j:integer; begin if(map[ACol,ARow]=-1)then begin sgMap.Canvas.Brush.Color:=clred; sgMap.Canvas.FillRect(Rect); end; if(map[ACol,ARow]=0)then begin sgMap.Canvas.Brush.Color:=clgreen; sgMap.Canvas.FillRect(Rect); end; if(map[ACol,ARow]=2)then begin sgMap.Canvas.Brush.Color:=clblue; sgMap.Canvas.FillRect(Rect); end; end; |
Re: Stringgrid Felder bei Formcreate färben
Tausche mal die Dimensionen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 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