Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Auf Shapes mit Variablen zugreifen (https://www.delphipraxis.net/187029-auf-shapes-mit-variablen-zugreifen.html)

Niclas 21. Okt 2015 17:44

Auf Shapes mit Variablen zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Ich würde gerne mittels Zählvariable auf einen bestimmten String zugreife.

Meine Variablen (global):
Delphi-Quellcode:
var
  Form1: TForm1;
  n:string;
  i,k,m,z:integer;
  Shape2,Shape:TShape;
Hier der Code von meinem ersten Button (Zum erstellen und zuteilen der Farben der Shapes):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  begin
  m:=0;
  for k:=1 to 5 do
  begin
  for i:=1 to 5 do
      begin
           m:=m+1;
           z:=random(2);
           Shape := TShape.Create(Form1);
                 With Shape do
                     begin
                     Parent := Form1;
                     Left :=(i*30);
                     Top :=(k*30);
                     Width:= 30;
                     Height:=30;
                     if z=1 then brush.color:=clblack;
                     Name := 'Shape' + inttostr(m);
                     end;
      end;
   end;

end;
Der zweite Button (zum löschen der Shapes)
Delphi-Quellcode:
for m:=1 to 25 do
      begin
          Shape2.name:='Shape' + inttostr(m);
          Shape2.Destroy;                  
      end;

      end;
Er compiliert es richtig und ich kann starten, jedoch wenn ich die Shapes erstellt habe und dann den 2. Button drücke, kommt eine Fehlermeldung und das Programm bricht ab. (FM im Anhang)

Könnt ihr mir sagen, warum da eine Fehlermeldung passiert?

LG Niclas :)

Bjoerk 21. Okt 2015 18:09

AW: Auf Shapes mit Variablen zugreifen
 
Logisch, weil du 25 mal Shape2 zerstörst ;)

DeddyH 21. Okt 2015 18:14

AW: Auf Shapes mit Variablen zugreifen
 
Aber erst, nachdem dessen Name angepasst wurde :mrgreen:. Im Ernst: es gibt viele Möglichkeiten, eine davon wäre z.B. Hier im Forum suchenFindComponent. Eleganter fände ich persönlich es aber, wenn man die dynamisch erstellten Shapes in einer geeigneten Liste verwalten würde, z.B. TObjectList oder gleich TComponentList.

Niclas 21. Okt 2015 18:28

AW: Auf Shapes mit Variablen zugreifen
 
Ok, danke . Werde ich mir mal an schauen mit einer Tlist. :D
Aber rein theoretisch müsste meine Variante doch auch gehen oder nicht? Ich versteh leider die Fehlermeldung nicht...

Niclas

mkinzler 21. Okt 2015 18:32

AW: Auf Shapes mit Variablen zugreifen
 
Du hast ein Shape und änderst den Namen und gibtst es dann frei. Anschliessend willst du den Namen des nicht mehr existenten Shapes ein weiteres Mal ändern, was natürlich misslingt.

Niclas 21. Okt 2015 18:54

AW: Auf Shapes mit Variablen zugreifen
 
Also würde
Delphi-Quellcode:
for m:=1 to 25 do
      begin
          Shape2.name:='Shape' + inttostr(m);
          Shape2.Destroy;
 Shape2.name:='';
      end;

      end;
gehen?

Oder so hier?
Delphi-Quellcode:
for m:=1 to 25 do
      begin
          Shape2.name:='Shape' + inttostr(m);
          Shape2.Destroy;
Shape2.TShape.Create;
      end;

      end;
Kann es im Moment leider nicht überprüfen (bin erst Morgen wieder am "Programier-"PC. :mrgreen: )

DeddyH 21. Okt 2015 18:57

AW: Auf Shapes mit Variablen zugreifen
 
Nochmal: Du kannst eine Komponenten-Instanz nicht ermitteln, indem Du derjenigen, die in Deiner Variablen steckt bzw. stecken sollte, einen neuen Namen zuweist. Was Du suchst ist FindComponent, klick doch mal den auf Link in meinem letzten Beitrag.


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