Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bass.dll und TrackBar (https://www.delphipraxis.net/62998-bass-dll-und-trackbar.html)

Nils_13 12. Feb 2006 15:45


Bass.dll und TrackBar
 
Hi,

ich mache gerade für die neue Version meines Players die TrackBar.

Ich habe eine Art "Endlos-Rekursion":
- Abspielen
- Passe die Position mit Timer an (Teil 1 der Rekursion)
- Wenn Change, dann passe an (Teil 2 der Rekursion)
Dadurch stockt es.
Wie kann ich das verhindern ? Hier der Code:
Delphi-Quellcode:
property Position: Longword read GetPosition write SetPosition;

procedure TfrmMain.SetPosition(Position: Longword);
var pos: Longword;
begin
  if Chan = 0 then Exit;

  if Modus = moSamples then
    BASS_ChannelSetPosition(Chan, BASS_ChannelSeconds2Bytes(Chan,
      position));

  if Modus = moMusik then
  begin
    startmodplaytime := timegettime - (position * 1000);
    pos := round(position * (SpeedinProzent / 100)) or $FFFF0000;
    BASS_ChannelSetPosition(Chan, pos);
  end;
end;

function TfrmMain.GetPosition: Longword;
var uptime: integer;
begin
  Result := 0;
  if Chan = 0 then Exit;

  if Modus = moSamples then
    Result := round(BASS_ChannelBytes2Seconds(Chan,
      BASS_ChannelGetPosition(Chan)));

  if Modus = moMusik then
  begin
    uptime := timegettime;
    Result := (uptime - startmodplaytime) div 1000;
  end;
end;

procedure TfrmMain.tb1Change(Sender: TObject);
begin
  if BASS_ChannelIsActive(chan) = BASS_ACTIVE_PLAYING then
  begin
    Position := tb1.Position;
  end;
end;

procedure TfrmMain.tbTimer(Sender: TObject);
var
  sectime, trackpos : Integer;
  str:string;
begin
  if BASS_ChannelIsActive(chan) = BASS_ACTIVE_PLAYING then
  begin
    tb1.Position := Position;

    sectime := trunc(BASS_ChannelBytes2Seconds(chan, BASS_ChannelGetPosition(chan)));

    str := '';
    if (sectime mod 60 < 10) then str := '0';
    str := str+inttostr(sectime mod 60);
    str := inttostr(sectime div 60)+':'+str;

    tbtime.Caption := str;
  end;
end;

Nils_13 13. Feb 2006 12:02

Re: Bass.dll und TrackBar
 
Keiner eine Idee ? :(

arbu man 13. Feb 2006 13:58

Re: Bass.dll und TrackBar
 
Damit man die trackbar problemlos verschieben kann musst du bei trackbar.onmousedown den timer deaktivieren und bei mouseup den timer wieder aktivieren und die position des tracks in der bass.dll zu weisen.

Nils_13 13. Feb 2006 16:59

Re: Bass.dll und TrackBar
 
Ich habe da kein MouseDown :gruebel:

Oder gibt es da Komponenten ?

arbu man 13. Feb 2006 17:38

Re: Bass.dll und TrackBar
 
Immer wieder hilfreich JVCL - Die trackbar kompo hat das und noch viel mehr...

Nils_13 13. Feb 2006 18:43

Re: Bass.dll und TrackBar
 
Gibt es da noch andere ? Die JVCL-Komponenten machen mir gerade ziemliche Schwierigkeiten.

Nils_13 14. Feb 2006 15:41

Re: Bass.dll und TrackBar
 
Danke. Jetzt läuft sie endlich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 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