![]() |
TrackBar OnMouse Event????
Hi!
Ich programmiere gerade an einen Mediaplayer und habe ein Problem. Ich lasse über die Länge einer Datei eine Trackbar mitlaufen, das funktioniert auch. Nur möchte ich jetzt durch verschieben des Trackbar reiters vor und zurück Spulen. Da es nicht mit einem Trackbar onChange ereignis funktioniert wollte ich es mit einem Mousedown and up event versuchen nur gibt es das nicht. In der Delohi Hilfe steht das man KeyDown und Keyup auch die Maustasten abfragen kann, das funktioniert aber nicht. Source:
Delphi-Quellcode:
Ps.: KeyPreview ist aktiviert.
procedure TForm1.Timer1Timer(Sender: TObject);
begin if Form1.MediaPlayer1.Mode = mpPlaying then //wenn der Player spielt soll er.. begin Form1.TrackBar1.Max := Form1.MediaPlayer1.Length;//.. TrackbarMax auf die länge der Datei setzen ... Form1.Trackbar1.Position := Form1.MediaPlayer1.Position;{.. und die Trackbar Position mit der des Mediaplayers gleichsetzen} end; end; procedure TForm1.TrackBar1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin {Wenn die Linke Maustaste gedrückt ist (auf der Trackbar) dann soll der Mediaplayer stoppen} if (Key=VK_LBUTTON) then begin Form1.MediaPlayer1.Stop; end; end; procedure TForm1.TrackBar1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin {Wenn die linke Maustaste wieder losgelassen wird soll der Mediaplayer die auf der Trackbar eingestellte Position übernehmen und anschließend wieder spielen} if (Key=VK_LBUTTON) then begin mediaplayer1.Position := TrackBar1.Position; MediaPLayer1.Play; end; end; Ich denke das es von der Logik her richtig ist, nur fehlt mir die Richtige Syntax. Dieser Source bringt mir nur Exception Error:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin if Form1.MediaPlayer1.Mode = mpPlaying then //wenn der Player spielt soll er.. begin Form1.TrackBar1.Max := Form1.MediaPlayer1.Length;//.. TrackbarMax auf die länge der Datei setzen ... Form1.Trackbar1.Position := Form1.MediaPlayer1.Position;{.. und die Trackbar Position mit der des Mediaplayers gleichsetzen} end; end; procedure TForm1.Trackbar1Change(Sender: TObject); begin Form1.mediaplayer1.stop; mediaplayer1.Position := TrackBar1.Position; Form1.mediaPLayer1.play; end; Kann mir da bitte wer weiter helfen. Mfg chros [edit=chros]Delphi-Tags eingefügt. Mfg, chros[/edit] |
Re: TrackBar OnMouse Event????
Da hatten wir schon mal so was gemacht:
![]() Kannst ja auch nochmal hier nachschauen: [dp]*player* *trackbar*[/dp] Den Quellcode könnteste mal etwas lesbare machen (Delphi-Code)) Deinen Beitrag kannst du 24 Stunden lang noch bearbeiten (EDIT) ![]() z.B.
Delphi-Quellcode:
Ein Delphi-Code
... |
Re: TrackBar OnMouse Event????
Danke für den Tip! Aber das ist nicht das was ich brauche!
Das die Trackbar mit dem Lied mitläuft funktioniert ja einwandfrei. Mein Problem liegt darin das wenn ich das vor und zurückspielen in ein Trackbar on Change ereignis anwende bekomme ich einen Exception Error, da auch ein Change Event auftritt wenn der TMediaplayer die Trackbar ändert. Darum wollte ich es mit einem OnMouseDown event und einem MouseUp event machen, dass es aber leider nicht gibt. Darum habe ich gehofft das jemand eine andere Lösungsmöglichkeit hat?! Mfg Chros |
Re: TrackBar OnMouse Event????
Hai chros,
Zitat:
|
Re: TrackBar OnMouse Event????
Aus dem anderen Beitrag:
Delphi-Quellcode:
Wie du dort sehen wirst, hab ich diese Problem durch eine kleine Abrage gelöst.
{Timer1.Interval := 300;}
{TrackBar1.Max := MediaPlayer1.Length div 1000;} Procedure TForm1.Timer1Timer(Sender: TObject); Begin (* TrackBar-Position an die MediaPlayer-Position anpassen *) TrackBar1.Position := MediaPlayer1.Position div 1000; End; Procedure TForm1.TrackBar1Change(Sender: TObject); Var TBP, MPP: Integer; Begin TBP := TrackBar1.Position; MPP := MediaPlayer1.Position div 1000; (* MediaPlayer-Position an die TrackBar-Position anpassen, * * wenn der Unterschied grösser als 2 Sekunden ist *) If ABS(TBP - MPP) > 2 Then MediaPlayer1.Position := TBP * 1000; End;
Delphi-Quellcode:
Dadurch wird die MediaPlayer-Position nur bei einer grösseren Änderung (> 2 Sekunden) geändert.
If ABS(TBP - MPP) > 2 Then
Alternativ währe auch der Einsatz einer zusätzlichen Variable möglich.
Delphi-Quellcode:
{Timer1.Interval := 300;}
{TrackBar1.Max := MediaPlayer1.Length div 1000;} Var setzen: Boolean = True; {*} Procedure TForm1.Timer1Timer(Sender: TObject); Begin setzen := False; {*} TrackBar1.Position := MediaPlayer1.Position div 1000; setzen := True; {*} End; Procedure TForm1.TrackBar1Change(Sender: TObject); Var TBP, MPP: Integer; Begin If setzen Then Exit; {*} TBP := TrackBar1.Position; MPP := MediaPlayer1.Position div 1000; If ABS(TBP - MPP) > 2 Then MediaPlayer1.Position := TBP * 1000; End; |
Re: TrackBar OnMouse Event????
Danke Himitsu, hat wunderbar funktioniert.
Auf die Idee mit den 2 Sekunden muß man mal kommen!!! Einfach genial! :thuimb: Mfg chros |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz