Entwickler-Ecke

Windows API - Variablen (records) zur Laufzeit erstellen


alexschultze - Sa 26.10.02 20:27
Titel: Variablen (records) zur Laufzeit erstellen
hi

ich will eine Variable (einen Record) 'variabel' erstellen, also in einer Prozedur deklarieren, und nicht im 'var' Bereich.

Der Name sollt auch variabel machbar sein.

(kann man das mit array's machen? Kann man den Inhalten in Array's z.b. Namen geben und diese über diese Namen abrufen?

Habe das Array Kapitel im Delphi-Buch überpsrungen *schäm*

alex


DeCodeGuru - Sa 26.10.02 20:30

nimm einfach ein Dynamische Array.

Hier mal ein Beispiel:


Quelltext
1:
2:
3:
4:
5:
6:
var
  MyArray: array of MyRecord;
begin
  SetLength(MyArray, 3); // neue Länge des Arrays zuweisen
  MyArray[1].Wasweisich := 'Hahaha';
end;


Ich hoffe, dass dir das hilft.


alexschultze - Sa 26.10.02 20:40

wieso eine Größe festlegen?
(des arrays)
ich weiß nicht wieviele records da reinkommen werden.
Soll ich dort für unendlich viele einfach 9999 reintippen?
Irgendwie ist das ganze außerdem irgendwie unübersichtlich:
MyArray[1].Wasweisich := 'Hahaha';

myArray ist der Array. Klaro. Warum aber zwei Definitionen? (Wasweisich und [1] ???

z.b. in meinem record ist simpel eine Integer und ein String.
Wie kann ich diese dort reinbringen?


DeCodeGuru - Sa 26.10.02 21:02

du kannst ja auch ne Integer-Variable nehmen, in der du dann die aktuelle Größe des Arrays speicherst.

Dann kannste mit

Quelltext
1:
2:
3:
4:
SetLength(MyArray, Anzahl+1);
...
...
Inc(Anzahl);

die Anzahl deiner Records immer wieder erhöhen.

ein Beispiel:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
type
  MyRecord = record
    FInt: Integer;
  end;

var
  Anzahl: Integer;
  MyArray: Array of MyRecord;

procedure AddRecord(NewInt: Integer);
begin
  SetLength(MyArray, Anzahl +1);
  with MyArray[Anzahl +1] do
  begin
    FInt := NewInt;
  end;
  Inc(Anzahl);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddRecord(123);

  ShowMessage(IntToStr(Anzahl));
end;


Vielleicht hilft dir das :wink:


alexschultze - Sa 26.10.02 21:08

gut gut.

der record würde einen dynamischen Namen haben. Könnte ich nicht mithilfe der Nummer des Records im Array, sondern mithilfe des Namen des records darauf zugreifen?

Ich komme übrigens nochmal auf die Variablen zurück. Kann ich eine Integer während der Laufzeit einfach so erstellen?


O'rallY - Do 31.10.02 16:23

Anmerkung:
DeCodeGuru hat folgendes geschrieben:
du kannst ja auch ne Integer-Variable nehmen, in der du dann die aktuelle Größe des Arrays speicherst.

Dann kannste mit

Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
SetLength(MyArray, Anzahl+1);
...
...
Inc(Anzahl);


die Anzahl deiner Records immer wieder erhöhen.



'tschuldige, aber das ist eigentlich unnötig, da man mit Length(AnArray); die Länge des übergebenen Arrays herausfinden kann, also wäre das Gleiche so möglich:

Quelltext
1:
SetLength(MyArray, Length(MyArray) + 1);                    


Edit: miese kleine Rechtschreibfehler gefunden