Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Pointer in einen Array


opfer.der.genauigkeit - Mi 27.11.02 12:57
Titel: Pointer in einen Array
Ich habe über Metatypen einen Array definiert.
Dieser ist in einer Unit ausgelagert.


Quelltext
1:
2:
3:
4:
unit uFunctionWork;
type
  TClass = class of TForm;
  TFormtypes = Array[0..4] of TClass;


Ich habe im fsMDIForm (es handelt sich bei dem Programm um MDI) in den Array die Kinder geschrieben (also TForm1, TForm2 etc.) undzwar so:


Quelltext
1:
2:
3:
4:
5:
6:
unit wGrundform;
var
  Formtype : TFormtypes;
begin
  Formtype[1] := TForm1;
end;


usw...
Hintergrund zum Ganzen:
Ich möchte eine MDI-Applikation schreiben, ohne zirkuläre Refferenzen.
Funktioniert auch alles wunderbar und schön. Is mir aber noch nicht kompliziert genug. :mrgreen:

Eigentlich möcht ich das ganze mit Pointern machen.

In etwa so:


Quelltext
1:
2:
3:
4:
5:
6:
unit uFunctionWork;
type
  TClass = ^TForm;
  TFormTypeArray = array[1..4] of TClass;
var
  Formtype : TFormtypes;



Und den Teil in dem ich in den Array schreiben möchte sollte in etwa so aussehen:


Quelltext
1:
2:
3:
4:
5:
6:
unit wGrundform;
var
  p : TClass;
begin
  p^.Formtype[1] := TForm1;
end;


Das Problem ist, das Formtype nicht mehr erkannt wird bzw.
ich den Pointer garnicht auf den Array refferenzieren kann.

Ich hoffe irgendjemand hat ne Lösung.

Thx im Vorraus.


Udontknow - Mi 27.11.02 13:34

Zitat:
Eigentlich möcht ich das ganze mit Pointern machen.


Verstehe ich nicht ganz. TClass ist doch bereits ein Zeiger, nämlich auf eine Klasse, genauso wie TObject ein Zeiger auf eine Klasseninstanz ist.

Überhaupt solltest du das nicht TClass nennen, denn TClass wird in Delphi bereits als "class of TObject" definiert. Also lieber "TFormType=class of TForm" und "TFormTypes=Array of TFormType".
Cu,
Udontknow


opfer.der.genauigkeit - Mi 27.11.02 13:59

Daß das andere Pointer sind ist mir schon klar,
aber ich wollte Pointer bei Form1 etc. benutzen.
Bei der Initialisierung also.


Udontknow - Mi 27.11.02 14:25

Wie, Pointer bei Form1 etc. ? Was ist das für eine Beschreibung?

Zitat:
In etwa so:

Code:

unit uFunctionWork;
type
TClass = ^TForm;
TFormTypeArray = array[1..4] of TClass;
var
Formtype : TFormtypes;


In etwa? Wass nun, TFormTypeArray oder TFormTypes?

Zitat:
Und den Teil in dem ich in den Array schreiben möchte sollte in etwa so aussehen:

Code:

unit wGrundform;
var
p : TClass;
begin
p^.Formtype[1] := TForm1;
end;


Aha. Wieso versuchst du, einen TClass-Zeiger zu dereferenzieren, und dann ein Array anzusprechen? Selbst wenn es zu keinem Konflikt mit der Delphi-Definition "tclass=class of Tobject" kommt, ist doch nach deiner Def TClass=^TForm, also ein Zeiger auf einen Zeiger auf eine Klasse. Nix Array!

Versuche erst mal, ein wenig Ordnung in dein System zu bringen.

Cu,
Udontknow


Udontknow - Mi 27.11.02 14:28

Wo es mir gerade einfällt: Vielleicht nimmst du für solche Zwecke einfach TClassList.

Cu,
Udontknow


opfer.der.genauigkeit - Mi 27.11.02 14:54

Zitat:
In etwa? Wass nun, TFormTypeArray oder TFormTypes?


War n Tipfehler sollte TFormTypeArray heißen.

Zitat:
...also ein Zeiger auf einen Zeiger auf eine Klasse.


Jetzt weiß ich, was da nicht gestimmt hat. *ggg*