AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

CASE Statement of ActiveMDIChild

Ein Thema von Gandimann · begonnen am 28. Okt 2011 · letzter Beitrag vom 28. Okt 2011
Antwort Antwort
Gandimann

Registriert seit: 10. Dez 2008
105 Beiträge
 
#1

CASE Statement of ActiveMDIChild

  Alt 28. Okt 2011, 18:27
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...wink:

--------
Beispiel Project habe ich dran gehängt ...

DEanke im Voraus
Gandimann
Angehängte Dateien
Dateityp: rar CASE Statement.rar (86,4 KB, 3x aufgerufen)
Was ist die mehrzahl von Mopp ? !
genau !... Möpse........oder ?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: CASE Statement of ActiveMDIChild

  Alt 28. Okt 2011, 18:40
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (28. Okt 2011 um 18:55 Uhr)
  Mit Zitat antworten Zitat
Gandimann

Registriert seit: 10. Dez 2008
105 Beiträge
 
#3

AW: CASE Statement of ActiveMDIChild

  Alt 28. Okt 2011, 19:27
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'
Was ist die mehrzahl von Mopp ? !
genau !... Möpse........oder ?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: CASE Statement of ActiveMDIChild

  Alt 28. Okt 2011, 20:10
Delphi-Referenz durchsuchenIndexText
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf