Hallo,
naja, dass
Self
nichts mit der Variable zu tun hat wurde ja schon erklärt.
Zitat:
Es soll Buttons als eine Art Auswahl enthalten, von denen aus weitere Childfenster angezeigt werden können. Jedes Childfenster soll aber nur einmal angezeigt werden können.
Das könntest Du vielleicht so hinbiegen (pack folgendes in eine eigene
Unit [im Folgenden mal sap.pas]):
Delphi-Quellcode:
function CreateForm (const FormClass : TCustomFormClass) : TCustomForm;
begin
Result := FormClass.Create (Application.MainForm)
end;
function FindComponentByClass (const Component : TComponent; const ComponentClass : TComponentClass) : TComponent;
var
i : Integer;
c : TComponent;
begin
Result := nil;
for i := 0 to Component.ComponentCount - 1 do
begin
c := Component.Components [i];
if c is ComponentClass then
begin
Result := c;
Break
end
end
end;
procedure ShowMDIForm (const FormClass : TCustomFormClass);
var
c : TComponent;
f : TCustomForm;
begin
c := FindComponentByClass (Application.MainForm, FormClass);
if Assigned (c) then
f := TForm (c)
else
begin
f := CreateForm (FormClass);
if not Assigned (f) then
// Do whatever you want if it fails
end;
if f.WindowState = wsMinimized then
f.WindowState := wsNormal
else
f.BringToFront
end;
In den Formularen dann jeweils ein:
Delphi-Quellcode:
procedure TFormX.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree
end;
Und an den Stellen an denen ein weiteres MDIChild angezeigt werden soo
Delphi-Quellcode:
uses
sap.pas;
procedure TFormY.ButtonClick(Sender: TObject);
begin
ShowMDIForm (TFormX)
end;
Gruß