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/)
-   -   Rahmen in fremd gezeichnetes Panel/Form zeichnen (https://www.delphipraxis.net/213911-rahmen-fremd-gezeichnetes-panel-form-zeichnen.html)

taveuni 18. Okt 2023 06:51

Rahmen in fremd gezeichnetes Panel/Form zeichnen
 
Hallo Gemeinde,

Mir ist kein besserer Titel eingefallen. Ich benutze eine 64bit C++ DLL API wie schon in einem anderen Post mit einem anderen Problem beschrieben.

Es handelt sich um eine API eines Videostreaming Systems. Für die Anzeige des Streams wird der API ein Handle eines VCL WinControls (TForm oder TPanel) übergeben. Die Api zeichnet dann auf dieses Control mit bis zu 50fps - was wunderbar funktioniert. Ein Feature ist das Digitalzoom welches ebenfalls via API benutzt werden kann. Mit den Mousewheel Events kann ich die Digitalzoom Funktionen ansprechen.

Nun: Um zu sehen welcher Bereich gezoomt wird möchte ich einen Rahmen in Anhängigkeit des Zoomfaktors und der Position in das Bild zeichnen. Mit Canvas geht das (logischerweise ?) nicht da die API permanent auf das Control zeichnet. Irgendwie fehlt mir da die Idee wie so etwas gemacht werden könnte. In meiner Naivität hatte ich gehofft ein Panel Transparent zu setzen und nur den Rahmen dieses zu nutzen. Leider bietet sich diese Möglichkeit nicht. Natürlich könnte ich vier Panels mit Breite 1PX auf das Control legen und dann in Abhängigkeit die Positionen x/y/Breite/Höhe platzieren um einen Rahmen zu simulieren. Dieser sollte dann aber auch noch verschoben werden können.

Gibt es eine einfachere Möglichkeit?

himitsu 18. Okt 2023 07:21

AW: Rahmen in fremd gezeichnetes Panel/Form zeichnen
 
ähhhhhhhhhhhh
https://www.delphipraxis.net/213899-...-zeichnen.html

oder wenn z.B. nach Hier im Forum suchenman auf Desktop zeichnen sucht



Aber im Grunde sollte es doch reichen ein WinControl (kein GraphicControl) über das Control zu legen, welches für die Ausgabe der DLL genutzt wird?
Und dort via Clipping den inneren Bereich auszuschneiden.
Oder einfach 4 WinControls (z.B. TPanel), für jede Seite.

taveuni 18. Okt 2023 08:46

AW: Rahmen in fremd gezeichnetes Panel/Form zeichnen
 
Zitat:

Zitat von himitsu (Beitrag 1528291)

(..)Und dort via Clipping den inneren Bereich auszuschneiden.(..)

Seeehr interessant. Das wäre meine bevorzugte Variante (mit einem Panel). Und wie würde man so etwas machen? Ist es so einfach mit ClipRect?

jaenicke 18. Okt 2023 08:49

AW: Rahmen in fremd gezeichnetes Panel/Form zeichnen
 
Das geht mit SetWindowRgn.

taveuni 18. Okt 2023 08:52

AW: Rahmen in fremd gezeichnetes Panel/Form zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von jaenicke (Beitrag 1528300)
Das geht mit SetWindowRgn.

Hmhh.. Ist das nicht das umgekehrte? So wie im Anhang (gelber Rahmen) sollte es dann ungefähr aussehen. Das grün umrandete Teil ist die besagte Form welche von der API gezeichnet wird.

jaenicke 18. Okt 2023 10:27

AW: Rahmen in fremd gezeichnetes Panel/Form zeichnen
 
Zitat:

Zitat von taveuni (Beitrag 1528302)
Hmhh.. Ist das nicht das umgekehrte? So wie im Anhang (gelber Rahmen) sollte es dann ungefähr aussehen. Das grün umrandete Teil ist die besagte Form welche von der API gezeichnet wird.

Wie umgekehrt? Du möchtest das Fenster bzw. Windows-Control auf eine rahmenförmige Region begrenzen. Die Region musst du natürlich erst einmal erzeugen und z.B. mit CombineRgn in die richtige Form bringen.

himitsu 18. Okt 2023 10:33

AW: Rahmen in fremd gezeichnetes Panel/Form zeichnen
 
Man kann Regionen "kombinieren",

also eine Region über das ganze Fenster/Control erzeugen und davon den inneren Bereich durch eine weitere Region subtrahieren.


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