Announcement

Collapse
No announcement yet.

Doppeltes öffnen von MDI-Child's verhindern

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

  • Doppeltes öffnen von MDI-Child's verhindern

    hallo,

    wie kann ich verhindern, dass ein bereits geöffnetes MDI-Child nochmal bzw. mehrfach geöffnet wird.

    hartmut

  • #2
    <p>Hallo Hartmut,<br>
    <br>
    versuche einmal folgendes. Ich habe es nicht ausprobiert!<br>
    <br>
    <pre>
    function TForm1.CanMDIOpen(const aName:String):Bool;
    var i:Integer;
    begin
    result:=True;
    if (MDIChildCount=0) then Exit;
    for i:=0 to MDIChildCount-1 do if (MDIChildren[i].Name=aName) then
    begin
    // Fenster mii o.g. Namen existiert bereits
    Result:=False;
    Break;
    end; // if
    end; // TForm1.CanMDIOpen
    </pre>
    <br>
    <pre>
    procedure TForm1.MDIOpen;
    begin
    if CanMDIOpen('MyOnlyOneOpenedMDIChild') then
    begin
    Application.CreateForm(TOneOpenedMDIChild, OneOpenedMDIChild);
    OneOpenedMDIChild.Show;
    end; // if
    end; // TForm1.MDIOpen
    </pre>
    <br>
    Gruß Thomas</p&gt

    Comment


    • #3
      Hallo Hartmut,<br>

      Versuchs mal so:<br>
      Zur Info: Ich habe dem entsprechenden Form in der Egenschaft TAG immer<br>
      einen Wert (z.B. 100 für FormXXX) zugewiesen. Statt das Tag zu<br> verwenden kannst Du auch den Namen des Forms abfragen.<br>

      procedure ...;<br>
      Var<br>
      I :Integer;<br>
      MDIFound :Boolean;<br>
      begin<br>
      MDIFound:=False;<br>
      { alle mdiChilds untersuchen ob Fenster schon erzeugt }<br>
      for I:=0 to FMain.MDIChildCount-1 do begin<br>
      with FMain.MDIChildren[I] do begin<br>
      if TAG = 100 then begin<br>
      { wenn ja dann in den Vordergrund }<br>
      if WindowState=wsMinimized then begin<br>
      WindowState:=wsNormal;<br>
      end;<br>
      SetFocus;<br>
      BringToFront;<br>
      MDIFound:=True;<br>
      end;<br>
      end;<br>
      end;<br>

      if not MDIFound then begin<br>
      // wenn nicht gefunden dann Formular erstellen.<br>
      TFormXXX.create(self);<br>
      end;<br>
      end;<br>

      Gruß Andr

      Comment


      • #4
        Ich benutze immer folgende Funktion:

        Function Form1.CheckWindow(AName:String):Boolean;
        var I:Integer;
        Begin
        result := False;
        for i := 0 to Screen.FormCount-1 do
        if AnsiUpperCase(Screen.Forms[i].Name) = AnsiUpperCase(AName) then begin
        Screen.Forms[i].WindowState := wsNormal;
        Screen.Forms[i].BringToFront;
        exit;
        end;
        result := True;
        end;

        Vor jedem Öffnen einer Form, benutzt (z.B. in einer If Abfrage, da Rückgabewert=Boolean) Du diese Funktion mit dem Namen der Form als Parameter

        Comment


        • #5
          hallo, ich noch einbisle neu in Delphi aber brauche dringend die Lösung zu meinem Problem.
          Ich habe das Mdi Problem mit den Fenstern die sich nicht 2 mal öffnen sollen.
          Ich habe mir hier die Beispiel durchgelesen aber kann leider nichts damit anfang weil ich noch newbie bin .
          Kann mir vielleicht einer eine kleines beispiel machen mit 2 Forms .???
          Ich währe jedem dankbar.
          [email protected]

          Gruß volke

          Comment

          Working...
          X