Autor Beitrag
lilalaunebaer
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.12.02 17:20 
Hallo !

Es ist für Freaks sicher leicht zu beantworten, aber ich komme mal wieder nicht drauf.

Ich habe eine MDI-Anwendung und der ich recht viele MDIChilds benutze.
Da der Rahmen für den Aufruf immer gleich bleibt, habe ich in einer Unit "UCommon" eine Prozedur geschrieben, der die TFormClass und die Referenz übergeben werden, die daraufhin das Child erzeugt. Die Prozedur sieht so aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure CreateMDI(MDIClass : TFormClass; Reference: TPersistent);
begin
 if not assigned(Reference) then begin
  Application.CreateForm(MDIClass, Reference);
  TForm(Reference).Tag := 1;
 end
 else
  TForm(Reference).BringToFront;
end;


Funktioniert auch, aber wenn ich sie von einer anderen Unit aufrufe:
ausblenden Quelltext
1:
2:
3:
4:
procedure TMDIComm.OpenBezirk;
begin
   CreateMDI(TMDIBezirk, MDIBezirk);
end;

MDIComm ist das Formular, von dem ich aufrufe, es benutzt "UBezirke", in der MDIBezirk deklariert ist, beides Formularnamen und durch Delphi 6 auch automatisch die Variablennamen der Class, habe ich auch so gelassen.
Jetzt wird ein Fenster entsprechend der Definiton erstellt, aber die Variable MDIBezirk bleibt danach NIL.
Kann ich mir auch erklären, weil die Definition von CreateForm = procedure CreateForm(FormClass: TFormClass; var Reference);
ist, aber die Deklaration meiner Prozedur oben ohne "var" ist. Wenn ich aber var hineinschreibe, sagt er mir beim Aufruf:
Zitat:
[Fehler] UChoere.pas(133): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen


Toll, dann ich die Variable Reference auf das Object gesetzt, schade, nur wie soll ich ihm denn weismachen, er möge bittesehr auch die Varibale mit der CreateMDI aufgerufen wurde am ende auf Reference setzen ?
Ich kenne bisher nur, sie als CBR mit var festzulegen, dann kommt aber oben genannter fehler.

Vielen Dank für alle Hilfe,