AGB  ·  Datenschutz  ·  Impressum  







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

MDI Problem :-(

Ein Thema von dorisdoloris · begonnen am 18. Jan 2006 · letzter Beitrag vom 23. Jan 2006
Antwort Antwort
Seite 1 von 3  1 23      
dorisdoloris

Registriert seit: 9. Nov 2005
44 Beiträge
 
#1

MDI Problem :-(

  Alt 18. Jan 2006, 18:13
Hallo ihr lieben ich habe folgendes Problem. Wenn ich eine Hauptform habe die "FormStyle (fsMDIForm)" ist und ich dann von dieser Hauptform aus im "OnActivate" Ereignis ein neues MDIChild aufrufen will dann klappt das. Hier mal der Code.

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ChildWin,
  StdCtrls;

type
  TfMain = class(TForm)
    procedure FormActivate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure CreateMDIChild(const Name: string);
  public
    { Public-Deklarationen }
  end;

var
  fMain: TfMain;

implementation

{$R *.DFM}

procedure TfMain.CreateMDIChild(const Name: string);
var
  Child: TMDIChild;
begin
  //new MDI child window
  Child := TMDIChild.Create(Application);
  Child.Caption := Name;
end;

procedure TfMain.FormActivate(Sender: TObject);
begin

CreateMDIChild('NewWindow');

end;

procedure TfMain.FormCreate(Sender: TObject);
begin

end;

end.
Soweit so gut das klappt ja, aber wenn ich eine Hauptform habe die nur "FormStyle (fsNormal)" ist und ich auf dieser einen Button platziere und ich dann über diesen eine neue Form von "FormStyle (fsMDIForm)" öffne dann klappt es nicht mehr. Es wird zwar die neue Form geöffnet aber beim erzeugen eines MDIChild im "OnActivate" Ereignis der "MDI-Form" tritt folgender Fehler auf "Formular kann nicht erstellt werden. Zur Zeit sind keine MDI-Formulare aktiv."

Delphi-Quellcode:

// Code wo der Fehler auftritt

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TfMain = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  fMain: TfMain;

implementation

uses Unit2;

{$R *.DFM}


procedure TfMain.BitBtn1Click(Sender: TObject);
begin

fMDI.Show();


end;

end.

//-----------------------------------------------------------------------------

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ImgList, ComCtrls, ToolWin,ChildWin;

type
  TfMDI = class(TForm)
    MainMenu1: TMainMenu;
    Einstellungen1: TMenuItem;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ImageList1: TImageList;
    ToolButton3: TToolButton;
    procedure FormCreate(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
  private
    { Private-Deklarationen }

  public
    { Public-Deklarationen }
    procedure CreateMDIChild(const Name: string);
  end;

var
  fMDI: TfMDI;


implementation

uses Unit1;

{$R *.DFM}


procedure TfMDI.CreateMDIChild(const Name: string);
var
  Child: TMDIChild;
begin
  //new MDI child window
  Child := TMDIChild.Create(Application);
  Child.Caption := Name;
end;


procedure TfMDI.FormCreate(Sender: TObject);
begin

CreateMDIChild('NewWindwow' + IntToStr(MDIChildCount + 1));

end;


end.

//-------------------------------------------------------------------------------
lg: doris
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#2

Re: MDI Problem :-(

  Alt 18. Jan 2006, 18:46
AFAIK funktioniert der normale MDI-Mechanismus der VCL nur, wenn das Hauptformular MDIForm ist. SOnst wirds nix.
Gruß, Jan
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#3

Re: MDI Problem :-(

  Alt 18. Jan 2006, 19:17
Zitat von Der Jan:
AFAIK funktioniert der normale MDI-Mechanismus der VCL nur, wenn das Hauptformular MDIForm ist. SOnst wirds nix.
Korrekt. Wäre ja vom Sinn her auch Blödsinn. Dann könnte man auch gleich ein normales TForm nehmen.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
dorisdoloris

Registriert seit: 9. Nov 2005
44 Beiträge
 
#4

Re: MDI Problem :-(

  Alt 18. Jan 2006, 20:50
Danke für eure schnelle Hilfe. Wenn man ein MDIChild nur von einem Hauptformular das auch MDIForm ist aufrufen kann dann hilft mir das leider nicht weiter. Ich müsste bei ButtonClick beliebig viele neue Fenster öffnen können. Kann man das vielleicht noch anders lösen ?

lg: doris
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#5

Re: MDI Problem :-(

  Alt 18. Jan 2006, 20:57
Zitat von dorisdoloris:
Kann man das vielleicht noch anders lösen ?
Klar.

Einfach ein Form erstellen, das den "Rohling" darstellt, es aus der Liste der autmatisch erstellten Formulare
rausnehmen und bei

Button.OnClick einfach

TForm1.Create; eintragen. Wobei TForm1 evtl. durch den Namen des Formulars zu ersetzen ist, welches Du als "Rohling" erstellt hast.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
dorisdoloris

Registriert seit: 9. Nov 2005
44 Beiträge
 
#6

Re: MDI Problem :-(

  Alt 18. Jan 2006, 21:18
Ich weis doch aber nicht wieviel neue Fenster der User haben will wenn er auf den Button clickt. Also wenn er zb. einmal klickt soll sich ein neues Fenster öffnen (Fenster 1). Wenn er noch einmal draufklickt wieder ein neues Fenster (Fenster 2)usw. Wenn ich das begrenzen würde bräuchte ich ja nur so viele Formulare wie maximal geöffnet werden dürfen erstellen und diese dann aufrufen mit Form1.Show; Form2.Show usw. Aber genau das möchte ich nicht es soll so sein wie bei den MDIChilds also Dynamisch.

lg: doris
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#7

Re: MDI Problem :-(

  Alt 18. Jan 2006, 21:25
Deswegen mach' es so, wie in meinem letzten Post. Dadruch wird bei jedem Klick auf den Button ein neues Fenster "erzeugt".
Ist auch dynamisch und zur Laufzeit.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
dorisdoloris

Registriert seit: 9. Nov 2005
44 Beiträge
 
#8

Re: MDI Problem :-(

  Alt 18. Jan 2006, 22:08
Also entweder versteh ich was falsch oder ich bin blond. Wenn ich TForm2.Create; aufrufe dann ist das doch immer das gleiche Fenster und nicht wirklich ein neues. Das heist wenn ich es einmal aufrufe und dann nocheinmal wird doch das gleiche wieder geöffnet oder nicht ? Ich habe also ein Hauptformular (Form1) und noch ein weiteres erstellt (Form2) Form2 hab ich also unter Projekt Optionen Formulare von "Automatisch erzeugen" nach rechts verschoben in "Verfügbare Formulare" wie du es sagtest. Dann hab ich in der Form1 bei ButtonClick "TForm1.Create;" reingeschrieben darauf kommt der Fehler "Undifinierter Bezeichner TForm2" Also hab ich folglich noch unter "implementation" "uses Unit2;" eingetragen darauf jetzt dieser Fehler "Nicht genügend wirkliche" Parameter
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: MDI Problem :-(

  Alt 18. Jan 2006, 22:21
Wenn du TForm2.create aufrufst, erzeugst du eine neue Instanz der Klasse TForm2.

Normalerweise macht Delphi das automatisch in die Variable Form2. Aber wenn du das manuell instantiierst, dann hast du mit jedem Aufruf von Create eine komplett neue Form2 die von den anderen unabhängig ist.

Verwechsle nicht TForm.create mit TForm.show.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
dorisdoloris

Registriert seit: 9. Nov 2005
44 Beiträge
 
#10

Re: MDI Problem :-(

  Alt 18. Jan 2006, 22:30
Delphi-Quellcode:


procedure TForm1.Button1Click(Sender: TObject);
begin

TForm2.Create(self);
Form2.Show();

end;



Also ich hab es jetzt so gemacht aber wie ich schon sagte wenn ich ein zweites mal draufklicke bleibt das Fenster Form2 und es kommt kein neues wie mei MDI-Child. Ich könnte jetzt TForm3.Create(self); machen aber dazu müsste ja wieder erst eine neue Form (Form3) erstellt werden also ist es doch wieder abhängig wieviele Formulare ich vorher erstelle oder doch nicht ? Ich verzweifel langsam 'g
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:55 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