Ir al contenido


Foto

Problema mostrando la posición en segundos/minutos de una canción


  • Por favor identifícate para responder
4 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 julio 2009 - 06:24

Tengo el siguiente code:



delphi
  1. procedure TForm1.tmRemainTimer(Sender: TObject);
  2. var  min, Sec: String;
  3. begin
  4.   sec := IntToStr((Gauge1.Progress div 1000) - (((Gauge1.Progress div 1000) div 60) * 60));
  5.   min := IntToStr((Gauge1.Progress div 1000) div 60);
  6.   lbTimePos.Caption := FormatFloat('00',StrToFloat(min))+':'+FormatFloat('00',StrToFloat(sec));
  7. end;



El problema es que no está mostrando correctamente el tiempo que ha pasado, por ejemplo una canción de 45 segundos y cada 1 segundo me muestra 2:43 minutos (a veces 2:55 otras 3:10, etc) al final me muestra 131:15 o 129:00, el timer está a 1000, no sé que mal hago.

Saludos.
  • 0

#2 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 17 julio 2009 - 12:43

Pues yo lo hago así­ no se si te sirva



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   Timer1.Enabled:= true;
  4.   Start:=GetTickCount;
  5. end;
  6.  
  7. procedure TForm1.Timer1Timer(Sender: TObject);
  8. var
  9.   mili: longint;
  10.   sec: longint;
  11.   min: longint;
  12. begin
  13.   mili:= GetTickCount-Start;
  14.   sec:= (mili div 1000) - (((mili div 1000) div 60) * 60);
  15.   min:= (mili div 1000) div 60;
  16.   lbTimePos.Caption := FormatFloat('00',min)+':'+FormatFloat('00',sec);
  17. end;





delphi
  1. object Form1: TForm1
  2.   Left = 0
  3.   Top = 0
  4.   Caption = 'Form1'
  5.   ClientHeight = 216
  6.   ClientWidth = 426
  7.   Color = clBtnFace
  8.   Font.Charset = DEFAULT_CHARSET
  9.   Font.Color = clWindowText
  10.   Font.Height = -11
  11.   Font.Name = 'Tahoma'
  12.   Font.Style = []
  13.   OldCreateOrder = False
  14.   PixelsPerInch = 96
  15.   TextHeight = 13
  16.   object lbTimePos: TLabel
  17.     Left = 178
  18.     Top = 160
  19.     Width = 3
  20.     Height = 13
  21.   end
  22.   object Button1: TButton
  23.     Left = 160
  24.     Top = 80
  25.     Width = 75
  26.     Height = 25
  27.     Caption = 'Button1'
  28.     TabOrder = 0
  29.     OnClick = Button1Click
  30.   end
  31.   object Timer1: TTimer
  32.     Enabled = False
  33.     Interval = 1
  34.     OnTimer = Timer1Timer
  35.     Left = 200
  36.     Top = 112
  37.   end
  38. end


  • 0

#3 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 julio 2009 - 07:22

muestranos donde asignas el valor al gauge y como lo incrementas
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 17 julio 2009 - 08:17



delphi
  1. if BASS_ChannelGetPosition(Channel,BASS_POS_BYTE) <> 0 then
  2.   Gauge1.Progress := BASS_ChannelGetPosition(Channel,BASS_POS_BYTE);



El resultado es en bytes por ejemplo:  32680988, .mmm, ahora que lo veo, mmm, creo que sé donde está el problema, luego os comento :p.

Saludos.
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 17 julio 2009 - 06:17

Bueno viendolo mejor con la mente más fresca ya pude resolverlo, éste es el código:



delphi
  1. var sec, min, Mil: String;
  2. begin
  3. if BASS_ChannelGetPosition(Channel,BASS_POS_BYTE) <> 0 then
  4.   Gauge1.Progress := BASS_ChannelGetPosition(Channel,BASS_POS_BYTE);
  5.   Mil := FloatToStr(Round(BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetPosition(Channel,BASS_POS_BYTE))) * 1000); //Milliseconds
  6.   sec := InttoStr((StrToInt(Mil) div 1000) - ((((StrToInt(Mil) div 1000) div 60) * 60)));
  7.   min := InttoStr((StrToInt(Mil) div 1000) div 60);
  8.   lbTiPosA.Caption := FormatFloat('00',StrToFloat(min));
  9.   lbTiPosB.Caption := FormatFloat('00',StrToFloat(sec));
  10.   Label13.Caption := Mil;



Me está funcionando de pelos :D

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.