AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MDICild nicht 2 mal öffnen

Ein Thema von Bob68 · begonnen am 28. Okt 2006 · letzter Beitrag vom 28. Okt 2006
Antwort Antwort
Bob68

Registriert seit: 24. Aug 2005
Ort: Moers
20 Beiträge
 
Delphi 2006 Enterprise
 
#1

MDICild nicht 2 mal öffnen

  Alt 28. Okt 2006, 12:58
Hallo zusammen,
ich stehe im Moment total im Wald.

Ich öffne ein MDICHILD über ein MainMenu wie folgt.
TForm2.Create(self). Ok das klappt auch, nun wie kann ich es verhindern das die Form ein zweitesmal aufgerufen wird??

Danke Bodo
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: MDICild nicht 2 mal öffnen

  Alt 28. Okt 2006, 13:47
Hi,

da gibt es verschiedene Ansätze.
Du könntes über Screen.Forms iterieren und prüfen, ob es ein Formular dieser Klasse oder mit dem Namen gibt.
Dann kannst du mit der Formularvariablen arbeiten.
Dazu musst du aber mit
Delphi-Quellcode:
if not Assigned(Form2) then
  Form2 := TForm2.Create(self);
das Formular öffnen und organisieren, dass beim Schliessen vom Form die Variable wieder auf nil gesetzt wird.

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
Bob68

Registriert seit: 24. Aug 2005
Ort: Moers
20 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: MDICild nicht 2 mal öffnen

  Alt 28. Okt 2006, 14:32
Hallo dataspider,
danke für deine schnelle Antwort.

Hab es hinbekommen.
Danke Bodo
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#4

Re: MDICild nicht 2 mal öffnen

  Alt 28. Okt 2006, 17:55
Zitat von Bob68:
Hallo zusammen,
ich stehe im Moment total im Wald.

Ich öffne ein MDICHILD über ein MainMenu wie folgt.
TForm2.Create(self). Ok das klappt auch, nun wie kann ich es verhindern das die Form ein zweitesmal aufgerufen wird??

Danke Bodo
Hallo,

ich habe das mal etwas komplizierter gelöst.
Ich rufe alle Forms mit einer Aufrufroutine auf und lege beim Aufruf fest, in welcher Art das Fenstergeöffnet werden soll.

Delphi-Quellcode:
Function ShowForm(aOwner : TComponent;
                  Form : TFormClass;
                  Modus : TFormmodus;
                  TagId : Integer) : TForm;

Function GetMDIChild : TForm;
var i : Integer;
Begin
 result:=nil;
 if (Application.MainForm = nil) or (Application.MainForm.MDIchildcount = 0) then Exit;
  for i:=0 to Application.MainForm.MDIchildcount-1 do
      if Application.MainForm.MDIChildren[i].ClassName = Form.ClassName then
         Begin
          result:= Application.MainForm.MDIChildren[i];
          if result.WindowState = wsMinimized then result.Windowstate := wsnormal;
          Exit;
         end;
end;

Function FindMDIChild : TForm;
var i : Integer;
Begin
 result:=nil;
 if (Application.MainForm = nil) or (Application.MainForm.MDIchildcount = 0) then Exit;
  for i:=0 to Application.MainForm.MDIchildcount-1 do
      if (Application.MainForm.MDIChildren[i].ClassName = Form.ClassName)
        and (TagId = Application.MainForm.MDIChildren[i].Tag) then
         Begin
          result:= Application.MainForm.MDIChildren[i];
          if result.WindowState = wsMinimized then result.Windowstate := wsnormal;
          Exit;
         end;
end;

Begin
 result:=nil;
 Case Modus of
       fmMulti : Begin
                   result:= Form.Create(AOwner);
                   if result.Formstyle <> fsMDIChild then result.Formstyle:=fsMDIChild;
                  end;
       fmsingle : Begin
                   result:=GetMDIChild;
                   if result=nil then result:= Form.Create(AOwner);
                   if result.Formstyle <> fsMDIChild then result.Formstyle:=fsMDIChild;
                  end;
      fmsingleTag: Begin
                    result := FindMDIChild;
                    FormExists := result <> nil;
                    if (result = nil) then Begin
                                             result := Form.Create(AOwner);
                                             result.Tag := TagID;
                                            end;
                    if result.Formstyle <> fsMDIChild then result.Formstyle:=fsMDIChild;
                   end;
      fmmodal : begin
                   result:= Form.Create(AOwner);
                   result.visible:=false;
                   result.FormStyle:=fsnormal;
                   if result.Width > TForm(aOwner).ClientWidth-4 then result.left:=2
                       else result.Left:=(TForm(aOwner).ClientWidth-result.Width) shr 1;
                     if result.Height < TForm(aOwner).ClientHeight-4 then result.Top:= (TForm(aOwner).ClientHeight - result.Height) shr 1
                                                               else result.Top:=2;
                   result.ShowModal;
                   result.Free;
                   Result:=nil;
                   Exit;
                  end;
     fmnormal : begin
                   result:= Form.Create(AOwner);
                   result.visible:=false;
                   result.FormStyle:=fsnormal;
                   if result.Width > TForm(aOwner).ClientWidth-4 then result.left:=2
                       else result.Left:=(TForm(aOwner).ClientWidth-result.Width) shr 1;
                     if result.Height < TForm(aOwner).ClientHeight-4 then result.Top:= (TForm(aOwner).ClientHeight - result.Height) shr 1
                                                               else result.Top:=2;
                   Application.Processmessages;
                   Exit;
                  end;
    fmTop : begin
                   result:= Form.Create(AOwner);
                   result.visible:=false;
                   result.FormStyle:=fsStayOnTop;
                   if result.Width > TForm(aOwner).ClientWidth-4 then result.left:=2
                       else result.Left:=(TForm(aOwner).ClientWidth-result.Width) shr 1;
                     if result.Height < TForm(aOwner).ClientHeight-4 then result.Top:= (TForm(aOwner).ClientHeight - result.Height) shr 1
                                                               else result.Top:=2;
                   Application.Processmessages;
                  end;
               end;

  if result <> nil then Begin
                         Application.Processmessages;
                         result.Show;
                        end;
end;
fmMulti - Beliebig oft als MDI öffnen

fmsingle - Nur einmal als MDI öffnen, bei erneuten aufruf Focus auf vorhandenes Fenster

fmsingleTag - Nur einmal pro Vorgang öffnen. z.B. jeweils für neue Kundenbearbeitung bei öffnen für bereits geöffneten Kunden nur Focus setzen

fmmodal - Öffnen als modales Fenster

fmnormal - Normal öffnen mit .Show.

fmTop - stay on Top

Gruß Peter
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz