Einzelnen Beitrag anzeigen

Benutzerbild von Der Jan
Der Jan

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

Form modal & als MDI-Child

  Alt 16. Jan 2006, 14:16
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?
Gruß, Jan
  Mit Zitat antworten Zitat