Einzelnen Beitrag anzeigen

Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Transparentes TCustomControl

  Alt 26. Sep 2023, 19:00
Danke für die Antworten! Ich verbuche das dann mal unter der Rubrik "Schöne Idee, aber lass ma lieber." Je mehr ich dazu im Netz rumsuche, desto mehr finde ich User, die an dem Thema verzweifeln, irgendwelche Krücken bauen, oder es einfach sein lassen. Jetzt gibt es ein weiteres Thema dazu.

DoubleBuffered malt auf ein internes Bitmap, anstatt direkt auf den Canvas.
Dieses Buffered-Bitmap wird aber ohne Tansparenz gemalt, also immer vollflächig.
Ok, dann mache ich da also im Prinzip keinen Fehler. Dass das Buffered-Bitmap, das bei DoubleBuffered genutzt wird, den Transparenz-Wunsch des Controls ignoriert, war mir nicht bewusst. Dann kann man da mit vertretbarem Aufwand nichts dran ändern. Denn ein eigenes "TWinControl" abzuleiten, dass eine andere Form von DoubleBuffering unterstützt, ist an der Stelle zu viel Aufwand. Auch andere Tricksereien werde ich dann eher sein lassen. (In einem Thread hier hat z.B. einer als Basis TGraphicControl genommen, das ein ein verstecktes TCustomControl erzeugt, dass dann die Tastatureingaben und Fokus etc. erhält.)
Da werde ich eher das Konzept für meine Control etwas überdenken, so dass ich auch gut ohne Transparenz leben kann. Dann ist der Hintergrund halt einfarbig.

My suggestion is : if it is possible and the background is not moving/changing (a lot), then cache it and don't use the InvalidateRect as it is the cause of the flickering box, and just redraw that box from you cache to remove your old red circle. (here you also can use smaller box at the size of the red circle)
Yes, this would simulate the transparency - which I already do in some cases. I just thought that there is a more elegant way to do this. It seems, that this is not the case. Maybe I'll add this as well for this component in a later version. But this should be easy to implement afterwards, when the component is otherwise ready.

Ist übrigens nichts wildes - soll eine skinbare Progress-Track-Range-Bar für meinen Player werden, bei der man zusätzlich einen Bereich für A-B-Wiederholung einstellen kann. Also quasi eine Trackbar mit bis zu drei Buttons und einer Fortschrittsanzeige. Bisher ist das zusammengefrickelt mit Shapes, Buttons und Images, und der ganze Code wird auf der Form erledigt (Verschieben per Drag&Drop, Umrechnung des Fortschritts von Sekunden in Pixel etc.). Das muss mal besser gemacht werden.
The angels have the phone box.
  Mit Zitat antworten Zitat