AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

'Visualissation'

Ein Thema von Nils_13 · begonnen am 18. Jun 2005 · letzter Beitrag vom 20. Jun 2005
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#21

Re: 'Visualissation'

  Alt 20. Jun 2005, 19:17
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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#22

Re: 'Visualissation'

  Alt 20. Jun 2005, 19:27
Zitat von Nils_13:
Zitat von FAlter:
Zitat von Nils_13:
Delphi-Quellcode:
    for i := 0 to LKanal do
      p.Width := p.Width + 1;
     // DrawGradient
    for i := 0 to RKanal do
      p2.Width := p2.Width + 1;
Optimierungsvorschlag: Statt es in einer Schleife jedes mal um eins zu erhöhen...

Delphi-Quellcode:
inc(p.Width, LKanal + 1); //analog für rechts

//oder (falls Width ein Property ist)
p.Width := LKanal + 1 + p.Width; //analog für rechts
Ich weiß nicht, was p und p2 sein sollen??? Eventuell liegt da auch noch Optimierungsansatz.

//edit: schließenden quote-tag ergänzt
Geht nicht: der linken Seite kann nichs zugewiesen werden.


Rate mal, wofür die zweite Möglichkeit von FAlter ist.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#23

Re: 'Visualissation'

  Alt 20. Jun 2005, 20:00
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.)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Nils_13

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

Re: 'Visualissation'

  Alt 20. Jun 2005, 20:14
Beide Methoden sind sehr gut, thx.
Nur was kann ich dagegen machen, dass immer der Computer überfordert wird ?
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#25

Re: 'Visualissation'

  Alt 20. Jun 2005, 20:20
Was haste denn für einen ? Pentium 75 ?

Ist der Timmer Interval zu klein, höher setzen > 50 oder so.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Nils_13

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

Re: 'Visualissation'

  Alt 20. Jun 2005, 20:22
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 !!!
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#27

Re: 'Visualissation'

  Alt 20. Jun 2005, 20:24
Lager es vllt. in einen Thread aus?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 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