Announcement

Collapse
No announcement yet.

Verhalten von Forms mit Form als Parent

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verhalten von Forms mit Form als Parent

    Hallo Profis,<BR><BR>
    ich muss doch noch mal auf dem leidigen Thema herumkauen.<BR>
    Wenn ich keine MDI - Anwendung schreibe, aber das Verhalten nachbilde, indem ich alle Forms im MainForm erzeuge, so nervt das Verhalten der VCL.<BR>
    Alle Forms, die als Parent ein anderes Form haben, können nicht aktiv sein, Tastaturereignisse kommen nur noch am MainForm an und Hotkey's in Menu etc. funktionieren nicht mehr. Gibt es nicht einen Weg, den Formularen dieses Verhalten abzugewöhnen?<BR><BR>
    Frank

  • #2
    Hallo Frank,

    Du musst die Forms als Childforms erzeugen. Dazu gibt es im Forum schon einige Beispiele.

    Dann hast du allerdings keine Titelleisten in den Forms.

    Grüße

    Juli

    Comment


    • #3
      Hallo Julia,<BR><BR>
      Danke erst mal für die Antwort. Aber ich kann ein Childform doch nur in einer MDI - Anwendung erzeugen. Und von MDI wird ja immer abgeraten. Oder meist du etwas Anderes?<BR><BR>
      Fran

      Comment


      • #4
        Ich meine ein ganz normales Form, das folgendermassen erzeugt wird:

        <PRE>
        type
        TChildFrm = class(TForm)
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        private
        FASChild :Boolean;
        FTempParent : TWinControl;
        public
        procedure CreateParams(var Params: TCreateParams); override;
        procedure Loaded; override;
        constructor Create(AOwner: TComponent); overload; override;
        constructor Create(AOwner: TComponent;
        AParent: TWinControl); reintroduce; overload;
        procedure Cancel; virtual;
        end;

        var
        ChildFrm: TChildFrm;

        implementation

        {$R *.dfm}

        { TChildFrm }

        constructor TChildFrm.Create(AOwner: TComponent);
        begin
        FAsChild := False;
        inherited Create(AOwner);
        end;

        constructor TChildFrm.Create(AOwner: TComponent; AParent: TWinControl);
        begin
        FAsChild := True;
        FTempParent := aParent;
        inherited Create(AOwner);
        end;

        procedure TChildFrm.CreateParams(var Params: TCreateParams);
        begin
        inherited CreateParams(Params);
        if FAsChild then
        Params.Style := Params.Style or WS_CHILD;
        end;

        procedure TChildFrm.Loaded;
        begin
        inherited;
        if FAsChild then
        begin
        Align := alClient;
        BorderStyle := bsnone;
        BorderIcons := [];
        Parent := FTempParent;
        Position := poDefault;
        end;
        end;

        procedure TChildFrm.FormClose(Sender: TObject; var Action: TCloseAction);
        begin
        if FAsChild then
        Action := caFree;
        end;
        </PRE>

        Dieses Form kannst Du je nach constructor als normaes oder als Childform erzeugen.

        Das sollte alles sein, was dafür nötig ist.

        Grüße

        Juli

        Comment


        • #5
          Hallo Julia,<BR><BR>
          leider funktioniert auch hier kein Tastaturereignis und kein ShortCut.<BR><BR>
          Fran

          Comment


          • #6
            Trotzdem Danke, Julia<BR><BR>
            wenn man die Unit Forms analysiert, sieht man, das es etwaz komplizierter ist. Überall erscheint die Funktion GetParent, welche in meinem Fall logischerweise immer das MainForm liefert. Dadurch erhalten die ChildForms keine Nachrichten mehr.<BR><BR>
            Fran

            Comment


            • #7
              Hallo,

              ich hatte Dein Problem auch verkannt, ich dachte, Du empfängst generell keine Tastatureingaben.

              Das Problem mit dem Durchreichen der Tastaturereignisse hatte ich auch schon; ich habe dann anhand der Eigenschaft Controls[]abgefragt, welches Form aktiv ist, und dann dementsprechend reagiert. Allerdings geht es bei mir dann auch nur um 2-3 Eingabemöglichkeiten. Bei mehr Eingaben wirds leicht unübersichtlich

              Comment

              Working...
              X