Paintbox Hintergrundfarbe
Hi,
ich verwende eine Unit welche eine Spektrum Visualisierung in einer Paintobx anzeigt. Die Hintergrundfarbe hinter den Vis Balken kann man einstellen doch was muss ich da machen damit ich einen transparenten Hintergrund habe in der Paintbox? Wenn ich das mit der BackColor einfach weglasse ist sie Schwarz. |
Re: Paintbox Hintergrundfarbe
Schau mal im OnPaint() der Klasse nach, ob dort irgendwo ein Canvas.Rectangle() oder etwas anderes in der Art über die ganze Größe der PaintBox mit der Farbe gezeichnet wird. Wenn ja, dann das mal auskommentieren. Sollten dann die Balken von vorherigen Bildern stehen bleiben, hilft meistens Invalidate() weiter.
|
Re: Paintbox Hintergrundfarbe
Wenn ich die Rectangle Sachen auskommentiere dann kommt einmal der Effekt dass wie du schon gesagt hast die Balken immer da bleiben aber die Hintergrundfarbe ist immernoch weiß. Vielleicht wisst ihr ja weiter. Hier der Code der Spectrum Vis: (Habe alle meine Änderungen rausgenommen da das wahrscheinlich nicht richtig war)
Delphi-Quellcode:
unit spectrum_vis;
{ Spectrum Visualyzation by Alessandro Cappellozza version 0.8 05/2002 [url]http://digilander.iol.it/Kappe/audioobject[/url] } interface uses Windows, Dialogs, Graphics, SysUtils, CommonTypes, Classes, BassDLLPlayer; type TSpectrum = Class(TObject) private VisBuff : TBitmap; BackBmp : TBitmap; BkgColor : TColor; SpecHeight : Integer; PenColor : TColor; PeakColor: TColor; DrawType : Integer; DrawRes : Integer; FrmClear : Boolean; UseBkg : Boolean; PeakFall : Integer; LineFall : Integer; ColWidth : Integer; ShowPeak : Boolean; FFTPeacks : array [0..128] of Integer; FFTFallOff : array [0..128] of Integer; public Constructor Create (Width, Height : Integer); procedure Draw(HWND : THandle; FFTData : TFFTData; X, Y : Integer); procedure SetBackGround (Active : Boolean; BkgCanvas : TGraphic); property BackColor : TColor read BkgColor write BkgColor; property Height : Integer read SpecHeight write SpecHeight; property Width : Integer read ColWidth write ColWidth; property Pen : TColor read PenColor write PenColor; property Peak : TColor read PeakColor write PeakColor; property Mode : Integer read DrawType write DrawType; property Res : Integer read DrawRes write DrawRes; property FrameClear : Boolean read FrmClear write FrmClear; property PeakFallOff: Integer read PeakFall write PeakFall; property LineFallOff: Integer read LineFall write LineFall; property DrawPeak : Boolean read ShowPeak write ShowPeak; end; var Spectrum : TSpectrum; implementation Constructor TSpectrum.Create(Width, Height : Integer); begin VisBuff := TBitmap.Create; BackBmp := TBitmap.Create; VisBuff.Width := Width; VisBuff.Height := Height; BackBmp.Width := Width; BackBmp.Height := Height; BkgColor := clBlack; SpecHeight := 100; PenColor := clWhite; PeakColor := clYellow; DrawType := 0; DrawRes := 1; FrmClear := True; UseBkg := False; PeakFall := 1; LineFall := 3; ColWidth := 5; ShowPeak := True; end; procedure TSpectrum.SetBackGround (Active : Boolean; BkgCanvas : TGraphic); begin UseBkg := Active; BackBmp.Canvas.Draw(0, 0, BkgCanvas); end; procedure TSpectrum.Draw(HWND : THandle; FFTData : TFFTData; X, Y : Integer); var i, YPos : LongInt; YVal : Single; begin if FrmClear then begin VisBuff.Canvas.Pen.Color := BkgColor; VisBuff.Canvas.Brush.Color := BkgColor; VisBuff.Canvas.Rectangle(0, 0, VisBuff.Width, VisBuff.Height); if UseBkg then VisBuff.Canvas.CopyRect(Rect(0, 0, BackBmp.Width, BackBmp.Height), BackBmp.Canvas, Rect(0, 0, BackBmp.Width, BackBmp.Height)); end; VisBuff.Canvas.Pen.Color := PenColor; for i := 0 to 128 do begin YVal := Abs(FFTData[(i * DrawRes) + 5]); YPos := Trunc((YVal) * 500); if YPos > Height then YPos := SpecHeight; if YPos >= FFTPeacks[i] then FFTPeacks[i] := YPos else FFTPeacks[i] := FFTPeacks[i] - PeakFall; if YPos >= FFTFallOff[i] then FFTFallOff[i] := YPos else FFTFallOff[i] := FFTFallOff[i] - LineFall; if (VisBuff.Height - FFTPeacks[i]) > VisBuff.Height then FFTPeacks[i] := 0; if (VisBuff.Height - FFTFallOff[i]) > VisBuff.Height then FFTFallOff[i] := 0; case DrawType of 0 : begin VisBuff.Canvas.MoveTo(X + i, Y + VisBuff.Height); VisBuff.Canvas.LineTo(X + i, Y + VisBuff.Height - FFTFallOff[i]); if ShowPeak then VisBuff.Canvas.Pixels[X + i, Y + VisBuff.Height - FFTPeacks[i]] := Pen; end; 1 : begin if ShowPeak then VisBuff.Canvas.Pen.Color := PeakColor; if ShowPeak then VisBuff.Canvas.MoveTo(X + i * (ColWidth + 1), Y + VisBuff.Height - FFTPeacks[i]); if ShowPeak then VisBuff.Canvas.LineTo(X + i * (ColWidth + 1) + ColWidth, Y + VisBuff.Height - FFTPeacks[i]); VisBuff.Canvas.Pen.Color := PenColor; VisBuff.Canvas.Brush.Color := PenColor; VisBuff.Canvas.Rectangle(X + i * (ColWidth + 1), Y + VisBuff.Height - FFTFallOff[i], X + i * (ColWidth + 1) + ColWidth, Y + VisBuff.Height); end; end; end; BitBlt(HWND, 0, 0, VisBuff.Width, VisBuff.Height, VisBuff.Canvas.Handle, 0, 0, srccopy) end; end. |
Re: Paintbox Hintergrundfarbe
Das ist das Beispiel von der bass.dll oder? Ich denke, man kann die Transparenz dabei nur faken, indem man am Anfang einmal das Hintergrundbild passend initialisiert (procedure SetBackGround). Dann sollte das klappen. Wenn sich der Hintergrund zur Laufzeit ändern kann, muss man entsprechend auch diese Prozedur öfter aufrufen.
|
Re: Paintbox Hintergrundfarbe
Klingt irgendwie ganz richtig aber wie mache ich das? Muss ich das in meiner Anwendung oder in der Unit machen?
|
Re: Paintbox Hintergrundfarbe
Das passende Hintergrundbild bestimmen machst du in der Anwendung, denn die Unit kann ja nicht wissen, wie dein Fenster aussieht. Und dann rufst du Spectrum.SetBackground(True, DeineGrafik); auf.
|
Re: Paintbox Hintergrundfarbe
Ja aber ich will doch gar kein Hintergrundbild.
|
Re: Paintbox Hintergrundfarbe
...dewegen hab ich ja von Transparenz "faken" gesprochen. Nimm als Hintergrund das Bild, das man sehen würde, wenn man nichts in die Paintbox malt.
|
Re: Paintbox Hintergrundfarbe
Geht nicht da dahinter ein Farbverlauf ist der seine Farbe auch mal ändert.
|
Re: Paintbox Hintergrundfarbe
Zeig mal nen Screenshot.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 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