Einzelnen Beitrag anzeigen

Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: AudioDB 5.3.2.2 - Internet-Stream & Audio-Player

  Alt 24. Aug 2007, 19:58
Zitat von dominikkv:
nÖ...nix...nicht mal in der konsole.
und am lied kanns nicht liegen, ich hab mehrere probiert.
komisch ist nur das im open-dialog der button der eigendlich mit "Öffnen" beschriftet ist mit "Speichern" beschriftet ist.
Überaus Mysteriös! Ich habe im ganzen Projekt nur ein (1) TSaveDialog verwendet, in einer anderen Klasse, um genauer zu sein, zum Speichern der Playlist. In der Player-Klasse & im Player-Fenster gibt es nur ein TOpenDialog. Das was Du beschreibst dürfte, nein, kann eigentlich garnicht vorkommen! Ich gucke mir das Problem nochmal genauer an.

Zitat von dominikkv:
Zitat von Dunkel:
Zitat von dominikkv:
Zitat von Dunkel:
TImage.Canvas
ok...das ist ein bisschen zu hoch für mich^^
Quatsch! So schwer ist das nicht! Mit ein wenig experimentieren kriegt man das recht gut hin.
Aber ich hab das noch nie gemacht... und hab kein plan wie das geht^^
gibts da nen tut oder so?
So male ich die Trackbar, benutze es mal als "Inspiration"
Delphi-Quellcode:
procedure TF_Player.TrackBar_Draw;
  function ChangeColor(InputColor: TColor; Base, Val: Extended): TColor;
  var
    r,g,b: extended;
  begin
    Val:= 255/(Base+1)*Val;
    Base:=255;
    // Grab RGB values
    r := GetRValue(InputColor);
    g := GetGValue(InputColor);
    b := GetBValue(InputColor);
    // Do the operation
    r := r-((Val/Base)*100);
    g := g-((Val/Base)*100);
    b := b-((Val/Base)*100);
    // Check whether result is in range
    if r > 255 then
      r := 255;
    if r < 0 then
      r := 0;
    if g > 255 then
      g := 255;
    if g < 0 then
      g := 0;
    if b > 255 then
      b := 255;
    if b < 0 then
      b := 0;
    Result := RGB(byte(Round(r)),byte(Round(g)),byte(Round(b)));
  end;
var
  i: integer;
  XX, YY: integer;
  TempBMP: TBitmap;
  PlayerPos: integer;
const
  NetStreamScrollerWidth = 80;
begin
  YY:= 0;
  PlayerPos:= TrackBar_PercentToPos(fPlayer.PosElapsedPercent); // die aktuelle Player-Position in Prozent

  TempBMP:= TBitmap.Create;
  TempBMP.Height:= PB_TrackBar.Height;
  TempBMP.Width:= PB_TRackBar.Width;
  TempBMP.Canvas.Brush.Color:= clWhite;
  TempBMP.Canvas.FillRect(TempBMP.Canvas.ClipRect);

  if not fPlayer.IsNetStream then // der aktuelle Track ist kein NetStream
    begin

      if fPlayer.PlayerState = psPlay then // der aktuelle Track wird abgespielt
        if TrackBar_ScrollerCounter <= GetTickCount then
          begin
            TrackBar_ScrollerCounter:= GetTickCount +75;
            Inc(TrackBar_Scroller);
            if TrackBar_Scroller Mod 13 = 0 then
              TrackBar_Scroller:= 0;

        end;

      for i:=0 to PlayerPos do
        begin
          YY:=0;
          if i= 0 then YY:= 3;
          if i= 1 then YY:= 2;
          if i= 2 then YY:= 1;
          if i= PB_TRackBar.Width-1 then YY:= 3;
          if i= PB_TRackBar.Width-2 then YY:= 2;
          if i= PB_TRackBar.Width-3 then YY:= 1;


          TempBMP.Canvas.Pen.Color:= ChangeColor(Color_TrackBar, PlayerPos, i); // TempBMP.Width
          TempBMP.Canvas.MoveTo(i, 0+YY);
          TempBMP.Canvas.LineTo(i, TempBMP.Height-YY);

          if i MOD 13 = TrackBar_Scroller then
            begin
              TempBMP.Canvas.Pen.Color:= ChangeColor(Color_TrackBar, 500, i);
              TempBMP.Canvas.MoveTo(i-3, 1+YY);
              TempBMP.Canvas.LineTo(i, TempBMP.Height-1-YY);
            end;


        end;

      if fPlayer_RepeatMode = 4 then // Loop A-B
        begin
          if fPlayer.RepeatABPosASec>= 0 then
            begin
              xx:= TrackBar_SecToPos(Round(fPlayer.RepeatABPosASec));
              TempBMP.Canvas.Pen.Color:= COLOR_TrackBarRepeatAB;
              TempBMP.Canvas.MoveTo(xx-3, 0);
              TempBMP.Canvas.LineTo(xx, TempBMP.Height div 2);
              TempBMP.Canvas.LineTo(xx-3, TempBMP.Height);
              TempBMP.Canvas.LineTo(xx-3,0);
            end;

          if fPlayer.RepeatABPosBSec>= 0 then
            begin
              xx:= TrackBar_SecToPos(Round(fPlayer.RepeatABPosBSec));
              TempBMP.Canvas.Pen.Color:= COLOR_TrackBarRepeatAB;
              TempBMP.Canvas.MoveTo(xx+3, 0);
              TempBMP.Canvas.LineTo(xx, TempBMP.Height div 2);
              TempBMP.Canvas.LineTo(xx+3, TempBMP.Height);
              TempBMP.Canvas.LineTo(xx+3,0);
            end;
        end;

      if (MouseButtonEx(TrackBar_ShiftState) = [mbeLeft]) or
         (MouseButtonEx(TrackBar_ShiftState) = [mbeRight]) then
        if (TrackBar_MouseButton= mbLeft) or (TrackBar_MouseButton= mbRight)then
          begin
            TempBMP.Canvas.Pen.Color:= clWhite;
            TempBMP.Canvas.Brush.Color:= clBlack;
            TempBMP.Canvas.Ellipse(Rect(TrackBar_MousePosX-TempBMP.Height div 3,0+YY,TrackBar_MousePosX+TempBMP.Height div 3, TempBMP.Height-YY));
          end;
    end;

  if fPlayer.IsNetStream then
    begin
      if fPlayer.PlayerState = psPlay then
        begin
          TrackBar_NetStreamScroller:= TrackBar_NetStreamScroller + 1;

          if TrackBar_NetStreamScroller > TempBMP.Width then
            TrackBar_NetStreamScroller:= -NetStreamScrollerWidth;

          TempBMP.Canvas.Brush.Color:= COLOR_Selected;
          for i:= TrackBar_NetStreamScroller to TrackBar_NetStreamScroller + NetStreamScrollerWidth do
            begin
              YY:=0;
              if i= 0 then YY:= 3;
              if i= 1 then YY:= 2;
              if i= 2 then YY:= 1;
              if i= PB_TRackBar.Width-1 then YY:= 3;
              if i= PB_TRackBar.Width-2 then YY:= 2;
              if i= PB_TRackBar.Width-3 then YY:= 1;

              if i= TrackBar_NetStreamScroller+0 then YY:= 3;
              if i= TrackBar_NetStreamScroller+1 then YY:= 2;
              if i= TrackBar_NetStreamScroller+2 then YY:= 1;
              if i= TrackBar_NetStreamScroller+NetStreamScrollerWidth-0 then YY:= 3;
              if i= TrackBar_NetStreamScroller+NetStreamScrollerWidth-1 then YY:= 2;
              if i= TrackBar_NetStreamScroller+NetStreamScrollerWidth-2 then YY:= 0;
// if i= TrackBar_NetStreamScroller+NetStreamScrollerWidth-3 then YY:= 1;



              TempBMP.Canvas.Pen.Color:= ChangeColor(Color_TrackBar, TempBMP.Width, i);
              TempBMP.Canvas.MoveTo(i, 0+YY);
              TempBMP.Canvas.LineTo(i, TempBMP.Height-YY);
            end;
        end;
    end;

  with TempBMP.Canvas do
    begin
      if not fPlayer.IsNetStream then
        begin
          if Trackbar_MouseIsInside then
            Pen.Color:= Color_Selected
          else
            Pen.Color:= clBlack;
        end
      else
        Pen.Color:= clBlack;
          
      MoveTo(3, 0);
      LineTo(PB_TRackBar.Width-4,0);
      LineTo(PB_TRackBar.Width-1,3);
      LineTo(PB_TRackBar.Width-1, PB_TRackBar.Height-4);
      LineTo(PB_TRackBar.Width-4, PB_TRackBar.Height-1);
      LineTo(3, PB_TRackBar.Height-1);
      LineTo(0, PB_TRackBar.Height-4);
      LineTo(0, 3);
      LineTo(3, 0);
    end;


  PB_TrackBar.Canvas.CopyRect(Rect(0,0,PB_TrackBar.Width, PB_TrackBar.Height), TempBMP.Canvas, TempBMP.Canvas.ClipRect);
  TempBMP.Free;
end;
Oha, ich muss mich korrigieren. Ich benutze kein TImage sondern eine TPaintBox.
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat