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 Form modal & als MDI-Child (https://www.delphipraxis.net/61046-form-modal-als-mdi-child.html)

Der Jan 16. Jan 2006 14:16


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:
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;
Beim Versuch, das Fenster anzuzeigen, kommen Fehler

Delphi-Quellcode:
//modal
frmGeraet := TfrmGeraet.Create(self);
frmGeraet.ShowModal; //hier Fehler: EInvalidOperation

//bzw. als Child
with TfrmGeraet.Create(self, pnlMain) do
  Show; //hier Fehler: EInvalidOperation
bei modal: Aus einem sichtbaren Fenster kann kein modales gemacht werden.
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:

Der Jan 17. Jan 2006 07:40

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:
frm := TfrmGeraet.Create(self, self);
den gesamten Client-Bereich des MainForm als seins.
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.

Der Jan 18. Jan 2006 08:31

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 19:09 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