Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Rahmen außerhalb des Fensters zeichnen? (https://www.delphipraxis.net/213899-rahmen-ausserhalb-des-fensters-zeichnen.html)

PeterPanino 16. Okt 2023 15:17

Rahmen außerhalb des Fensters zeichnen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Mit diesem Code wird Border offenbar immer INNERHALB des Formulars erzeugt:

Delphi-Quellcode:
Form1.BorderStyle := bsSingle;
Form1.BorderWidth := 4;
Wie kann man aber einen Rahmen außerhalb des Fensters erzeugen - so wie hier in PowerToys Always On Top:

Anhang 56340

himitsu 16. Okt 2023 16:15

AW: Rahmen außerhalb des Fensters zeichnen?
 
Den Inhalt des "Fensters" kleiner zeichnen, damit außenrum noch Platz für den Rahmen ist. :stupid:

Wobei das "eigentliche" Fenster in Windows aktuell ebenfalls bereits einen unsichtbaren Rahmen Randbereich hat, wo die Schatten gemalt werden,
und das "Fenster", was wir verwalten, also dessen Rahmen/Titelleiste demnach bereits nach innen versetzt ist.

Also das noch mehr nach innen zu verschieben, wobei dann Rahmen und Titelleiste von "dir" gezeichnet werden müssen, sowie die Behandlung der Systembuttons usw.
PS: siehe CustomTitleBar aka TTitleBarPanel (man kann auch dem System sagen "male mir hier eine bestimmte System-Komponente hin")

Redeemer 16. Okt 2023 16:56

AW: Rahmen außerhalb des Fensters zeichnen?
 
Ich würde vermuten, das auf dem Bild ist schlicht eine andere Form. Die ist entweder dahinter oder drum herum: Form der Gesamtgröße und dann ein "Loch" in der Mitte. Geht mit TransparentColor, von der Performance her ist aber eine echte Shape-Komponente besser.

PeterPanino 16. Okt 2023 17:15

AW: Rahmen außerhalb des Fensters zeichnen?
 
Zitat:

Zitat von Redeemer (Beitrag 1528195)
von der Performance her ist aber eine echte Shape-Komponente besser.

Wie würdest du eine Shape-Komponente außerhalb der Form anzeigen?

himitsu 16. Okt 2023 17:49

AW: Rahmen außerhalb des Fensters zeichnen?
 
Ein zweites Fenster davor/dahinter, da hat man dann damit zu kämpfen die Z-Order beizubehalten und beim Verschieben absolut synchron zu halten, sonst sieht es sch* aus.

Ein zweites Fenster und das eigentliche Fenster da rein verschieben, ähnlich MDI. (MyForm.Parent := BorderForm)

Oder siehe oben.

jaenicke 16. Okt 2023 18:59

AW: Rahmen außerhalb des Fensters zeichnen?
 
Zitat:

Zitat von PeterPanino (Beitrag 1528172)
Wie kann man aber einen Rahmen außerhalb des Fensters erzeugen - so wie hier in PowerToys Always On Top

Wie man leicht prüfen kann, erzeugen die PowerToys ein zusätzliches Fenster, schneiden die Region des Fensters entsprechend zu und führen es mit dem anderen Fenster mit. (Das kann man mit Tools wie dem Window Detective leicht sehen.)

PeterPanino 16. Okt 2023 19:03

AW: Rahmen außerhalb des Fensters zeichnen?
 
Werde mich mal an die Arbeit machen ...

Redeemer 18. Okt 2023 21:01

AW: Rahmen außerhalb des Fensters zeichnen?
 
Zitat:

Zitat von PeterPanino (Beitrag 1528196)
Zitat:

Zitat von Redeemer (Beitrag 1528195)
von der Performance her ist aber eine echte Shape-Komponente besser.

Wie würdest du eine Shape-Komponente außerhalb der Form anzeigen?

Gemeint ist eine "Komponente", die die Form zuschneidet. Als Alternative zu TransparentColor. Zumindest ohne DWM war TransparentColor eine Performance-Katastrophe. Ich habe es nach Windows XP nie mehr für nötig gehalten, nicht-rechteckige Forms Forms zu haben, daher hab ich keine Ahnung, ob TransparentColor inzwischen besser funktioniert.


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