AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verliert
Thema durchsuchen
Ansicht
Themen-Optionen

Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verliert

Ein Thema von Dennis07 · begonnen am 7. Sep 2016 · letzter Beitrag vom 8. Sep 2016
Antwort Antwort
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#1

Eingebettetes Forumular in Panel aktivieren ohne dass Hauptformular Fokus verliert

  Alt 7. Sep 2016, 05:27
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.
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 7. Sep 2016, 06:19
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 7. Sep 2016, 07:21
Stimmt, es ist in der Tat ein Formulardesigner.

Hm okay, kannst du mir evl. sagen wie man den Ramen dann dahin bekommt?
Dennis
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 7. Sep 2016, 07:40
Hallo,

suchst du das hier?
http://docs.embarcadero.com/products...FocusRect.html
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 7. Sep 2016, 08:13
Das FocusRect hat mit dem Fensterrahmen nichts zu tun. Das ist lediglich die Markierung des fokussierten Controls.

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

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

  Alt 7. Sep 2016, 08:37
Dumme Frage am Rande:

Warum hilft es eigentlich nicht das eingebettete Formular im CreateParams(..) mit einem WS_EX_NOACTIVATE -Flag zu versehen?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 7. Sep 2016, 10:43
Ich bezweifle, dass man dann noch designen kann. Ich vermute du kannst dann die Komponenten auch nicht mehr verschieben etc.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 7. Sep 2016, 15:25
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.
Dennis
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 7. Sep 2016, 16:12
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?
Dennis
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 8. Sep 2016, 19:49
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
Fritz Westermann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 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