unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls,
StdCtrls, Buttons, PasLibVlcPlayerUnit, vlc;
type
{ TForm1 }
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
PasLibVlcPlayer1: TPasLibVlcPlayer;
SeekBarSlider: TPanel;
SeekBar: TPanel;
SeekBarFrame: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
procedure PasLibVlcPlayer1MediaPlayerLengthChanged(Sender: TObject;
time: Int64);
procedure PasLibVlcPlayer1MediaPlayerTimeChanged(Sender: TObject;
time: Int64);
procedure SeekBarFrameMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SeekBarMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SeekBarSliderMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SeekBarSliderMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure SeekBarSliderMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
Seeking: Boolean;
SeekMouseX, SeekBaseX, MaxPos, TotalVideoPos, seekPerc, perc: Integer;
vidlenMS, NewX, MaxX, perc64: Int64;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.SeekBarFrameMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if not SeekBarSlider.Visible then Exit;
dec(X, SeekBarSlider.Width DIV 2);
end;
procedure TForm1.PasLibVlcPlayer1MediaPlayerLengthChanged(Sender: TObject;
time: Int64);
begin
TotalVideoPos := PasLibVlcPlayer1.GetVideoLenInMs();
end;
procedure TForm1.PasLibVlcPlayer1MediaPlayerTimeChanged(Sender: TObject;
time: Int64);
begin
//SeekBarSlider.Left := PasLibVlcPlayer1.GetVideoPosInMs();
end;
procedure TForm1.SeekBarMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var P: TPoint;
begin
P := SeekBarFrame.ScreenToClient(SeekBar.ClientToScreen(Point(X, Y)));
SeekBarFrameMouseDown(Sender, Button, Shift, P.X, P.Y);
end;
procedure TForm1.SeekBarSliderMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button <> mbLeft then Exit;
Seeking := True;
SeekBarSlider.BevelInner := bvLowered;
SeekMouseX := X;
SeekBaseX := SeekBarSlider.Left;
end;
procedure TForm1.SeekBarSliderMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not (ssLeft in Shift) OR not (Seeking) then Exit;
NewX := X - SeekMouseX + SeekBarSlider.Left;
MaxX := SeekBarFrame.ClientWidth - SeekBarSlider.Width;
if NewX < 0 then NewX := 0;
if NewX > MaxX then NewX := MaxX;
SeekBarSlider.Left := NewX;
vidlenMS:=PasLibVlcPlayer1.GetVideoLenInMs;
if NewX > 0 then begin
seekPerc:=(vidlenMS div MaxX) * NewX;
end;
Form1.Caption:='Length in MS: ' + IntToStr(vidlenMS) + ' Seek To:' + IntToStr(seekPerc)
+ ' Percentage: ' + IntToStr(NewX);
end;
procedure TForm1.SeekBarSliderMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button <> mbLeft then Exit;
Seeking := False;
SeekBarSlider.BevelInner := bvRaised;
PasLibVlcPlayer1.SetVideoPosInMs(seekPerc);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
PasLibVlcPlayer1.Play(WideString(OpenDialog1.FileName));
end;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
PasLibVlcPlayer1.Resume();
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
PasLibVlcPlayer1.Pause();
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
PasLibVlcPlayer1.Stop();
end;
end.