Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MDI-Formular nach Buttonklick erzeugen und anzeigen (https://www.delphipraxis.net/56364-mdi-formular-nach-buttonklick-erzeugen-und-anzeigen.html)

bioser 4. Nov 2005 15:49


MDI-Formular nach Buttonklick erzeugen und anzeigen
 
Hallo,

ich will nach einem Buttonklick ein MDI-Formular aufrufen und anzeigen.
Leider gibt es dabei eine Zugriffsverletzung.
Normal geht das eigentlich so:

Code:
var

myform:TmyForm;

....

//Buttonklick-Routine
myform := TmyForm.create(hauptform);
myform.Show;
Das klappt in meinem Fall aber leider nicht. Wer kann mir helfen ?

Viele Grüße
bioser

marabu 4. Nov 2005 16:31

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
Hallo bioser,

wenn MyForm den FormStyle fsMDIChild besitzt, dann musst du nur noch hauptform gegen application auswechseln - dann sollte es funktionieren.

Grüße vom marabu

bioser 4. Nov 2005 17:07

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
hi, hätte ich vielleicht noch erwähnen sollen:
Mein Hauptformular ist fsnormal, dort möchte ich auf einen Button
klicken und das MDI-Formular, das drei Kinder hat, erzeugen und
anzeigen. Erzeuge ich das MDI-Formular in der Projektdatei mit
Application.CreateForm, dann startet das Fenster zusammen mit meinem
normalen Hauptformular und alles läuft super. Nur möchte ich das ganze
per Buttonklick realisieren.

mschaefer 4. Nov 2005 17:17

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
Sorry,

das MDI-Formular muß das Hauptform einer Anwendung sein.
Das ist VCL bedingt so. Ein visble auf false des MDI Formulars wird meines Wissens nach auch ignorriert.
Vielleicht weiss jemand ob es mit visible noch einen Trick gibt..

Grüße // Martin

PS: andere Standatformulare sind aber möglich und können damit das MDI-Formular überdecken.

bioser 4. Nov 2005 17:36

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
Das ist ja ein Mist. Was soll ich denn jetzt machen ?

marabu 4. Nov 2005 17:52

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
Warum willst du unbedingt MDI und normale Fenster in einem Projekt mischen? Nicht gut ist das...

marabu

bioser 4. Nov 2005 17:57

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
...weil es sich dabei um eine fertige MDI-Anwendung handelt, die ich
nun in einem neuen Programm verwenden will.

marabu 4. Nov 2005 18:21

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
Das ist kein Grund für die von dir geplante Sünde. Wenn die MDI-Anwendung fertig ist - wie du sagst - dann würde ich sie nicht anfassen. Wenn ein wenig Funktionalität fehlt, dann würde ich sie erweitern. Ansonsten wäre für mich auch ein Kooperationsmodell denkbar, aber nicht die Vermischung von normalen und MDI-Fenstern in einer Anwendung. Das beziehe ich weniger auf technische Aspekte, als auf Software-Ergonomie und -Ästhetik.

marabu

mschaefer 4. Nov 2005 23:06

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
Spätmoin,

also, das von der Asthetik, lass ich jetzt mal aussen vor. Das VCL-Konstrukt sagt lediglich, das ein MDI-Formular als erstes angezeigt wird und soweit ich weiss nich unsichtbar geschaltet werden kann. Das heißt aber auch, daß mann sofort bei Programmstart ein zweites Formular aufgehen lassen könnte und eventuell beide Formulare MDI/Normal aneinader andocken um so eine Grundfläche zu erhalten. Desweitern ist es Möglich ein MDI-Formular in der Größe zu ändern, oder in den negativen Bildschirmberecih zu verschieben, wo es auch nicht sichtbar ist. Vielleicht geht das mit dem invisilbe auch über eine Fentsermessage (also unter Umgehung der VCL). Da ist noch einiges an Experimentieren gefragt.

Grüße // Martin

bioser 5. Nov 2005 07:57

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
Danke für Eure Antworten, aber ich glaube es ist doch besser, wenn
ich diese Sünde nicht begehe. :)

mschaefer 5. Nov 2005 10:28

Re: MDI-Formular nach Buttonklick erzeugen und anzeigen
 
Moin, moin,

Ja mach mal! Tatsache ist, dass es durchaus gute Gründe geben kann alte Konventionen aufzuheben. Oft sind die meist nur nich völlig ohne Grund oder in der Beschränkung von Windows hinterlegt. Andere Kandidaten haben allerdings durchaus deutliche Komentare zum Umbauen des MDI-Konzeptes: :) :


Invisible MDI child window
Zitat:

Zitat von Peter Below (TeamB)
You are free to demolish your own feet with any weapon of your liking. That does not mean it is a smart thing to do


Part one
Ok, aber an einigen Tipps soll es nicht fehlen: Wenn das MDI einmal aufgebaut ist und zunächst angezeit wurde kann man es mit
Delphi-Quellcode:
ShowWindow(Handle, SW_HIDE);
   {oder}
self.visoble := false;
unsichtbar machen. Es wird nur am Anfang einmal angezeigt. Was definitiv geht wäre allerdings im OnCreate-Ereignis:
Delphi-Quellcode:
 
width  := 0;
heigth := 0;
das MDI Fenster auf Nullgröße bringen und dann ein zweites Formular starten, was für den Anwender dann als Hauptfenster wirkt.
Bin mal gespannt was bei Dir dann herauskommt !



Part two

Es ist möglich mehrere Formulare in einem Projekt mit der Eigenschaft Formstayle = MDI zu versehen. Wenn man es mal weiterdenkt, dann könnte man folgendes machen:

Formular_0 style normal - als Hauptmenue für Oberkategorien
Formular_1 style MDI - als Formular für Kategoriesammlung-1
Formular_2 style MDI - als Formular für Kategoriesammlung-2

Alle werden zu Anfang aufgebaut. Form 1 und 2 werden znächst mit Nullgröße generiert. Formular 0 wird normal, eventuell mit Andocken an einen Bidlschirmrand generiert und hat Tasten und Menues für das Starten und auf Arbeitsgröße bringen der Form 1 und 2.

Die Formulare_1_Clienet_1_x sind dann Spezialformulare zu Kategorie 1
Die Formulare_2_Clienet_1_x sind dann Spezialformulare zu Kategorie 2



Grüße // Martin - Team DP - :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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