Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   VCL Form als Popup Style (https://www.delphipraxis.net/183000-vcl-form-als-popup-style.html)

Sunec 3. Dez 2014 11:45

Delphi-Version: XE7

VCL Form als Popup Style
 
Unter der Eigenschaft FormStyles habe ich bei Firemonkey Forms die Möglichkeit diese auf Popup zu setzten.

Dies ermöglicht es, dass sich die Form genauso verhält wie ein Popup-Menü.

Die Hauptform behält den Fokus und die Popup-Form "legt" sich lediglich darüber.

Außerdem verschwindet die Popup-Form automatisch sobald eine andere Aktion vom Benutzer ausgeführt wird, die sich nicht auf die Popup-Form bezieht.


Nun versuche ich das ganze in VCL zu realiseren.

Ich dachte an das überschreiben der CreateParams mit WS_POPUP bzw WS_POPUPWINDOW.

Allerdings verliert die Hauptform den Fokus und wird auch nicht automatisch ausgeblendet.

himitsu 3. Dez 2014 11:49

AW: VCL Form als Popup Style
 
WS_EX_NOACTIVATE

oder

Kein Show, sondern erst ShowWindow mit SW_SHOWMINNOACTIVE und danach Visible auf True setzen?

Sunec 3. Dez 2014 12:01

AW: VCL Form als Popup Style
 
Die aufgerufene "Popup-Form" erhält bei einem Klick weiterhin den Fokus und wird auch nicht automatisch ausgeblendet :(

So wird die Form aufgerufen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowWindow(Form2.Handle, SW_SHOWNOACTIVATE);
  Form2.Visible := true;
end;

Und hier die CreateParams der "Popup-Form"

Delphi-Quellcode:
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or WS_POPUP;
  Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE;
end;

himitsu 3. Dez 2014 12:08

AW: VCL Form als Popup Style
 
Warum
Delphi-Quellcode:
+
, wo du es das erste Mal doch richtig gemacht hast?

Nja, im MSDN steht, daß diese Styles nicht kompatibel mit gewissen anderen Styles sind. (soweit ich mich erinnere)
Wenn ja, dann solltest du dafür sorgen, daß diese Styles nicht ebenfalls enthalten sind.

Und eventuell auch mal dort nachlesen: Bei Google suchendelphi fenster popup

Sunec 3. Dez 2014 12:14

AW: VCL Form als Popup Style
 
Das + in or abzuändern ist leider auch nicht die Lösung.

Ich frag mich nur, weshalb es im FMX Framework so einfach ist eine Popup Form zu erzeugen und im eigentlich nativen VCL so umständlich?

Gegoogelt habe ich natürlich schon, undzwar mehrere Stunden. Ansonsten hätte ich nicht die Frage gestellt.

uligerhardt 3. Dez 2014 12:36

AW: VCL Form als Popup Style
 
Zitat:

Zitat von Sunec (Beitrag 1282100)
Ich frag mich nur, weshalb es im FMX Framework so einfach ist eine Popup Form zu erzeugen und im eigentlich nativen VCL so umständlich?

Weil nativ weder den Krebs heilt noch den Weltfrieden bringt. :mrgreen:
Es heißt nur, dass die VCL die Windows-Controls benutzt, und die geben das von dir gewünschte Verhalten halt nicht ohne Kopfstände her.

Vielleicht ist hier was Interessantes dabei:
http://stackoverflow.com/questions/2...e-a-popup-menu

Sunec 3. Dez 2014 13:18

AW: VCL Form als Popup Style
 
Zitat:

Zitat von uligerhardt (Beitrag 1282101)
Zitat:

Zitat von Sunec (Beitrag 1282100)
Ich frag mich nur, weshalb es im FMX Framework so einfach ist eine Popup Form zu erzeugen und im eigentlich nativen VCL so umständlich?

Weil nativ weder den Krebs heilt noch den Weltfrieden bringt. :mrgreen:
Es heißt nur, dass die VCL die Windows-Controls benutzt, und die geben das von dir gewünschte Verhalten halt nicht ohne Kopfstände her.

Vielleicht ist hier was Interessantes dabei:
http://stackoverflow.com/questions/2...e-a-popup-menu


Danke Uli, das war die Lösung!

uligerhardt 3. Dez 2014 14:34

AW: VCL Form als Popup Style
 
Zitat:

Zitat von Sunec (Beitrag 1282106)
Danke Uli, das war die Lösung!

:thumb:


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