Re: [Lazarus] TProgressbar moves slowly, is there a hidden setting for faster response?

2019-05-16 Thread Bo Berglund via lazarus
On Wed, 15 May 2019 17:20:04 +0200, Sven Barth via lazarus
 wrote:

>One possible workaround I found (not tested) is this:
>
>=== code begin ===
>
>YourProgressbar.Position := YourTarget;
>YourProgressbar.Position := Your Target - 1;
>YourProgressbar.Position := YourTarget;
>
>=== code end ===
>
>You first tell the progress bar your new desired target value (which
>triggers a slow animation), then you go one step back (which will enforce a
>fast redraw) and then to the target again (which again will be a slow
>animation, but shouldn't be that slow with only one point difference).
>
>Note: I currently don't know whether the property on TProgressBar is
>Position or Value. It's been a while since I last used one ;)
>
>Note 2: you can put similar code into the click handler, though there
>without the first step probably.
>

Before I saw this reply I had already tested successfully this
structure:

YourProgressbar.Position := YourTarget + 1;
YourProgressbar.Position := YourTarget;

And it really does work, no longer the animated slow move...


-- 
Bo Berglund
Developer in Sweden

-- 
___
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus


Re: [Lazarus] TProgressbar moves slowly, is there a hidden setting for faster response?

2019-05-15 Thread Bo Berglund via lazarus
On Wed, 15 May 2019 17:13:48 +0200, Ondrej Pokorny via lazarus
 wrote:

>> I really do not want to create a panel child to implement this
>> behaviour unless I am really forced to
>
>That's what I would do. (But not a panel child but a TGraphicControl 
>descendant.)

After thinking a bit on the difference between going forwards and
backwards, I did this test:

MouseUp event used to reposition the video playing pos:

procedure TfrmMain.pgbProgressMouseUp(Sender: TObject; Button:
TMouseButton;  Shift: TShiftState; X, Y: Integer);
{Progressbar set to seconds resolution rather than milisec}
var
  Pos: double;
begin
  Pos := double(X) / pgbProgress.Width * (pgbProgress.Max -
pgbProgress.Min);
  vlcPlayer.SetVideoPosInMs(Round(Pos) * 1000);
end;

The player's TimeChanged event updates the progress bar:

procedure TfrmMain.vlcPlayerMediaPlayerTimeChanged(Sender: TObject;
time: Int64);
var
  P: int64;
begin
P := vlcPlayer.GetVideoPosInMs();
P := P div 1000; //Progressbar is in sec rather than ms
pgbProgress.Position := P + 1;
pgbProgress.Position := P ;
  end;
end;

Notice that I am now first setting the position 1 higher than
requested and then immediately backing down by 1.

AND IT WORKS!

Now the progress bar immediately jumps to the wanted position without
the "smooth scroll" that MS implemented!


-- 
Bo Berglund
Developer in Sweden

-- 
___
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus


Re: [Lazarus] TProgressbar moves slowly, is there a hidden setting for faster response?

2019-05-15 Thread Sven Barth via lazarus
Bo Berglund via lazarus  schrieb am Mi., 15.
Mai 2019, 17:11:

> On Wed, 15 May 2019 13:38:19 +0200, Ondrej Pokorny via lazarus
>  wrote:
>
> >Because WinAPI developers wanted it so - the drawing of TProgressBar is
> >fully in charge of the OS.
>
> Strangely just discovered that the progressbar is painted "fast
> enough" if I click a position towards the lower side of the current
> position!
>
> So start and click towards the end (max) - it slowly paints the bar.
> Then click towards the start (min) - it *immediately* paints it
> correctly.
>
> There *must* be a way to enforce the latter paint method also for
> positive moves
>
> I really do not want to create a panel child to implement this
> behaviour unless I am really forced to
>

One possible workaround I found (not tested) is this:

=== code begin ===

YourProgressbar.Position := YourTarget;
YourProgressbar.Position := Your Target - 1;
YourProgressbar.Position := YourTarget;

=== code end ===

You first tell the progress bar your new desired target value (which
triggers a slow animation), then you go one step back (which will enforce a
fast redraw) and then to the target again (which again will be a slow
animation, but shouldn't be that slow with only one point difference).

Note: I currently don't know whether the property on TProgressBar is
Position or Value. It's been a while since I last used one ;)

Note 2: you can put similar code into the click handler, though there
without the first step probably.

Regards,
Sven

>
-- 
___
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus


Re: [Lazarus] TProgressbar moves slowly, is there a hidden setting for faster response?

2019-05-15 Thread Alexey via lazarus
I suggest to use ATScrollbar from ATFlatControls, but it needs the option for 
fast move- I can easily add it soon.


-- 
___
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus


Re: [Lazarus] TProgressbar moves slowly, is there a hidden setting for faster response?

2019-05-15 Thread Ondrej Pokorny via lazarus

On 15.05.2019 17:11, Bo Berglund via lazarus wrote:

On Wed, 15 May 2019 13:38:19 +0200, Ondrej Pokorny via lazarus
 wrote:


Because WinAPI developers wanted it so - the drawing of TProgressBar is
fully in charge of the OS.

Strangely just discovered that the progressbar is painted "fast
enough" if I click a position towards the lower side of the current
position!

So start and click towards the end (max) - it slowly paints the bar.
Then click towards the start (min) - it *immediately* paints it
correctly.

There *must* be a way to enforce the latter paint method also for
positive moves


Try to set DoubleBuffered:=True. That should disable all possible OS 
painting animations.




I really do not want to create a panel child to implement this
behaviour unless I am really forced to


That's what I would do. (But not a panel child but a TGraphicControl 
descendant.)


Ondrej

--
___
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus


Re: [Lazarus] TProgressbar moves slowly, is there a hidden setting for faster response?

2019-05-15 Thread Bo Berglund via lazarus
On Wed, 15 May 2019 13:38:19 +0200, Ondrej Pokorny via lazarus
 wrote:

>Because WinAPI developers wanted it so - the drawing of TProgressBar is 
>fully in charge of the OS.

Strangely just discovered that the progressbar is painted "fast
enough" if I click a position towards the lower side of the current
position!

So start and click towards the end (max) - it slowly paints the bar.
Then click towards the start (min) - it *immediately* paints it
correctly.

There *must* be a way to enforce the latter paint method also for
positive moves

I really do not want to create a panel child to implement this
behaviour unless I am really forced to


-- 
Bo Berglund
Developer in Sweden

-- 
___
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus


Re: [Lazarus] TProgressbar moves slowly, is there a hidden setting for faster response?

2019-05-15 Thread Bo Berglund via lazarus
On Wed, 15 May 2019 13:38:19 +0200, Ondrej Pokorny via lazarus
 wrote:

>On 15.05.2019 13:34, Bo Berglund via lazarus wrote:
>> Why is the TProgressBar doing this when the TTrackBar I used before displays 
>> an instant move?
>
>Because WinAPI developers wanted it so - the drawing of TProgressBar is 
>fully in charge of the OS.
>

I feared as much...
So is there an alternate control I can use to visualize the position
in the video, which does not react so slowly?


-- 
Bo Berglund
Developer in Sweden

-- 
___
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus


Re: [Lazarus] TProgressbar moves slowly, is there a hidden setting for faster response?

2019-05-15 Thread Ondrej Pokorny via lazarus

On 15.05.2019 13:34, Bo Berglund via lazarus wrote:

Why is the TProgressBar doing this when the TTrackBar I used before displays an 
instant move?


Because WinAPI developers wanted it so - the drawing of TProgressBar is 
fully in charge of the OS.


Ondrej

--
___
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus


[Lazarus] TProgressbar moves slowly, is there a hidden setting for faster response?

2019-05-15 Thread Bo Berglund via lazarus
I am trying to use a TProgressbar to display the position of a playing
video. This works OK while playing.

Now I want to reposition the video by clicking on the progress bar and
it does work, but the bar progress to the new position when clicking
is really slow

When I click the bar the X position is read in the MouseUp event and
the Video time value is calculated as the correspondinmg number of
milliseconds as used by the VLC player component.
Then the progressbar and the video are repositioned by setting their
position properties to this value.

What happens on screen is that the video *immediately* jumps to the
wanted position and continues playing but the progress bar only
*slowly* advances towards the playing point.
For a jump from the start of the video until near the end it takes
almost 3 seconds to complete.

Why is the TProgressBar doing this when the TTrackBar I used before
displays an instant move?

(I can't use the TTrackBar because of other issues with it)

Using Lazarus 2.0.0 32 bit and fpc 3.0.4 on Windows 7 x64 Pro.

-- 
Bo Berglund
Developer in Sweden

-- 
___
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus