![]() |
CASE Statement of ActiveMDIChild
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Friends,
eine dämliche Frage statt If Anweissung möchte ich mit CASE anweisung arbeiten damit komme ich aaaber leider nicht weiter ... könnt Ihr bitte mir wegweisen... DELPHI XE : Problem: anstatt diese Befehle: if activeMDIchild(Form1) then begin ... End; if activeMDIchild(Form2) then begin ... End; MÖCHTE ich CASE Befehl wie folgt benutzen .. procedure TForm1.btnCHECKClick(Sender: TObject); begin case ActiveMDIChild of form2:ShowMessage('Form2 is active'); form3 : ShowMessage('Form3 is active'); form4 : ShowMessage('Form4 is active'); end; es geht aber nicht...:evil::?:wink: -------- Beispiel Project habe ich dran gehängt ... DEanke im Voraus Gandimann |
AW: CASE Statement of ActiveMDIChild
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:
Und wenn dein Beispiel funktioniert noch einfacher:
if ActiveMDIChild.ClassType = TForm1 then
TForm1( ActiveMDIChild ).MacheWasGibtsNurInTForm1; if ActiveMDIChild.ClassType = TForm2 then TForm2( ActiveMDIChild ).MacheWasGibtsNurInTForm2;
Delphi-Quellcode:
oder auch
if Assigned( ActiveMDIChild ) then
ShowMessage( ActiveMDIChild.Caption );
Delphi-Quellcode:
was funktioniert ist auch
if Assigned( ActiveMDIChild ) then
ShowMessage( ActiveMDIChild.ClassName );
Delphi-Quellcode:
Es bietet sich übrigens an so eine MDI-Anwendung mit unterschiedlichen MDIChilds etwas strukturierter aufzubauen.
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;
Delphi-Quellcode:
In der MDIForm kannst du dann die Actions einfach so setzen:
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;
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; |
AW: CASE Statement of ActiveMDIChild
Danke Sir Rufo für dein Antwort:
meinst du So... procedure TForm1.btnCHECKClick(Sender: TObject); var indextext : integer ; begin case IndexText( ActiveMDIChild.ClassName, [ 'TForm2', 'TForm3' ] ) of 0 : ShowMessage( 'Ja, es ist eine Instanz von TForm1' ); 1 : ShowMessage( 'Schon wieder eine Instanz von TForm2' ); end; kommen aber Fehlermeldungen ...-- !! [DCC Error] Unit1.pas(70): E2066 Missing operator or semicolon [DCC Error] Unit1.pas(70): E2001 Ordinal type required [DCC Error] Unit1.pas(70): E2010 Incompatible types: 'Integer' and 'string' [DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas' |
AW: CASE Statement of ActiveMDIChild
:arrow:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz