Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TrackBar OnMouse Event???? (https://www.delphipraxis.net/11965-trackbar-onmouse-event.html)

chros 17. Nov 2003 22:53


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:
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;
Ps.: KeyPreview ist aktiviert.

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]

himitsu 17. Nov 2003 23:18

Re: TrackBar OnMouse Event????
 
Da hatten wir schon mal so was gemacht:
reNamed: Umrechnungsprobleme bei Zeitanzeige von Sounddatei;

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)
http://www.FrankNStein.de/DPCTag+Edit.jpeg

z.B.
Delphi-Quellcode:
Ein Delphi-Code
...

chros 18. Nov 2003 15:10

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

Sharky 18. Nov 2003 15:50

Re: TrackBar OnMouse Event????
 
Hai chros,

Zitat:

Zitat von chros
...da auch ein Change Event auftritt wenn der TMediaplayer die Trackbar ändert....

setze doch einfach im OnEnter-Ereigniss der Trackbar ein Flag auf True und führe deinen Code im OnChange nur aus wenn dieses gesetzt ist. Im OnExit setzt Du das Flag dann wieder auf FALSE.

himitsu 18. Nov 2003 15:50

Re: TrackBar OnMouse Event????
 
Aus dem anderen Beitrag:
Delphi-Quellcode:
{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;
Wie du dort sehen wirst, hab ich diese Problem durch eine kleine Abrage gelöst.
Delphi-Quellcode:
If ABS(TBP - MPP) > 2 Then
Dadurch wird die MediaPlayer-Position nur bei einer grösseren Änderung (> 2 Sekunden) geändert.


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;

chros 19. Nov 2003 07:50

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