AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TrackBar Song SetPosition
Thema durchsuchen
Ansicht
Themen-Optionen

TrackBar Song SetPosition

Ein Thema von Mazel · begonnen am 29. Apr 2006 · letzter Beitrag vom 30. Apr 2006
Antwort Antwort
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#1

TrackBar Song SetPosition

  Alt 29. Apr 2006, 23:07
Hallo,

ich bin gerade dabei einen kleinen Mediaplayer für mich zu programmieren. Dabei nutze ich die bass.dll. Nun zum Problem: ich möchte bei einem Song mit der TrackBar die Position setzen, aber das funktioniert bei mir leider nicht. Folgender Code zeigt, wie ich momentan mit der TrackBar arbeite (vereinfacht):
Delphi-Quellcode:
//zu Beginn:
TrackBar.Max:=0;
TrackBar.Position:=0;

//beim öffnen einer Datei (nach dem zuweisen von Channel):
TrackBar.Max:=GetSetSoundInfo('GetLength');

function TForm1.GetSetSoundInfo(Info: String): Int64;
var
 MilliSec: Integer;
 FloatPos: Float;

begin
 If Info = 'GetLengththen FloatPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel))
 Else If Info = 'GetPositionthen FloatPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetPosition(Channel))
 Else Result:=BASS_ChannelSeconds2Bytes(Channel, TrackBar.Position);
 If (Info = 'GetLength') or (Info = 'GetPosition') then
  begin
   MilliSec:=Trunc(1000 * FloatPos);
   If MilliSec < 0 then MilliSec:=0;
   Result:=MilliSec;
  end;
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
  TrackBar.Position:=GetSetSoundInfo('GetPosition');
end;

procedure TForm1.TrackBarChange(Sender: TObject);
begin
  BASS_ChannelSetPosition(Channel, GetSetSoundInfo('SetPosition'));
end;

end.
Wenn ich mit der Maus den Slider der TrackBar ändern will, springt er immer wieder zu der Position von davor zurück. Ich weis nicht warum das so ist. Kann mir da jemand helfen?

Als Anhang habe ich mal den noch nicht fertigen Player mit dem Problem.

Gruß
Mazel
Angehängte Dateien
Dateityp: zip player_137.zip (415,2 KB, 29x aufgerufen)
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TrackBar Song SetPosition

  Alt 30. Apr 2006, 00:04
Hallo,

du musst den Player pausieren, wenn du die TrackBar verschiebst und dann die neue Position setzen und ihn wieder starten. Ich denke, daran liegt es, doch suche mal hier im Forum: Hier im Forum suchenbass.dll TrackBar
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#3

Re: TrackBar Song SetPosition

  Alt 30. Apr 2006, 01:39
Hi

Den Player Pausieren? Das ist unschön. Mach dir ne variable mit der du den slider temporär ausschaltest (Pausierst) dazu solltest du onMouseDown, MouseUp benutzen.


Delphi-Quellcode:
Var Scroling : Boolean;

procedure TMain_Form.SliderMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Scroling:= true;
end;

procedure TMain_Form.SliderMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 With AudioPlayer do
  begin
    Scroling:= false;
    Set_TimeMS(trunc(Get_SongLength * Slider.Position / Slider.Max + 0.1));
 end;
end;

procedure TMain_Form.Slider_tmTimer(Sender: TObject);
begin
 With AudioPlayer do
  begin
  if Scroling = false then
    Slider.Position:= round((slider.Max / Get_SongLength) * Get_TimeMS+ 0.1)
  end;
end;


Wen ich en Track lade zeigt er mir die fasche Position. warum setzt du den Slider nicht direkt auf max 100?


Ansonst ist dein Code für mich verwirrend.


Du solltest dir zwei Funktionen bauen eine mit Set_SoundInfo() und die andere mit Get_SoundInfo()

Du solltest dir das anschauen http://www.delphipraxis.net/internal...ct.php?t=41480
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#4

Re: TrackBar Song SetPosition

  Alt 30. Apr 2006, 07:27
Morgen,

@Wishmaster: Mit onMouseDown und onMouseUp kann ich es leider nicht machen, da die TrackBar diese Ereignisse nicht besitzt. Ich setze den Maximalwert (Max) der TrackBar immer auf die Länge in Millisekunden des Tracks, das macht es einfacher die Position zu setzen.

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#5

Re: TrackBar Song SetPosition

  Alt 30. Apr 2006, 08:41
Trackbar mit Mouse Up und Down

mfg, Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#6

Re: TrackBar Song SetPosition

  Alt 30. Apr 2006, 09:14
Danke arbu man aber ich habe es nun gelöst, ohne MouseDown und MouseUp. Ich habe, nach Empfehlung von Wishmaster, meine Funktion so geändert, das ich nur noch Informationen lese:
Delphi-Quellcode:
function TForm1.GetSoundInfo(Info: String): Int64;
var
 MilliSec: Integer;
 FloatPos: Float;

begin
 If Info = 'GetLengththen FloatPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel))
 Else If Info = 'GetPositionthen FloatPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetPosition(Channel));
 MilliSec:=Trunc(1000 * FloatPos);
 If MilliSec < 0 then MilliSec:=0;
 Result:=MilliSec;
end;
Für die Trackbar habe ich nun folgenden Code aufgenommen:
Delphi-Quellcode:
procedure TForm1.TrackBarChange(Sender: TObject);
var
 TBP, BGP: Integer; //TrackBarPosition BassGetPosition

begin
 TBP:=TrackBar.Position;
 BGP:=GetSoundInfo('GetPosition');
 If ABS(TBP - BGP) > 1000 then BASS_ChannelSetPosition(Channel, BASS_ChannelSeconds2Bytes(Channel, TrackBar.Position div 1000));
end;
Außerdem hatte ich selber einen Fehler, ich habe nicht durch 1000 dividiert, was aber bei mir wichtig ist.

Danke an alle.

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:53 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