Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
<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>
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>
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
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]
Comment