![]() |
Schleife für Klassennamen
Hallo :>
Ich habe ein Projekt angefangen, bei dem Schneeflocken vorkommen. Dafür habe ich die Klasse TSchnee erstellt. Da es sich natürlich um sehr viele Schneeflocken handeln wird, ist dieser Quellcode sehr ungünstig, da ich für jede Schneeflocke je eine Zeile brauche. In der folgenden Prozedur versuche ich die Prozedur TSchnee.Zeichnen aufzurufen:
Delphi-Quellcode:
Deshalb möchte ich eine Schleife benutzen, um die endlose Schreiberei zu vermeiden:
procedure TMain.SchneeTimer(Sender: TObject);
begin Schnee.Interval := 50; Schnee1.Zeichnen; Schnee2.Zeichnen; Schnee3.Zeichnen; Schnee4.Zeichnen; end;
Delphi-Quellcode:
Das kann nur leider nicht funktionieren, da die Variable Flocke ein TObject ist und einen String zugewiesen bekommt. Fällt euch eine Lösung ein?
procedure TMain.SchneeTimer(Sender: TObject);
var i: integer, Flocke : TObject; begin Schnee.Interval := 50; for i:= 1 to 4 do begin Flocke := 'Schnee'+inttostr(1); Flocke.Zeichnen; end; Vielen Dank im voraus :> Jibi |
Re: Schleife für Klassennamen
Delphi-Quellcode:
Ich würds mit nem Array machen... :)
var Schnee: Array of TSchnee;
for i:= 0 to High(Schnee) do begin //ka end; Gruß Neutral General |
Re: Schleife für Klassennamen
Hallo,
ich würde TList benutzen. Die hat den Vorteil, das sie automatisch grösser wird. Heiko |
Re: Schleife für Klassennamen
Im Normalfall sollte ein dynamischer Array, wie in Neutral General vorgeschlagen hat ausreichen. Ihn kann man durch SetLength auch in der Größe anpassen.
Nur zu Vollständigkeit und nicht als Ratschlag:
Delphi-Quellcode:
for i:= 1 to 4 do
begin Form.FindComponent('Schnee'+inttostr(i) as TSchnee).Zeichnen; end; |
Re: Schleife für Klassennamen
Zitat:
Flare //Edit: Geschlechtsneutraler vormuliert :oops: |
Re: Schleife für Klassennamen
Stimmt, ich bib davon augegangen, da0 es eine Komponente ist. hatte aber auch geschriebne das die lösunf mit Arrays/Listen so oder so besser ist!
|
Re: Schleife für Klassennamen
Danke für die vielen Antworten =)
@Flare bin eine Sie^^ Ich hab mir sowohl TList als auch Arrays angeguckt, aber bei mir läuft es immer auf das gleiche raus. Schnee1, Schnee2, ... werden immer nur als strings abgespeichert und ich kann sie dadurch nie als ein Objekt der Klasse TSchnee benutzen.
Delphi-Quellcode:
Hier das Beispiel für die Array-Lösung. Was mach ich falsch?
procedure TMain.SchneeTimer(Sender: TObject);
var i : integer; Flockenarray: Array of TSchnee; begin Schnee.Interval := 50; for i:= 1 to 4 do begin Flockenarray[i-1] := 'Schnee'+'i'; Flockenarray[i-1].zeichnen; end; [Fehler] mMain.pas(201): Inkompatible Typen: 'TSchnee' und 'String' *wink* Jibi |
Re: Schleife für Klassennamen
Hallo Jibi,
Du hast das wohl falsch verstanden, gemeint war: Erzeugen:
Delphi-Quellcode:
Zeichnen:
var
Schnee = Array of TSchnee; i: Integer; begin setLength( Schnee, 100); for i := 0 to 99 do begin Schnee[i] := TSchnee.Create( ...); ... end;
Delphi-Quellcode:
[/delphi]
for i := 0 to 99 do
begin Schnee[i].Zeichnen; ... end; |
Re: Schleife für Klassennamen
Danke euch allen, es klappt endlich :DD
Wer mal mein Projekt sehen möchte: ![]() Ist noch lang nicht fertig, aber wird schon noch^^ *alle mal drück* :> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 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