Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Variable zur Laufzeit erstellen (https://www.delphipraxis.net/57384-variable-zur-laufzeit-erstellen.html)

Scorpion 20. Nov 2005 15:11


Variable zur Laufzeit erstellen
 
Hallo,

ich erstelle in meinem Programm meherere Images zur Laufzeit. Das klappt auch wunderbar. Nur weiss man vorher nicht, wieviele Images wirklich gebraucht werden.
Ich kann also keine Variablennamen in den Quellcode schreiben,weil ich nicht weiss wie viele... :(
Aber ohne einen im Quellcode definierten Variablennamen kann ich doch keine Komponente zur Laufzeit erstellen oder ?

Meine Frage also, was kann ich tun oder wie kann man Variablen zur Laufzeit definieren?

Gruß
Nico

leddl 20. Nov 2005 15:13

Re: Variable zur Laufzeit erstellen
 
Du könntest dir zB ein Array of TImage deklarieren.

Scorpion 20. Nov 2005 15:15

Re: Variable zur Laufzeit erstellen
 
Aber da habe ich doch auch eine vordefinierte Anzahl oder ?
Wie könnte das denn aussehen ?

turboPASCAL 20. Nov 2005 15:17

Re: Variable zur Laufzeit erstellen
 
Verwende ein Array zB.
Zitat:

var MyImages: Array of TImages
dann kannst du mit SetLength(MyImages, ...) die Anzahl der zu verwend. Images einstellen.

Der_Unwissende 20. Nov 2005 15:19

Re: Variable zur Laufzeit erstellen
 
Zitat:

Zitat von Scorpion
Nur weiss man vorher nicht, wieviele Images wirklich gebraucht werden.
Ich kann also keine Variablennamen in den Quellcode schreiben,weil ich nicht weiss wie viele... :(

Hi,
du kannst durchaus ein Image auch relativ annonym erstellen, aber das wäre wohl kaum das was du wirklich suchst. Am einfachsten ist es du schaust dir Datentypen an, deren Größe nicht zur Designzeit feststehen muss. Dazu gehören dynamische Arrays und Listen.
Ich persönlich würde dir zu Listen raten, da musst du dich weniger um die Anpassung der Größe ändern, dass übernimmt die Kapselung für dich. Schau einfach mal unter TObjectList in der Delphi Hilfe nach.

Ach als kleiner Tip vorweg, wenn du etwas aus der TObjectList holst, musst du es danach casten
Delphi-Quellcode:
var list : TObjectList
    image : TImage;
begin
  list := TObjectList.Create;
  list.Add(TImage.Create(nil));
  image := TImage(list.get(0));
  ....
  ....
end;
Grobes nicht überprüftes oder durchdachtes Beispiel, soll nur grob zeigen wie es geht, kann mich aber irren was die Syntax angeht. Jedenfalls kannst du es grob in der Richtung machen. Du solltest allerdings aufpassen, dass du die angelegten Images auch irgendwann wieder freigeben müsstest. Sonst müllst du dir ganz schnell deinen Speicher zu.

Gruß Der Unwissende

leddl 20. Nov 2005 15:24

Re: Variable zur Laufzeit erstellen
 
Zitat:

Zitat von Scorpion
Aber da habe ich doch auch eine vordefinierte Anzahl oder ?
Wie könnte das denn aussehen ?

Kommt drauf an, wie du es deklarierst.
Delphi-Quellcode:
myStaticImageArray : Array[1..x] of TImage;
wäre ein statisches Array, das immer x Elemente besitzt. Da kannst du an der Anzahl auch nichts mehr ändern.
Deklarierst du dein Array aber dynamisch
Delphi-Quellcode:
myDynamicImageArray : Array of TImage;
so kannst du zur Laufzeit jederzeit die Größe deines Arrays bestimmen.
Dazu mußt du beim Hinzufügen eines neuen Elementes immer die Länge des Arrays über
Delphi-Quellcode:
SetLength(myDynamicImageArray,newLength);
festlegen. (Wie turboPASCAL ja auch schon geschrieben hat).
Dabei solltest du beachten, daß dynamische Arrays 0-basiert sind - also das erste Element den Index 0 hat - und bis Length-1 laufen.

//Edit:
Und TObjectList ist natürlich auch eine gute Alternative

Scorpion 20. Nov 2005 15:29

Re: Variable zur Laufzeit erstellen
 
Hallo,

vielen Dank...

@leddl: Bei deiner Variante sagt er immer beim Eintragen in das Array... Unbekannte Variable.

@Der_Unwissende: Bei dir fragt sich der Quellcode was eine TObjectList sei?

Gruß Nico

ichbins 20. Nov 2005 15:31

Re: Variable zur Laufzeit erstellen
 
dynamische Arrays gehen erst ab D7...

dir wird nur eine Liste übrigbleiben. oder aber ein Update auf D7.

malo 20. Nov 2005 15:33

Re: Variable zur Laufzeit erstellen
 
Zitat:

Zitat von Scorpion
@leddl: Bei deiner Variante sagt er immer beim Eintragen in das Array... Unbekannte Variable.

Zeig doch mal bitte deinen Quelltext. Also die Zeile, wo der Fehler ist...

Zitat:

@Der_Unwissende: Bei dir fragt sich der Quellcode was eine TObjectList sei?
Wenn du in der OH nach Delphi-Referenz durchsuchenTObjectList schaust, wirst du feststellen, dass dir die Unit Contnrs fehlt. Die muss oben in der Uses-Klausel hinzugefügt werden.

leddl 20. Nov 2005 15:34

Re: Variable zur Laufzeit erstellen
 
Zitat:

Zitat von Scorpion
@leddl: Bei deiner Variante sagt er immer beim Eintragen in das Array... Unbekannte Variable.

Was für eine Variable? Auf die einzelnen Elemente des Arrays greifst du über
Delphi-Quellcode:
myDynamicImageArray[x]
zu. Oder meinst du "NewLength" bei meinem Aufruf von SetLength? Da mußt du natürlich die neue Länge des Array eintragen (Vorsicht, 0-basiert!)
Zitat:

Zitat von Scorpion
@Der_Unwissende: Bei dir fragt sich der Quellcode was eine TObjectList sei?

Schau doch einfach mal in die OH. Sehr wahrscheinlich mußt du dafür ne extra Unit einbinden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 Uhr.
Seite 1 von 3  1 23      

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