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/)
-   -   Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verliert (https://www.delphipraxis.net/190168-eingebettetes-forumular-panel-aktivieren-ohne-dass-hauptformular-fokus-verliert.html)

Dennis07 7. Sep 2016 04:27

Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verliert
 
Hallo,
ich habe ein Formular in einen Panel eingebettet. Das funktioniert soweit auch alles super. Nur leider verliert das übergeordnete Formular immer den Fokus, sobald ich das Formular auswähle.
Hier mal ein Auszug meines Codes:

Delphi-Quellcode:
constructor TDesignerForm.CreateNew(AOwner: TComponent; Dummy: Integer = 0);
begin
  inherited;
  //Parent := TWinControl(AOwner);
  Winapi.Windows.SetParent(Self.Handle,(AOwner as TWinControl).Handle);
  Show;
end;
Wie man sieht, werden hier die Einstellungen angepasst und die Instanz von TDesignerForm wird dem AOwner unterstellt. Gibt es eine möglichkeit, sowohl den AOwner/dessen übergeordnete Steuerelemente als auch das Formular auszuwählen und zu verhindern, dass das andere den Fokus verliert?

Danke schonmal im vorraus.

jaenicke 7. Sep 2016 05:19

AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
 
In diesem Fall lässt sich das so wie du es möchtest nicht machen, denn es sind nun einmal verschiedene Fenster, auch wenn diese statt auf dem Desktop auf einem Panel liegen. Nur ein Fenster kann den Fokus haben.

Empfehlenswert ist das Einbetten ohnehin weniger, auch wenn es immer wieder mal gemacht wird. Es kann aber auch Probleme geben (manche Controls reagieren nicht mehr korrekt, ...). Meistens gibt es jedenfalls bessere Alternativen, je nachdem warum das so gemacht wurde.

In deinem Fall sieht TDesignerForm ja nach einem Formulardesigner aus. Es hat einen Grund weshalb der Rahmen des Fensters im Designer bei Delphi nicht so aussieht wie das Betriebssystem: Es ist schlicht kein eigenständiges Fenster, das eingebettet wurde, sondern der Rahmen wird selbst hinzugefügt.
Wir machen das bei unserem eingebetteten Designer auch nicht anders. Das ist ein eigenes Control, aber kein Fenster.

Dennis07 7. Sep 2016 06:21

AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
 
Stimmt, es ist in der Tat ein Formulardesigner. :D

Hm okay, kannst du mir evl. sagen wie man den Ramen dann dahin bekommt?

hoika 7. Sep 2016 06:40

AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
 
Hallo,

suchst du das hier?
http://docs.embarcadero.com/products...FocusRect.html

jaenicke 7. Sep 2016 07:13

AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
 
Das FocusRect hat mit dem Fensterrahmen nichts zu tun. Das ist lediglich die Markierung des fokussierten Controls.

Zitat:

Zitat von Dennis07 (Beitrag 1347008)
Hm okay, kannst du mir evl. sagen wie man den Ramen dann dahin bekommt?

Selbst zeichnen. ;-)

Es gibt für den Zweck z.B. die ThemeServices in der Unit Vcl.Themes. Dort kannst du einmal nach TThemedWindow suchen, darüber findest du auch die Bestandteile des Fensters usw. und kannst diese auch mit DrawElement zeichnen lassen.

Der schöne Günther 7. Sep 2016 07:37

AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
 
Dumme Frage am Rande:

Warum hilft es eigentlich nicht das eingebettete Formular im
Delphi-Quellcode:
CreateParams(..)
mit einem
Delphi-Quellcode:
WS_EX_NOACTIVATE
-Flag zu versehen?

jaenicke 7. Sep 2016 09:43

AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
 
Ich bezweifle, dass man dann noch designen kann. Ich vermute du kannst dann die Komponenten auch nicht mehr verschieben etc.

Dennis07 7. Sep 2016 14:25

AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
 
Und man kann da nicht irgendwie mittels MDI-Zeug nachhelfen?
Denn in MDI-Anwendungen geht das doch soweit ich weiß auch irgendwie...
Meine Designer-Form verhält sich aktuell bereits zu 99% wie die im Delphi-FormDesigner.

Dennis07 7. Sep 2016 15:12

AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
 
So, habe jetzt mal ein wenig rumprobiert und musste feststellen, dass meine Draw-Aufrufe nichts machen.
Habe jetzt sowohl DrawElement als auch DrawStyleEdge ausprobiert, bisher vergebens.
Verrätst du mir eventuell die Methode?

Fritzew 8. Sep 2016 18:49

AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
 
Wir machen das in einem sehr umfangreichen Einstellungsdialog so:

Delphi-Quellcode:
procedure TpartBase.SetIntoParent(const aParent : TWinControl);
begin
 // Diese 2 Eigenschaften werden bei uns schon im constructor gesetzt
 Borderstyle = bsNone;
 Align := alclient;
 //
 parent := aParent;
 visible := true;
end;
funktioniert ohne Probleme


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