Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi zweidimensionales Array von Shapes durch button färben (https://www.delphipraxis.net/131561-zweidimensionales-array-von-shapes-durch-button-faerben.html)

Klausi0815 26. Mär 2009 16:13


zweidimensionales Array von Shapes durch button färben
 
Hallo,
ich habe ein zweidimensionales dynamisches Array of Tshape erstellt. Dazu habe ich auch dynamisch Buttons erstellt (array of Tbutton). Jetzt möchte ich per onclick auf den Button das letzte Shape der Reihe färben, wenn es nicht schon gefärbt ist. meine Procedure klappt zwar, aber es werden immer mehrere Shapes gefärbt, aber es soll immer nur das letzte gefärbt werden, wenn es weiß ist. ich hoffe es war verständlich.

Ich hoffe ihr könnt mir sagen was ich an der procedure ändern soll, damit es klappt.
Danke schonmal

Delphi-Quellcode:
 Procedure zeichnen;
 var x,y,m,breite,hoehe,links :integer;

  begin

  i:=0;
  Breite := 60;
  Hoehe := 60;

  Panel1:=TPanel.Create(Form1);
  panel1.Parent:=Form1;
  panel1.Top:=50;
  panel1.Left:=50;
  panel1.Height:=hoehe*k+k*2;
  panel1.Width:=breite*p+p*2;
  panel1.Color:=clblue;


  setlength(Myshapes,k,p);
     for x:= 0 to high(Myshapes) do
    begin
  for y:=0 to high(Myshapes[x]) do
  begin
   Myshapes[x][y]:=TShape.Create(Panel1);
   myshapes[x][y].Shape:=stCircle;
   myshapes[x][y].Parent:=Panel1;
   myshapes[x][y].Top:=x*(Breite+2);
   myshapes[x][y].left:=y*(Hoehe+2);
   myshapes[x][y].width:= breite;
   myshapes[x][y].height:=hoehe;
   myshapes[x][y].Brush.Color:=clwhite;
   myshapes[x][y].OnMouseDown:=Form1.klick;
   end;
    end;
      setlength(Mybutton,p);
 links:=1;
 for m:= 0 to high(Mybutton) do
  begin
   mybutton[m]:=TButton.Create(Form1);
   mybutton[m].Parent:=Form1;
   mybutton[m].top:=25;
   mybutton[m].left:=62*links-12;
   mybutton[m].width:=62;
   mybutton[m].height:=25;
   mybutton[m].Font.Size:=8;
   mybutton[m].caption:='hier';
   mybutton[m].Tag:=i;
   inc(links);
   inc(i);
   mybutton[m].onclick:=form1.mybuttonclick;
   end;

      end;

procedure TForm1.mybuttonclick(Sender: TObject);  //// 
Var
n :integer;
y : integer;
x: integer;
Helfer : TButton;
begin

Helfer := TButton(Sender);
x:=high(myshapes);
y:=Helfer.Tag;
for n:=0 to high(mybutton) do
begin
If myshapes[x][y].Brush.Color = clwhite then
myshapes[x][y].Brush.Color:=clyellow else
x:=x-1;
if x<0 then x:=0;
end;

DeddyH 26. Mär 2009 17:13

Re: zweidimensionales Array von Shapes durch button färben
 
Ich bin mir nicht sicher, ob ich Dich richtig verstanden habe. Könntest Du vielleicht mal 2 Screenshots posten (gewollt und tatsächlich), damit man sich das besser vorstellen kann?

cherry 26. Mär 2009 17:28

Re: zweidimensionales Array von Shapes durch button färben
 
Mal ins Blaue geraten: Kann es sein das es daran liegt, dass deine Shapes alle gleich heissen?! :gruebel:

Klausi0815 26. Mär 2009 17:35

Re: zweidimensionales Array von Shapes durch button färben
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,
also die Shapes heißen nicht alle gleich.

Screenshot:

Er zeigt wass passiert, wenn ich einmal geklickt habe auf den Button über der Spalte.

Es sollte aber nur der untere gefärbt werden, und falls dieser schon gefärbt ist, sollte der nächst Höhere gefärbt werden..

ich hoffe man konnte es jetzt verstehen, falls nicht, versuche ich es nochmal anders zu erklären.

Danke

DeddyH 26. Mär 2009 17:48

Re: zweidimensionales Array von Shapes durch button färben
 
Hoffentlich denke ich jetzt richtig:
Delphi-Quellcode:
procedure TForm1.mybuttonclick(Sender: TObject);  ////
Var
  y : integer;
  x: integer;
  Helfer : TButton;
  WasWhite: Boolean;
begin
  Helfer := TButton(Sender);
  x := high(myshapes);
  y := Helfer.Tag;
  repeat
    WasWhite := false;
    If myshapes[x][y].Brush.Color = clwhite then
      begin
        myshapes[x][y].Brush.Color := clyellow;
        WasWhite := true;
      end  
    else
      x := x-1;
  until WasWhite or (x < 0);
end;

Klausi0815 26. Mär 2009 17:52

Re: zweidimensionales Array von Shapes durch button färben
 
Perfekt!
Genau das habe ich gewollt.
Vielen Dank dafür.
Gruß

shmia 26. Mär 2009 18:10

Re: zweidimensionales Array von Shapes durch button färben
 
Du solltest anstelle unzähliger Shapes und Buttons ein TDrawGrid benützen!
Damit reduziert die Materialschlacht auf sehr übersichtlichen Code.
Du brauchst wie gesagt ein TDrawGrid und 3 Bitmaps.
Bitmap 1: leeres Feld
Bitmap 2: Feld mit Stein von Spieler A
Bitmap 3: Feld mit Stein von Spieler B
Durch die Verwendung von Bitmaps kannst du deinem 4-Gewinnt natürlich auch eine ganz spezielle
Optik geben.
Z.B eine 3D-Optik wie hier: http://karrierebibel.de/wordpress/wp...7/4gewinnt.PNG
oder vielleicht ein "black Gothic look".

PS: ich hoffe nur, dass meine Anregungen nicht ungehört verhallen...
Von "Perfekt" bist du noch weit entfernt.

Klausi0815 26. Mär 2009 18:22

Re: zweidimensionales Array von Shapes durch button färben
 
Das es perfekt ist, habe ich auch nicht behauptet. Perfekt sollte lediglich auszudrücken, dass es genau das ist, was ich machen wollte.
Die Anregung mit dem TDrawgrid ist nett gemeint, jedoch würde ich gerne meine Ideen zu ende führen. Wenn ich damit fertig bin, probiere ich es auf deine Art shmia.

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 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