![]() |
MDI-ClientForm erzeugen
Hallo,
in meiner MDI-Anwendung möchte ich verschiedene MDI-Client Formulare auf Anforderung öffnen. Wenn ich in jedem Menüpunkt folgenen Code Verwende funktioniert das auch:
Code:
Was micht daran stört? Ich muss für jeden Menüpunkt diesen Code eingeben da ich ja bei jedem Münüpunkt ein anderes Formular öffnen möchte und deswegen unterscheiden sich auch die Klassen der Formulare.
procedure THauptForm.ErsteMenuPunktClicken(Sender: TObject);
var i: integer; begin for i:=0 to pred(MDIChildCount) do if MDIChildren[i] is TMeinErstesMDIClienForm then begin MDIChildren[i].BringToFront; MDIChildren[i].WindowState:=wsNormal; Exit; end; TMeinErstesMDIClienForm.Create(self); end; Deswegen dachte ich man könnte es auch so machen:
Code:
Aber leider bekomme ich eine Zugriffsverletzung beim Create.
procedure THauptForm.ErsteMenuPunktClicken(Sender: TObject);
begin MDIClientFormErzeugen(TMeinErstesMDIClienForm); end; procedure THauptForm.MDIClientFormErzeugen(FormularKlasse: TClass); var i: integer; begin for i:=0 to pred(MDIChildCount) do if MDIChildren[i] is FormularKlasse then begin MDIChildren[i].BringToFront; MDIChildren[i].WindowState:=wsNormal; Exit; end; TForm(FormularKlasse).Create(self); end; Wie bekomme ich dies denn aber nun richtig hin? ciao Quake |
Re: MDI-ClientForm erzeugen
Moin moin,
:coder: ich habs jetzt selber heraus bekommen wie das geht :bounce2:
Code:
ciao
procedure THauptForm.ErsteMenuPunktClicken(Sender: TObject);
begin MDIClientFormErzeugen(TMeinErstesMDIClienForm); end; function THauptForm.MDIClientFormErzeugen(FormularKlasse: TFormClass): TForm; var i: integer; begin for i:=0 to pred(MDIChildCount) do if MDIChildren[i] is FormularKlasse then begin result:=MDIChildren[i]; MDIChildren[i].BringToFront; MDIChildren[i].WindowState:=wsNormal; Exit; end; Application.CreateForm(FormularKlasse,result); end; Quake :) |
Re: MDI-ClientForm erzeugen
sorry, dass funktioniert nur auf den ersten Blick.
|
Re: MDI-ClientForm erzeugen
Was geht denn auf den zweiten Blick schief?
Ich hab das mal bei mir mit 2 MDI-Childs probiert - es funktioniert. Aber vielleicht ist das nur der erste Blick, den ich bisher getestet habe? Wobei es auch mit einer Mischung aus deinen beiden Vorschlägen funktioniert (pack ich mal noch mit rein, weil mir diese Variante am besten gefällt :-D ):
Delphi-Quellcode:
procedure THauptForm.MDIClientFormErzeugen(FormularKlasse: TFormClass);
var i: integer; begin for i:=0 to pred(MDIChildCount) do if MDIChildren[i] is FormularKlasse then begin MDIChildren[i].BringToFront; MDIChildren[i].WindowState:=wsNormal; Exit; end; FormularKlasse.Create(self); end; |
Re: MDI-ClientForm erzeugen
Hallo, erstmal danke für dein mühen, aber dies von dier ist der erste Blick :wink:
Ich hab jetzt aber den Fehler heraus gefunden. Das Problem ist ich möchte das Fenster zurück geliefert bekommen. Deswegen habe ich bei meinem 2. Beitrag aus der Procedure eine Function gemacht. Das Problem in dieser Function trat auf, wenn das Formular schon existiert. Da ich in meinem Programm eine kleine Änderung gegenüber dem 2. Beitrag gemacht hatte. Undzwar hat ich in der Function zuerst MDIChildren[i].BringToFront; und erst danach result:=MDIChildren[i]; :wall:. Das hat zur folge, das i nicht mehr die nummer des gleichen MDIChildren ist. Wird der Code in der Reihenfolge verwendet wie er im Beitrag 2 steht liefert result das richte Formular zurück. Und das Create habe ich auch noch verändert. Mit Application.CreateForm(FormularKlasse,result) hat das MDIChild den falschen Owner. ciao Quake
Delphi-Quellcode:
function TApplikationsForm.MDIClientFormErzeugen(FormularKlasse: TFormClass): TForm;
var i: integer; begin result:=nil; for i:=0 to pred(MDIChildCount) do begin if MDIChildren[i] is FormularKlasse then begin result:=MDIChildren[i]; result.BringToFront; result.WindowState:=wsNormal; Exit; end; end; result:=FormularKlasse.Create(self); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz