Hi,
ich habe eine Visualisation. Sie wird in zwi Balken dargestellt (left peak, right peak). Ich möchte für den left-Peak eine Prozentangabe in einem Label darstellen und in einem anderem Label auch noch den right-Peak.
Delphi-Quellcode:
procedure TForm1.visTimer(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 = Playing then
begin
if IsIconic(Application.Handle) then Exit;
aRect := PaintBox1.ClientRect;
TmpRight := aRect.Right;
PaintBox1.Canvas.Brush.Style := bsSolid;
//--- Obere Hälfte - LeftPeak ---------------------------------
aRect.Bottom := (aRect.Bottom div 2) - 1;
// Ein bischen Prozentrechnung
p := trunc((BassDLLPlayer1.RightPeak / MaxPeak) * 100);
aRect.Right := trunc((p * aRect.Right) / 100);
// Zeichnen DrawGradient
DrawGradient(PaintBox1.Canvas, aRect, True, [clYellow, clRed]);
// Rechten Rest von PaintBox berechnen
bRect := aRect;
bRect.Right := TmpRight;
bRect.Left := aRect.Right;
// Zeichnen
PaintBox1.Canvas.Brush.Color := clBlack;
PaintBox1.Canvas.FillRect(bRect);
//--- Untere Hälfte - RightPeak -------------------------------
aRect.Right := TmpRight; //
aRect.Top := aRect.Bottom + 1; //Untere Hälfte der PaintBox 3 Px Abstand
aRect.Bottom := aRect.Bottom * 2 + 0;
// Ein bischen Prozentrechnung
p := trunc((BassDLLPlayer1.LeftPeak / MaxPeak) * 100);
aRect.Right := trunc((p * aRect.Right) / 100);
// Zeichnen DrawGradient
DrawGradient(PaintBox1.Canvas, aRect, True, [clYellow, clRed]);
// Rechten Rest von PaintBox berechnen
bRect := aRect;
bRect.Right := TmpRight;
bRect.Left := aRect.Right;
// Zeichnen
PaintBox1.Canvas.Brush.Color := clBlack;
PaintBox1.Canvas.FillRect(bRect);
end else
begin
PaintBox1.Canvas.Brush := Panel1.Parent.Brush;
PaintBox1.Canvas.FillRect(PaintBox1.ClientRect);
end;
end;
Die Methode einfach
lpeak.Caption := IntToStr(aRect.Right) + '%';
zu nehmen macht doch keinen Sinn, oder ? Denn da ist es ja vom Width-Wert der PaintBox abhängig, da sich ja das rechteck bis zum rechten Rand der PaintBox bewegt.