AGB  ·  Datenschutz  ·  Impressum  







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

DrawCell mit Button

Ein Thema von Takurom · begonnen am 1. Mai 2012 · letzter Beitrag vom 1. Mai 2012
Antwort Antwort
Takurom

Registriert seit: 1. Mai 2012
2 Beiträge
 
#1

DrawCell mit Button

  Alt 1. Mai 2012, 21:50
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DrawCell mit Button

  Alt 1. Mai 2012, 21:58
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
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: DrawCell mit Button

  Alt 1. Mai 2012, 22:14
So funktioniert das nicht.
Wenn sich in einem Drawgrid etwas ändern soll, dann muss man Drawgrid1.Invalidate; aufrufen damit das Grid neu gezeichnet wird.
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] = 'Xthen
      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;
  Mit Zitat antworten Zitat
Takurom

Registriert seit: 1. Mai 2012
2 Beiträge
 
#4

AW: DrawCell mit Button

  Alt 1. Mai 2012, 22:59
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:
if gdSelected in State then
        with Sender as TDrawGrid do
        begin
          DG.Canvas.Draw(rect.left,rect.top,Zahl1.Picture.Bitmap);
        end;
wenn ich es damit allerdings versuch, ist immer nur eins sichtbar und das vorhergehende wird wieder gelöscht.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: DrawCell mit Button

  Alt 1. Mai 2012, 23:22
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:
var
  minesweeperfeld : array[1..9, 1..9] of Integer;
Das Grundprinzip ist nun, dass du bei einem Mausklick das minesweeperfeld[] veränderst und vom Drawgrid neu zeichnen lässt.

Geändert von sx2008 ( 1. Mai 2012 um 23:26 Uhr)
  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 10:02 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