Bessere Variante (Antiflacker):
Delphi-Quellcode:
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;
Das Würde ich noch in eine extra Procedure auslagern.(Übersichtlicher)
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.)