Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi PaintBox bzw. Spectrum transparent machen? (https://www.delphipraxis.net/140891-paintbox-bzw-spectrum-transparent-machen.html)

AlexII 28. Sep 2009 13:01


PaintBox bzw. Spectrum transparent machen?
 
Ich habe auf einer PaintBox ein Spectrum von bass.dll laufen. Hintergrundfarbe ist bei mir auf
Delphi-Quellcode:
Spectrum.BackColor := clBtnFace;
gesetzt. Wenn ich allerdings andere Skins für das Prog verwende passt die Hintergrundfarbe der PaintBox nicht zum Skin.

Wer sagt mir wie ich Spectrum transparent mache? Danke!

himitsu 28. Sep 2009 13:07

Re: PaintBox bzw. Spectrum transparent machen?
 
Du könntest statt .BackColor ein .BackImage angeben, welches dem Bildausschnitt hinter dem Specktrum entspricht.

Man könnte auch garkeinen Hintergrund zeichnen und dafür vor einem Neuzeichnen den original Hintergrund sich neu zeichnen lassen (Parent.Repaint oder so), aber das wird wohl dann mehr blinken.

AlexII 28. Sep 2009 13:14

Re: PaintBox bzw. Spectrum transparent machen?
 
Ich hab die property .BackImage nicht, habe D7 PE und wenn Parent.Repaint mehr blinkt ist das schlecht.

Gibt's noch irgendwelche Möglichkeiten? :gruebel:

Gausi 28. Sep 2009 13:29

Re: PaintBox bzw. Spectrum transparent machen?
 
Wenn du das Spectrum von der Visualisierung der bass.dll genommen hast, dann gibt es da auch eine Background-Image-Property. Da musst du den passenden Teil deines Hintergrund-Skins hineinkopieren, und evtl. noch die Eigenschaft UseBackGroundImage oder so aktivieren.
Schau mal in den Code der Spectrum-Unit, da sollte das klar werden.

himitsu 28. Sep 2009 13:36

Re: PaintBox bzw. Spectrum transparent machen?
 
das mit dem BackImage war nur ein Beispiel ... kenn die Komponente ja nicht,

aber ges geht halt darum, daß du erst den Hintergrund (keine Farbe, sondern ebem ein Bild dem Style entsprechend) neu zeichnen mußt und dann darauf dann das Spectrum.

Da die PaintBox ja nun keinen Puffer hat und demnach immer alles sofort gezeichnet wird, gibt es also immer eine kurze Phase, wo nur der Hintergrund da ist und dann das Spectrum neu gezeichnet wird ... ergo, es blinkt.

Lösung wären:

- Erstmal alles in ein temporäres Bitmap reinzeichnen und das Bitmap dann nur noch komplett auf die PaintBox kopieren

- Oder nur die Änderungen zeichnen ... also z.B. zu kurze Balken (im Verhältnis zum vorherigen Bild) des Specktrums verlängern und da den jeweiligen Balken neu zeichnen.
Und zu lange Balken verkürzen, also nur an diesen Stellen den Hintergrund reinkopieren.


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