AGB  ·  Datenschutz  ·  Impressum  







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

MDI-ClientForm erzeugen

Ein Thema von Quake · begonnen am 2. Feb 2005 · letzter Beitrag vom 3. Feb 2005
Antwort Antwort
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#1

MDI-ClientForm erzeugen

  Alt 2. Feb 2005, 15:36
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:
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;
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.
Deswegen dachte ich man könnte es auch so machen:
Code:
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;
Aber leider bekomme ich eine Zugriffsverletzung beim Create.

Wie bekomme ich dies denn aber nun richtig hin?

ciao
Quake
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: MDI-ClientForm erzeugen

  Alt 3. Feb 2005, 08:10
Moin moin,

ich habs jetzt selber heraus bekommen wie das geht
Code:
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;
ciao
Quake
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: MDI-ClientForm erzeugen

  Alt 3. Feb 2005, 09:53
sorry, dass funktioniert nur auf den ersten Blick.
  Mit Zitat antworten Zitat
mason

Registriert seit: 15. Dez 2004
Ort: Magdeburg
30 Beiträge
 
Delphi 7 Professional
 
#4

Re: MDI-ClientForm erzeugen

  Alt 3. Feb 2005, 10:54
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 ):
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;
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: MDI-ClientForm erzeugen

  Alt 3. Feb 2005, 11:25
Hallo, erstmal danke für dein mühen, aber dies von dier ist der erste Blick
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]; . 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;
  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 19:48 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