Einzelnen Beitrag anzeigen

Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Prozentangabe zu einer Visualisation

  Alt 22. Okt 2005, 17:37
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.
  Mit Zitat antworten Zitat