AGB  ·  Datenschutz  ·  Impressum  







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

TrackBar und richtige Position setzen

Ein Thema von Mazel · begonnen am 1. Mai 2006 · letzter Beitrag vom 1. Mai 2006
Antwort Antwort
Benutzerbild von Mazel
Mazel

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

TrackBar und richtige Position setzen

  Alt 1. Mai 2006, 09:05
Hallo,

Ich habe mir die TrackBar Komponente mit den MouseDown und MouseUp Ereignissen geladen. Dies TrackBar dient mir dazu um die Song Position zu setzen. Diese funktioniert aber ich bekomme keine genauen Positionen. Es wird zu stark gerundet.

Vorher hatte ich es mit WndProc versucht:
Delphi-Quellcode:
rocedure TForm1.WndProc(var Msg: TMessage);
var
 Pos: TPoint;

begin
 If Msg.Msg = WM_LBUTTONDOWN then
  begin
   Pos:=Mouse.CursorPos;
   If SoundObject <> nil then //wenn ein Song abgespielt wird
    begin
     If (Pos.Y >= TrackBar.Top + 7) and (Pos.Y <= TrackBar.Top + 13) then
      begin
       //hier kommt der Code zum setzen der Position im Song
      end;
    end;
  end;
 inherited;
end;
Wie kann ich die Position genau 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
 
#2

Re: TrackBar und richtige Position setzen

  Alt 1. Mai 2006, 10:41
Trackbar.Position liefert die aktuelle Position zurück und du kanst Trackbar.Position auch eine Position zuweisen.
Nur was meinst du mit zustark gerundet weist du der Track die länge des Liedes in Sekunden oder MiliSekunden zu ?
Wenn du es genau haben möchstest mussst du milisekunden nehmen.
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
 
#3

Re: TrackBar und richtige Position setzen

  Alt 1. Mai 2006, 13:43
Hi,

Beim Laden der Datei weise ich TrackBar.Max die Länge der Datei in Milisekunden zu. Hier mal wie es bis jetzt ist (ich arbeite mit der bass.dll):
Delphi-Quellcode:
function TForm1.GetSoundInfo(Info: String): Int64;
var
 MilliSec: Integer;
 FloatPos: Float;

begin
 If Info = 'GetLengththen FloatPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel)) //wird beim zuweisen abgerufen
 Else If Info = 'GetPositionthen FloatPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetPosition(Channel));
 MilliSec:=Trunc(1000 * FloatPos);
 If MilliSec < 0 then MilliSec:=0;
 Result:=MilliSec;
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
 If SoundObject <> nil then //wenn ein Sound gespielt wird
  begin
   TrackBar.Position:=GetSoundInfo('GetPosition');
  end;
end;

procedure TForm1.TrackBarChange(Sender: TObject);
var
 TBP, BGP: Integer;

begin
 TBP:=TrackBar.Position;
 BGP:=GetSoundInfo('GetPosition');
 If ABS(TBP - BGP) > 1000 then BASS_ChannelSetPosition(Channel, BASS_ChannelSeconds2Bytes(Channel, TrackBar.Position div 1000));
end;

procedure TForm1.TrackBarMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 If X > 8 then
  begin
   TrackBar.Position:=Trunc(X * (TrackBar.Max + 8) / (TrackBar.Width - 16)) - ((TrackBar.Max div Width) * 10);
  end;
 end;
Wenn ich aber nun auf die TrackBar klicke, dann ist der Slider, je weiter rechts ich auf die TrackBar klicke, nicht dort, wo ich die Maus hatte.

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
 
#4

Re: TrackBar und richtige Position setzen

  Alt 1. Mai 2006, 13:48
Ich würde es so machen:

Code:
procedure Timer
begin
  if aus then exit;
  trackbar.position := getposition;
end;

procedure mousedown
begin
  aus:=true;
end;

procedure mouseup
begin
  aus:=false;
  song.position := trackbar.position;
end;
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

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

Re: TrackBar und richtige Position setzen

  Alt 1. Mai 2006, 13:51
Oder eine eigene Trackbar ableiten und das entsprechende Ereignis implementieren.
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

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

Re: TrackBar und richtige Position setzen

  Alt 1. Mai 2006, 13:56
Das "Setzen" an sich ist nicht das Problem, sondern das der Slider nicht an der richten Position (Differenz etwa 10 Pixel) nach dem loslassen der Maus ist. Wie ich schon schrieb, wenn ich ziemlich weit am Ende auf die TrackBar klicke dann liegt der Slider 10 Pixel vor der Position auf die ich geklickt habe.

Auf dem Bild ist es beschriben wie ich es meine, dort wo der schwarze Strich ist, dort habe ich mit der Maus hingeklickt.
Miniaturansicht angehängter Grafiken
bild_948.jpg  
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: TrackBar und richtige Position setzen

  Alt 1. Mai 2006, 14:08
Hallo Marcel,

wie kommst du zu dieser merkwürdigen Umrechnungsformel?

TrackBar.Position:=Trunc(X * (TrackBar.Max + 8) / (TrackBar.Width - 16)) - ((TrackBar.Max div Width) * 10); Wenn TrackBar.Min = 0 ist, sollte das doch so aussehen:

TrackBar.Position := X * TrackBar.Max DIV TrackBar.Width; Oder mache ich nun einen Denkfehler?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

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

Re: TrackBar und richtige Position setzen

  Alt 1. Mai 2006, 14:34
Im Prinzip ist es so richtig aber die eigentliche TrackBar (also wo der Slider zu Beginn sitzt) ist nicht bei 0 Pixel sondern bei 8 Pixel, daher muss ich
TrackBar.Position := (X - 8) * TrackBar.Max div TrackBar.Width; verwenden. Aber trotzdem ist danach der Slider nicht an der der Position wo die Maus ist, immer etwas weiter links von der Maus.

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 14:06 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