AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein arbeiten mit zur Laufzeit Objekten im dynamischen array
Thema durchsuchen
Ansicht
Themen-Optionen

arbeiten mit zur Laufzeit Objekten im dynamischen array

Ein Thema von peacook94 · begonnen am 17. Jan 2010 · letzter Beitrag vom 20. Jan 2010
 
peacook94

Registriert seit: 9. Okt 2009
Ort: Erfurt
3 Beiträge
 
Delphi 7 Professional
 
#1

arbeiten mit zur Laufzeit Objekten im dynamischen array

  Alt 17. Jan 2010, 16:53
Hallo.

das ist hier mein erster Post, aber ich finde zu diesem Problem weder in der Delphi-Hilfe, noch sonst irgendwo im großen weiten Internet eine Antwort. Ich hoffe ihr könnt mir helfen:

Ich habe angefangen ein kleines 2D-Spiel zu programmieren, bei dem zur Laufzeit beliebig viele Label in einem Bereich des Bildschirms zufällig generiert werden. ( Label deswegen, weil sie auf Klicks reagieren )
Diese sollen dann vom Benutzer weggeklickt werden. Der Spieler muss aber schneller wegklicken, als neue dazu kommen. So die Idee.

Aber schon gleich am Anfang liegt das Problem: Beim Erzeugen der Label.

Ich habe das, um Speicher zu sparen und da ich nicht weiß wieviele Label das Programm erzeugen wird, in einem dynamischen array angelegt, sodass in jedem Timerdurchlauf ( die Label werden im Timer generiert ) ein Label erzeugt wird und eine Stelle im array einnimmt.

Delphi-Quellcode:
MyLabels: array of TLabel;
i : integer;
oben,links : integer;
Da ich nicht weiß wieviele Label zur Laufzeit erzeugt werden, habe ich zum "Stellenzählen" eine Zählvariable vereinbart.
Diese wird nun bei jedem durchlauf erhöht und ist vorher auf 0 gesetzt.

Jetzt das Problem:

Delphi-Quellcode:
 procedure TForm1.Timer1Timer(Sender: TObject);
begin
   i := i + 1;
  SetLength(MyLabels,length(MyLabels) + 1);
  MyLabels[i] := TLabel.Create(self);
    MyLabels[i].Parent := Form1;
    MyLabels[i].Show;
    MyLabels[i].Color := clLime;
  repeat // Die Schleife habe ich eingebaut, damit das Label
    oben := random(479); // nur in dem vorgegebenen Bereich auftauchen
    links := random(479);
  until (oben >= 200) and ( links >= 200 );
    MyLabels[i].Top := oben;
    MyLabels[i].Left := links;
end;
Das erste Label wird vorschriftsmäßig erzeugt. Dann tritt allerdings der Fall ein, dass " i " auf 2 erhöht wird. Zu der Zeit sind allerdings noch nicht 2 Objekte vorhanden. Dort kommt er dann durcheinander und produziert Fehlermeldungen ( "Zugrifffsverletzung in Adresse ..." ).
Die Funktion SetLength() danach aufzurufen hat auch nicht funktioniert.
Gibt es eine Möglichkeit diesen Fall zu umgehen

Es Wäre echt nett, wenn mir da jemand helfen könnte. Danke schon im Voraus
  Mit Zitat antworten Zitat
 


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 23:53 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