![]() |
Re: 'Visualissation'
Ein Beispiel:
Delphi-Quellcode:
// Diese Methode flackert, weil erst der Hintergrund gelöscht wird
// und danach gezeichnet. procedure TForm1.Timer1Timer(Sender: TObject); var p: integer; aRect: TRect; begin // Bar's zeichnen / aktualisieren if BassDLLPlayer1.Status = sndPlaying then begin aRect := PaintBox1.ClientRect; // Hintergrund der PaintBox Löschen PaintBox1.Canvas.Brush.Color := clBlack; PaintBox1.Canvas.Brush.Style := bsSolid; PaintBox1.Canvas.FillRect(aRect); //--- Obere Hälfte - LeftPeak --------------------------------- aRect.Bottom := (aRect.Bottom div 2) - 1; //Obere Hälfte der PaintBox // Ein bischen Prozentrechnung p := trunc((BassDLLPlayer1.LeftPeak / MaxPeak) * 100); aRect.Right := trunc((p * aRect.Right) / 100); PaintBox1.Canvas.Brush.Color := clRed; PaintBox1.Canvas.FillRect(aRect); //--- Untere Hälfte - RightPeak ------------------------------- aRect.Right := TmpRight; // <----<<< diese Zeile fehlte noch <----<<< aRect.Top := aRect.Bottom + 3; //Untere Hälfte der PaintBox 3 Px Abstand aRect.Bottom := aRect.Bottom * 2 + 3; // Ein bischen Prozentrechnung p := trunc((BassDLLPlayer1.RightPeak / MaxPeak) * 100); aRect.Right := trunc((p * aRect.Right) / 100); PaintBox1.Canvas.Brush.Color := clRed; PaintBox1.Canvas.FillRect(aRect); end; end; |
Re: 'Visualissation'
Zitat:
Rate mal, wofür die zweite Möglichkeit von FAlter ist. |
Re: 'Visualissation'
Bessere Variante (Antiflacker):
Delphi-Quellcode:
Das Würde ich noch in eine extra Procedure auslagern.(Übersichtlicher)
procedure TForm1.Timer1Timer(Sender: TObject);
const MaxPeak = 32768; // sollte schon in BassDLLPlayer global def. sein var p, TmpRight: integer; aRect, bRect: TRect; begin // Bar's zeichnen / aktualisieren if BassDLLPlayer1.Status = sndPlaying then begin // Leinwandgrösse ermitteln aRect := PaintBox1.ClientRect; TmpRight := aRect.Right; // Hintergrund Style für Pinsel setzen PaintBox1.Canvas.Brush.Style := bsSolid; //--- Obere Hälfte - LeftPeak --------------------------------- aRect.Bottom := (aRect.Bottom div 2) - 1; //Obere Hälfte der PaintBox // Ein bischen Prozentrechnung (p {Prozent} = Peak ist wieviel % von MaxPeak) p := trunc((BassDLLPlayer1.LeftPeak / MaxPeak) * 100); aRect.Right := trunc((p * aRect.Right) / 100); // Zeichnen des Peak-Wertes PaintBox1.Canvas.Brush.Color := clRed; // <- PaintBox1.Canvas.FillRect(aRect); // <- // oder DrawGradient(PaintBox1.Canvas, aRect, True, [clYellow, clRed]); // Rechten Rest von PaintBox berechnen bRect := aRect; bRect.Right := TmpRight; bRect.Left := aRect.Right; // Zeichnen des rechten Rests in Black PaintBox1.Canvas.Brush.Color := clBlack; PaintBox1.Canvas.FillRect(bRect); //--- Untere Hälfte - RightPeak ------------------------------- aRect.Right := TmpRight; // <----<<< diese Zeile fehlte noch <----<<< aRect.Top := aRect.Bottom + 3; // untere Hälfte der PaintBox 3 Px Abstand aRect.Bottom := (aRect.Bottom * 2) + 3; // es Fehlen ja noch 3 Px von oben // Ein bischen Prozentrechnung p := trunc((BassDLLPlayer1.RightPeak / MaxPeak) * 100); aRect.Right := trunc((p * aRect.Right) / 100); // Zeichnen des Peak Wertes PaintBox1.Canvas.Brush.Color := clRed; // <- PaintBox1.Canvas.FillRect(aRect); // <- // oder DrawGradient(PaintBox1.Canvas, aRect, True, [clYellow, clRed]); // Rechten Rest von PaintBox berechnen bRect := aRect; bRect.Right := TmpRight; bRect.Left := aRect.Right; // Zeichnen des rechten Rests in Black PaintBox1.Canvas.Brush.Color := clBlack; PaintBox1.Canvas.FillRect(bRect); end; end; Bitte verwende aussagekräftigere Namen PaintBox1 oder MyPaintBox auch wenn es mehr Arbeit beim Tippen macht, sonst verliert man nach einer Weile die Übersicht. (…und die Leute im Forum wissen nicht was Du damit meinst.) |
Re: 'Visualissation'
Beide Methoden sind sehr gut, thx.
Nur was kann ich dagegen machen, dass immer der Computer überfordert wird ? |
Re: 'Visualissation'
Was haste denn für einen ? Pentium 75 ? :mrgreen:
Ist der Timmer Interval zu klein, höher setzen > 50 oder so. |
Re: 'Visualissation'
Ich hab einen AMD AThlon mit einer guten Grafikkarte, außerdem muss das Programm auch auf anderen Computern laufen. Bei mir sind es 100%, mit 50 ist es auch nicht besser.
ICh geb mich geschlagen, ich hatte noch einen anderen Timer laufen. THX !!! |
Re: 'Visualissation'
Lager es vllt. in einen Thread aus?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz