![]() |
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:
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?
constructor TDesignerForm.CreateNew(AOwner: TComponent; Dummy: Integer = 0);
begin inherited; //Parent := TWinControl(AOwner); Winapi.Windows.SetParent(Self.Handle,(AOwner as TWinControl).Handle); Show; end; Danke schonmal im vorraus. |
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. |
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? |
AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
|
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:
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. |
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:
mit einem
CreateParams(..)
Delphi-Quellcode:
-Flag zu versehen?
WS_EX_NOACTIVATE
|
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.
|
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. |
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? |
AW: Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verlier
Wir machen das in einem sehr umfangreichen Einstellungsdialog so:
Delphi-Quellcode:
funktioniert ohne Probleme
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 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-2025 by Thomas Breitkreuz