Announcement

Collapse
No announcement yet.

Fenster öffnene/schließen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fenster öffnene/schließen

    <br>Hi,...
    <br>
    <br>Nach längerer Recherech in Foren und Büchern habe ich kein Konzept gefunden mit dem man
    <br>zuverlässig Fenster öffnen/schließen kann ohne Schutzverletzungen zu bekommen
    <br>(vieleicht mache ich aber auch was falsch).
    <br>Nun Ja,...
    <br>Ich habe ein MidiMainForm mit einer Menüleiste, einem Menü und einem Menüpunkt.
    <br>Drückt man auf den Menüpunkt, so wird FormA (MidiChild) aufgerufen mit:
    <br>
    <br>if FormA = nil Then FormA := TFormA.Create(Application)
    <br>else FormA.Show; //diesen Code habe ich aus irgend einem Delphi Buch
    <br>
    <br>Das funktioniert zunächst auch, es wird nun FormA aufgerufen.
    <br>In FormA existiert nun ein Button der beim Click folgenden Code ausführt:
    <br>
    <br>if FormB = nil Then FormB := TFormB.Create(Application)
    <br>else FormB.Show; //diesen Code habe ich aus irgend einem Delphi Buch
    <br>
    <br>Das funktioniert zunächst auch, es wird nun FormB aufgerufen.
    <br>Nun möchte ich, daß wenn man auf X (fenster schließen) von FormA drückt, dann
    <br>soll auch FormB geschlossen werden. Drückt man jedoch X auf FormB, so soll nur FormB
    <br>geschlossen werden.
    <br>
    <br>Dazu habe ich in FormA den folgenden Code unter ONClose stehen:
    <br>
    <br>action := ACFree;
    <br>If FormB <> NIL Then Begin
    <br> FormB.Release(0);
    <br> FormB := NIL;
    <br>End;
    <br>//Hier muß meiner Meinung nach noch FormA := Nil hin aber wie???
    <br>
    <br>Und in FormB unter OnClose:
    <br>action := ACFree;
    <br>//Hier muß meiner Meinung nach noch FormB := Nil hin aber wie???
    <br>
    <br>
    <br>Durch mehrer Versuch war ich dann mal so weit, das dies alles einmal funktionierte,
    <br>jedoch als ich FormA wieder aus dem Menü heraus aufrief kam eine Fehlermeldung.
    <br>Diese, so vermute ich erscheint, weil der Zeiger von FormA nicht nil ist. Aber
    <br>wie kann ich das machen wenn das Fenster über X geschlossen wird???
    <br>
    <br>Am liebsten wäre mir eine Prozedur wie Folgt:
    <br>Procedure showorcreate( myform : TForm);
    <br>Begin
    <br>if myform = nil Then myform := Tmyform.Create(Application)
    <br>else myform.Show; //diesen Code habe ich aus irgend einem Delphi Buch
    <br>End;
    <br>Ich vermute mal die Proc funktioniert jedoch habe ich beim schließen
    <br>immer noch das Problem mit dem NIL setzen.
    <br>Und was bedeutet eigentlich myform := Tmyform.Create(Application) in manchen Codes
    <br>stand anstatt Application Self wo ist der Unterschied und was sollte man verwenden??????
    <br>
    <br>Und zu guter letzt wie kann man mehrere völlig selbständige Instanzen eines Fensters
    <br>mit Sub Fenstern (wie oben beschrieben) öffnen ???
    <br>D.H. man öffnet FormA 2 mal und öffnet aus jedem FormA heraus das zugehörige FormB
    <br>und die FormB's greifen nur auf das FormA zurück, das sie geöffnet
    <br>hat (und FormA und FormB sollen MidiChilds sein)???
    <br>
    <br>Vielen Dank für Antworten.
    <br>
    <br>MfG
    <br>PS

  • #2
    Hi

    Du ordnest beide Formulare dem Application Object zu. Wird aber in FormA die Erstellung von FormB geändert:

    <pre>

    procedure TFormA.Button1Click();
    begin
    if FormB = nil then FormB := TFormB.Create(Self);
    FormB.Show;
    end;

    und zusätzlich beide Destructoren geändert in:

    procedure TFormA.FormDestroy();
    begin
    if FormA = Self then FormA := nil;
    end;

    procedure TFormB.FormDestroy();
    begin
    if FormB = Self then FormB := nil;
    end;

    </pre>

    Gruß Hage

    Comment


    • #3
      Danke!

      Tut mir leid für das späte Danke, kam jedoch in den letzten Wochen nicht mehr in das Forum.

      MfG P

      Comment

      Working...
      X