PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Delphi: initialization


Elladan
2005-04-03, 12:49:38
Hi, ich habe im initialisations-brereich in Delphi folgenden Code:


type
TBall = class
x,y,z: integer;
end;
(...)
const
ballzahl = 3200;

var
ball: array[0..ballzahl] of tball;

(...)

initialization
Randomize;
for i:= 0 to ballzahl do ball[i]:= tball.Create;

end.

Problem an der Sache: wie kann ich im initialisierungsbereich eine lokale Variable definieren?
Funktionieren tut es zwar auch mit einer globlaen Variable i, aber eine Warning-Meldung beim compilieren ist auf Dauer einfach nervig (erst recht bei einem dutzend solcher Objekte).

Gruß,
Elladan.

Gast
2005-04-07, 10:22:27
keiner eine Idee?

Gast121212
2005-04-07, 15:29:56
Du kannst doch alternativ tball als 'record' definieren und nicht als 'class'. Dann fällt das initialisieren weg.

icemanemp
2005-04-08, 08:22:54
Wenn deine Klasse keine Methoden hat, dann reicht auch ein Record.
Wenn du eine Klasse verwenden willst würde ich ne Objectlist zu Verwaltung benutzen und kein Array.
Würde nie etwas im Initisierungsteil machen (ausnahmen bei COM-DLLs)... eher im Create deiner Form und wenn du keine Formular hast, dann im im Create einer anderen Klasse, wenn du das auch nicht hast, dann in einem Event oder Methode einer anderen Klasse und wenn du gar keine andere Klasse hast, weil du ein Kommandozeilenprog machst, dann würd ich das in einer Prozedur aufrufen, aber Initilisierungsteil ist doch sonst uninteressant, da du ja auch auf ne lokal Variabel zugreifen willst...

Elladan
2005-04-08, 13:55:37
Ist es möglich, dass bei record anstelle einer class sich keine proceduren mehr in dieser definieren lassen?

Danke für die Tipps - aber wenn es so wäre, würde ich bei meiner bisherigen Methode bleiben...

nur suche ich dann noch die Möglichkeit, im initialisierungs-Teil eine lokale Variable zu definieren... :confused:

icemanemp
2005-04-10, 10:49:54
Natürlihc lassen sich keine Methoden mehr in einem Record definieren, da ein Record ein art eigener zusammengestellerter Datentyp ist und eine Klasse etwas völlig anderes! Die Klasse kapselt Daten und Methoden um auf diese zuzugreifen bzw. diese zu bearbeiten!

Also würdest du bei deiner Methode bleiben müssen (so wie du es sagtst), aber mit den lokalen Variablen kannst dir abschminken, den eine lokale Variable ist nicht sichtbar ausserhalb der Unit, sondern nur innerhalb einer einzigen Prozedur bzw. Funktion! Du könntest doch eine Procedure schreiben, die die die Variable lokal initialisiert, so wie du es haben willst und die übergibst Sie deiner anderen Procedure, dort wo diese gebraucht wird oder schreibt nur eine Funktion/Procedure, die die lokale Varibale initailisiert.

ABer ich denke nicht, das die das weiter helfen wird. Da ich glaub das dein Denkansatz falsch ist. Deine lokale Variable würde soblad die Funktion verlassen wird wieder zersört sein... da ich nicht weiss was du genau machen willst ist das schwer zu sagen.

Elladan
2005-04-10, 13:39:25
Natürlihc lassen sich keine Methoden mehr in einem Record definieren, da ein Record ein art eigener zusammengestellerter Datentyp ist und eine Klasse etwas völlig anderes! Die Klasse kapselt Daten und Methoden um auf diese zuzugreifen bzw. diese zu bearbeiten!

Also würdest du bei deiner Methode bleiben müssen (so wie du es sagtst), aber mit den lokalen Variablen kannst dir abschminken, den eine lokale Variable ist nicht sichtbar ausserhalb der Unit, sondern nur innerhalb einer einzigen Prozedur bzw. Funktion! Du könntest doch eine Procedure schreiben, die die die Variable lokal initialisiert, so wie du es haben willst und die übergibst Sie deiner anderen Procedure, dort wo diese gebraucht wird oder schreibt nur eine Funktion/Procedure, die die lokale Varibale initailisiert.

ABer ich denke nicht, das die das weiter helfen wird. Da ich glaub das dein Denkansatz falsch ist. Deine lokale Variable würde soblad die Funktion verlassen wird wieder zersört sein... da ich nicht weiss was du genau machen willst ist das schwer zu sagen.

ah, danke.

Ich wollte mir der lokalen Variable in der initialisation eine for-schleife hochzählen lassen. (vgl. bitte den Quellcode in meinem Anfangspost)
Mit dieser initialisiere ich dann meine class.
Ich weiss halb eben nur nicht, wie ich für diesen Initialisierungsbreich eine lokale Variable definiere (funktionieren tut es auch mit einer globalen, jedoch kommt dann trotzdem die lästige Fehlermeldung, dass eine lokale Variable für die for-Schleife doch besser wäre.
Also letztlich ein rein kosmetisches Problem, es stört nun einmal, wenn diese Meldung mir meine Fehlerliste verstopft (circa 10 mal für 10 verschiedene Klassen). )

Gast
2011-05-31, 14:52:32
Hi, der Thread ist uralt, aber die Loesung einfach:

Innerhalb der Unit:
Procedure Ini;
var I : Integer;
begin
.... mach etwas mit I...
end;

Initialization
Ini;

... und schon geht es!

ScotsMan