![]() |
MDI Problem :-(
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:
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." 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.
Delphi-Quellcode:
lg: doris// 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. //------------------------------------------------------------------------------- |
Re: MDI Problem :-(
AFAIK funktioniert der normale MDI-Mechanismus der VCL nur, wenn das Hauptformular MDIForm ist. SOnst wirds nix.
|
Re: MDI Problem :-(
Zitat:
|
Re: MDI Problem :-(
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 |
Re: MDI Problem :-(
Zitat:
Einfach ein Form erstellen, das den "Rohling" darstellt, es aus der Liste der autmatisch erstellten Formulare rausnehmen und bei
Delphi-Quellcode:
einfach
Button.OnClick
Delphi-Quellcode:
eintragen. Wobei TForm1 evtl. durch den Namen des Formulars zu ersetzen ist, welches Du als "Rohling" erstellt hast.
TForm1.Create;
|
Re: MDI Problem :-(
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 |
Re: MDI Problem :-(
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. |
Re: MDI Problem :-(
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
|
Re: MDI Problem :-(
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. |
Re: MDI Problem :-(
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 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