![]() |
Form modal & als MDI-Child
Hallo zusammen,
ich hab da grad ein kleines Problem. Und zwar habe ich ein Fenster, das soll als MDI-Child und auch Modal anzeigbar sein. Ich hab sowas in nem älteren Projekt schonmal gemacht, also es geht definitiv, nur leider find ich den Source nicht mehr. Und jetzt hakt es irgendwie. Folgendes habe ich (Source gekürzt):
Delphi-Quellcode:
Beim Versuch, das Fenster anzuzeigen, kommen Fehler
type
TfrmGeraet = class(TForm) //... private f_blChild: boolean; f_Parent: TWinControl; protected //... procedure CreateParams(var Params: TCreateParams); override; procedure Loaded; override; public //... constructor Create(i_Owner: TComponent); overload; override; constructor Create(i_Owner: TComponent; i_Parent: TWinControl); reintroduce; overload; end; //... //----------------------------------------------------------------------------- constructor TfrmGeraet.Create(i_Owner: TComponent); begin f_blChild := false; inherited Create(i_Owner); end; //----------------------------------------------------------------------------- constructor TfrmGeraet.Create(i_Owner: TComponent; i_Parent: TWinControl); begin f_blChild := true; f_Parent := i_Parent; inherited Create(i_Owner); end; //----------------------------------------------------------------------------- procedure TfrmGeraet.Loaded; begin inherited; if(f_blChild) then begin FormStyle := fsMDIChild; Parent := f_Parent; Position := poDefault; end else begin FormStyle := fsNormal; Position := poOwnerFormCenter; end; end; //----------------------------------------------------------------------------- procedure TfrmGeraet.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); if(f_blChild) then Params.Style := Params.Style or WS_CHILD; end;
Delphi-Quellcode:
bei modal: Aus einem sichtbaren Fenster kann kein modales gemacht werden.
//modal
frmGeraet := TfrmGeraet.Create(self); frmGeraet.ShowModal; //hier Fehler: EInvalidOperation //bzw. als Child with TfrmGeraet.Create(self, pnlMain) do Show; //hier Fehler: EInvalidOperation bei Child: Deaktiviertes oder unsichtbares Fenster kann den Fokus nicht erhalten. Irgendwie bin ich grad mächtig planlos... Wer weiß woran das liegen könnte? :gruebel: |
Re: Form modal & als MDI-Child
Moin... :cat:
Hat mir wohl diverse graue Haare gebracht, aber ich konnte das Problem zum Teil lösen: 1. FormStyle in Loaded zu setzen ist Unfug. 2. Im Designmode muß man FormStyle auf fsNormal setzen und Visible auf false (!) Jetzt läßt sich das Form modal oder als MDIChild anzeigen. Das bringt mich aber gleich zum nächsten Problem und das ist viiiiel schlimmer :coder2: Alllso: Mein MainForm ist ein MDIForm. Oben mit Menu, Toolbar und links noch nen NavigationsPanel. Ein "normales" MDIChild öffnet sich jetzt im freien Client-Bereich des MainForm, in Standardgröße, wird auch dort maximiert, es wird automatisch beim Erzeugen ein Eintrag ins Form.WindowMenu vorgenommen undsoweiterundosfort. Normales Verhalten also. Mein MDIChild, tut dies nicht :| Es betrachtet nach dem Erzeugen mit
Delphi-Quellcode:
den gesamten Client-Bereich des MainForm als seins.
frm := TfrmGeraet.Create(self, self);
Meine Frage: Wie bringe ich dem Child bei, sich zu verhalten, wie ein normales. (Wie erzieh ich das böse Kind :spin2: ?? :) ) Bzw. wie oder wo kann ich das MDIChild "registrieren", damit alles wie bei normalen MDIChilds läuft? Hab heut Nacht schon paar Stunden meines Schönheitsschlafes genutzt, um in den VCL-Sourcen zu stöbern, aber nicht brauchbares gefunden... :?: Ok, alles ziemlich wirre :gruebel: Aber ich hoffe, ihr konntet mir folgen und vielleicht weiß jemand Rat. |
Re: Form modal & als MDI-Child
keiner will mir helfen :cry:
Neee, mal im Ernst. :) Ich habe dann doch endlich irgendwie eine gut funktionierende Lösung gefunden. :dancer: Diese habe ich mal für die Code-Library gepostet, vielleicht wird sie ja sogar aufgenommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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 by Thomas Breitkreuz