![]() |
DrawCell mit Button
Guten Abend zusammen,
schonmal entschuldigung, wenn ich die Suche falsch benutzt habe. Ich bin noch ein blutiger Anfänger und möchte durch einen Buttonklick die procedure DrawCell aufrufen. Es wird mit allerdings immer angezeigt, dass es zu wenig Parameter sind und ich auch nicht wirklich weiß was und ob ich noch etwas eintragen muss.
Code:
procedure TSpielfeld.Button1Click(Sender: TObject);
begin Spielfeld.DGDrawCell(Sender: TDrawGrid; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState) end; procedure TSpielfeld.DGDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (ACol = posx) and (ARow = posy) then with Sender as TDrawGrid do begin DG.Canvas.Draw(rect.left,rect.top,Zahl2.Picture.Bitmap); end; end; |
AW: DrawCell mit Button
Beim Aufruf Parameter ohne Typen, dafür mit konkreten Werten ohne Variablen.
Btw. Man sollte nur innerhalb von Paint auf einen Canvas malen, da die Änderungen nach einem Redraw wieder weg sind |
AW: DrawCell mit Button
So funktioniert das nicht.
Wenn sich in einem Drawgrid etwas ändern soll, dann muss man
Delphi-Quellcode:
aufrufen damit das Grid neu gezeichnet wird.
Drawgrid1.Invalidate;
Natürlich muss man vorher etwas am Spielfeld ändern, damit man was sieht.
Delphi-Quellcode:
var
spielfeld : array[1..3, 1..3] of char; // Tic-Tac-Toe procedure TForm1.Button1Click(Sender: TObject); var x ,y : Integer; begin // irgendwelche Figuren setzen x := 1; y := 2; if spielfeld[x,y] = 'X' then spielfeld[x,y] := '*' else spielfeld[x,y] := 'X'; // Neuzeichnen erzwingen DrawGrid1.Invalidate; end; // dieser Eventhandler zeichnet auf dem Drawgrid procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var figur : Char; canvas : TCanvas; begin canvas := DrawGrid1.Canvas; // Zwischenvariable spart Schreibarbeit // Hintergrund zeichnen (kann entfallen, falls Spielfiguren nicht transparent sind) canvas.brush.Color := clGrey; canvas.FillRect(rect); // Spielfigur zeichen figur := spielfeld[ACol-1, ARow-1]; case figur of ' ': ImageList1.Draw(canvas, Rect.Left, Rect.Top, 0); '*': ImageList1.Draw(canvas, Rect.Left, Rect.Top, 1); 'X': ImageList1.Draw(canvas, Rect.Left, Rect.Top, 2); end; end; |
AW: DrawCell mit Button
Schonmal danke für die Antworten.
Ich möchte Minesweeper erstellen und der Button war erstmal nur für mich, um es etwas besser zu verstehen. Ich weiß jetzt, wie ich die Felder "vollmalen" kann. Allerdings, Würde ich noch gerne wissen, wie ich mehrere mit Maus angeklickt Felder mit einem bitmap füllen kann. Ich hab bis jetzt:
Code:
wenn ich es damit allerdings versuch, ist immer nur eins sichtbar und das vorhergehende wird wieder gelöscht.
if gdSelected in State then
with Sender as TDrawGrid do begin DG.Canvas.Draw(rect.left,rect.top,Zahl1.Picture.Bitmap); end; |
AW: DrawCell mit Button
Bei Minesweeper gibt es doch 11 Feldtypen:
* unbekannt (blauer Block) * verdeckte Bombe (sieht genau gleich aus wie unbekannt) * Leer * Fahne * Bombe (*) * Bombe mit Fahne (*) * explodierte Bombe (*) * "1" * "2" * "3" * "4" Also brauchst du 11 Bildchen oder Icons. Die Bildchen haben alle die gleiche Grösse und passen gut in eine TImageList. Dein Spielfeld hat 9*9 Felder (später vielleicht mehr) und jedes Spielfeld kann einen von 11 verschiedenen Werten haben. Die mit (*) markierten Zustände sieht man nur wenn das Spiel zuende ist.
Delphi-Quellcode:
Das Grundprinzip ist nun, dass du bei einem Mausklick das minesweeperfeld[] veränderst und vom Drawgrid neu zeichnen lässt.
var
minesweeperfeld : array[1..9, 1..9] of Integer; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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