AGB  ·  Datenschutz  ·  Impressum  







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

Schleife für Klassennamen

Ein Thema von Jibiel · begonnen am 1. Nov 2006 · letzter Beitrag vom 1. Nov 2006
Antwort Antwort
Jibiel

Registriert seit: 9. Jul 2006
15 Beiträge
 
#1

Schleife für Klassennamen

  Alt 1. Nov 2006, 16:48
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:
procedure TMain.SchneeTimer(Sender: TObject);
begin

Schnee.Interval := 50;

Schnee1.Zeichnen;
Schnee2.Zeichnen;
Schnee3.Zeichnen;
Schnee4.Zeichnen;
end;
Deshalb möchte ich eine Schleife benutzen, um die endlose Schreiberei zu vermeiden:

Delphi-Quellcode:
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;
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?

Vielen Dank im voraus :>

Jibi
:>
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Schleife für Klassennamen

  Alt 1. Nov 2006, 16:50
Delphi-Quellcode:
var Schnee: Array of TSchnee;

for i:= 0 to High(Schnee) do
begin
 //ka
end;
Ich würds mit nem Array machen...

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Schleife für Klassennamen

  Alt 1. Nov 2006, 16:52
Hallo,

ich würde TList benutzen.
Die hat den Vorteil, das sie automatisch grösser wird.


Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Schleife für Klassennamen

  Alt 1. Nov 2006, 17:09
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#5

Re: Schleife für Klassennamen

  Alt 1. Nov 2006, 17:29
Zitat von mkinzler:
Delphi-Quellcode:
for i:= 1 to 4 do
begin
    Form.FindComponent('Schnee'+inttostr(i) as TSchnee).Zeichnen;
end;
Und was ist, wenn Schnee keine Komponente ist? Immerhin geht es aus dem Codebeispiel nicht heraus ob es eine Komponente auf der Form ist oder nicht...


Flare

//Edit: Geschlechtsneutraler vormuliert
Willy Scheibel
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Schleife für Klassennamen

  Alt 1. Nov 2006, 17:31
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!
Markus Kinzler
  Mit Zitat antworten Zitat
Jibiel

Registriert seit: 9. Jul 2006
15 Beiträge
 
#7

Re: Schleife für Klassennamen

  Alt 1. Nov 2006, 17:51
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:
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;
Hier das Beispiel für die Array-Lösung. Was mach ich falsch?

[Fehler] mMain.pas(201): Inkompatible Typen: 'TSchnee' und 'String'


*wink* Jibi
:>
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Schleife für Klassennamen

  Alt 1. Nov 2006, 18:04
Hallo Jibi,
Du hast das wohl falsch verstanden, gemeint war:

Erzeugen:
Delphi-Quellcode:
var
    Schnee = Array of TSchnee;
    i: Integer;
begin
    setLength( Schnee, 100);
    for i := 0 to 99 do
    begin
       Schnee[i] := TSchnee.Create( ...);
       ...
    end;
Zeichnen:
Delphi-Quellcode:
  for i := 0 to 99 do
    begin
       Schnee[i].Zeichnen;
       ...
    end;
[/delphi]
Markus Kinzler
  Mit Zitat antworten Zitat
Jibiel

Registriert seit: 9. Jul 2006
15 Beiträge
 
#9

Re: Schleife für Klassennamen

  Alt 1. Nov 2006, 21:27
Danke euch allen, es klappt endlich D

Wer mal mein Projekt sehen möchte: http://jibichan.ji.funpic.de/PHaus.exe

Ist noch lang nicht fertig, aber wird schon noch^^


*alle mal drück* :>
:>
  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 07:08 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