Ich vermute mal, du hast das
MDI- und
OOP-Konzept nicht verstanden ...
MDI =
Multiple Document Interface
Jede MDIChild-FormKlasse kann also mit mehr als einer Instanz in deinem Programm rumschwirren.
Was kümmert dich also die Instanz? Die Klasse ist da wesentlich spannender.
Delphi-Quellcode:
if ActiveMDIChild.ClassType = TForm1 then
TForm1( ActiveMDIChild ).MacheWasGibtsNurInTForm1;
if ActiveMDIChild.ClassType = TForm2 then
TForm2( ActiveMDIChild ).MacheWasGibtsNurInTForm2;
Und wenn dein Beispiel funktioniert noch einfacher:
Delphi-Quellcode:
if Assigned( ActiveMDIChild ) then
ShowMessage( ActiveMDIChild.Caption );
oder auch
Delphi-Quellcode:
if Assigned( ActiveMDIChild ) then
ShowMessage( ActiveMDIChild.ClassName );
was funktioniert ist auch
Delphi-Quellcode:
case IndexText( ActiveMDIChild.ClassName, [ 'TForm1', 'TForm2' ] ) of
0 : ShowMessage( 'Ja, es ist eine Instanz von TForm1' );
1 : ShowMessage( 'Schon wieder eine Instanz von TForm2' );
end;
Es bietet sich übrigens an so eine
MDI-Anwendung mit
unterschiedlichen MDIChilds etwas strukturierter aufzubauen.
Delphi-Quellcode:
type
TFormSupportOption = ( fsoSave, fsoPrint );
TFormSupportOptions = set of TFormSupportOption;
TMDIBaseForm = class( TForm )
private
fOptions : TFormSupportOptions;
public
function Supporting( Option : TFormSupportOption ) : Boolean;
procedure Print( Sender : TObject ); virtual;
procedure Save( Sender : TObject ); virtual;
end;
function TMDIBaseForm.Supporting( Option : TFormSupportOption ) : Boolean;
begin
Result := Option in fOptions;
end;
procedure TMDIBaseForm.Print( Sender : TObject );
begin
// In den echten Forms ableiten (wenn nötig)
end;
procedure TMDIBaseForm.Save( Sender : TObject );
begin
// In den echten Forms ableiten (wenn nötig)
end;
In der MDIForm kannst du dann die Actions einfach so setzen:
Delphi-Quellcode:
procedure MainForm.PrintActionExecute( Sender : TObject );
begin
if ( ActiveMDIChild is TMDIBaseForm ) then
( ActiveMDIChild as TMDIBaseForm ).Print( Sender );
end;
procedure MainForm.PrintActionUpdate( Sender : TObject );
begin
PrintAction.Enabled := ( ActiveMDIChild is TMDIBaseForm ) and ( ActiveMDIChild as TMDIBaseForm ).Supporting( fsoPrinting );
end;