procedure TF_Player.TrackBar_Draw;
function ChangeColor(InputColor: TColor; Base, Val: Extended): TColor;
var
r,g,b: extended;
begin
Val:= 255/(Base+1)*Val;
Base:=255;
// Grab RGB values
r := GetRValue(InputColor);
g := GetGValue(InputColor);
b := GetBValue(InputColor);
// Do the operation
r := r-((Val/Base)*100);
g := g-((Val/Base)*100);
b := b-((Val/Base)*100);
// Check whether result is in range
if r > 255
then
r := 255;
if r < 0
then
r := 0;
if g > 255
then
g := 255;
if g < 0
then
g := 0;
if b > 255
then
b := 255;
if b < 0
then
b := 0;
Result :=
RGB(byte(Round(r)),byte(Round(g)),byte(Round(b)));
end;
var
i: integer;
XX, YY: integer;
TempBMP: TBitmap;
PlayerPos: integer;
const
NetStreamScrollerWidth = 80;
begin
YY:= 0;
PlayerPos:= TrackBar_PercentToPos(fPlayer.PosElapsedPercent);
// die aktuelle Player-Position in Prozent
TempBMP:= TBitmap.Create;
TempBMP.Height:= PB_TrackBar.Height;
TempBMP.Width:= PB_TRackBar.Width;
TempBMP.Canvas.Brush.Color:= clWhite;
TempBMP.Canvas.FillRect(TempBMP.Canvas.ClipRect);
if not fPlayer.IsNetStream
then // der aktuelle Track ist kein NetStream
begin
if fPlayer.PlayerState = psPlay
then // der aktuelle Track wird abgespielt
if TrackBar_ScrollerCounter <= GetTickCount
then
begin
TrackBar_ScrollerCounter:= GetTickCount +75;
Inc(TrackBar_Scroller);
if TrackBar_Scroller
Mod 13 = 0
then
TrackBar_Scroller:= 0;
end;
for i:=0
to PlayerPos
do
begin
YY:=0;
if i= 0
then YY:= 3;
if i= 1
then YY:= 2;
if i= 2
then YY:= 1;
if i= PB_TRackBar.Width-1
then YY:= 3;
if i= PB_TRackBar.Width-2
then YY:= 2;
if i= PB_TRackBar.Width-3
then YY:= 1;
TempBMP.Canvas.Pen.Color:= ChangeColor(Color_TrackBar, PlayerPos, i);
// TempBMP.Width
TempBMP.Canvas.MoveTo(i, 0+YY);
TempBMP.Canvas.LineTo(i, TempBMP.Height-YY);
if i
MOD 13 = TrackBar_Scroller
then
begin
TempBMP.Canvas.Pen.Color:= ChangeColor(Color_TrackBar, 500, i);
TempBMP.Canvas.MoveTo(i-3, 1+YY);
TempBMP.Canvas.LineTo(i, TempBMP.Height-1-YY);
end;
end;
if fPlayer_RepeatMode = 4
then // Loop A-B
begin
if fPlayer.RepeatABPosASec>= 0
then
begin
xx:= TrackBar_SecToPos(Round(fPlayer.RepeatABPosASec));
TempBMP.Canvas.Pen.Color:= COLOR_TrackBarRepeatAB;
TempBMP.Canvas.MoveTo(xx-3, 0);
TempBMP.Canvas.LineTo(xx, TempBMP.Height
div 2);
TempBMP.Canvas.LineTo(xx-3, TempBMP.Height);
TempBMP.Canvas.LineTo(xx-3,0);
end;
if fPlayer.RepeatABPosBSec>= 0
then
begin
xx:= TrackBar_SecToPos(Round(fPlayer.RepeatABPosBSec));
TempBMP.Canvas.Pen.Color:= COLOR_TrackBarRepeatAB;
TempBMP.Canvas.MoveTo(xx+3, 0);
TempBMP.Canvas.LineTo(xx, TempBMP.Height
div 2);
TempBMP.Canvas.LineTo(xx+3, TempBMP.Height);
TempBMP.Canvas.LineTo(xx+3,0);
end;
end;
if (MouseButtonEx(TrackBar_ShiftState) = [mbeLeft])
or
(MouseButtonEx(TrackBar_ShiftState) = [mbeRight])
then
if (TrackBar_MouseButton= mbLeft)
or (TrackBar_MouseButton= mbRight)
then
begin
TempBMP.Canvas.Pen.Color:= clWhite;
TempBMP.Canvas.Brush.Color:= clBlack;
TempBMP.Canvas.Ellipse(Rect(TrackBar_MousePosX-TempBMP.Height
div 3,0+YY,TrackBar_MousePosX+TempBMP.Height
div 3, TempBMP.Height-YY));
end;
end;
if fPlayer.IsNetStream
then
begin
if fPlayer.PlayerState = psPlay
then
begin
TrackBar_NetStreamScroller:= TrackBar_NetStreamScroller + 1;
if TrackBar_NetStreamScroller > TempBMP.Width
then
TrackBar_NetStreamScroller:= -NetStreamScrollerWidth;
TempBMP.Canvas.Brush.Color:= COLOR_Selected;
for i:= TrackBar_NetStreamScroller
to TrackBar_NetStreamScroller + NetStreamScrollerWidth
do
begin
YY:=0;
if i= 0
then YY:= 3;
if i= 1
then YY:= 2;
if i= 2
then YY:= 1;
if i= PB_TRackBar.Width-1
then YY:= 3;
if i= PB_TRackBar.Width-2
then YY:= 2;
if i= PB_TRackBar.Width-3
then YY:= 1;
if i= TrackBar_NetStreamScroller+0
then YY:= 3;
if i= TrackBar_NetStreamScroller+1
then YY:= 2;
if i= TrackBar_NetStreamScroller+2
then YY:= 1;
if i= TrackBar_NetStreamScroller+NetStreamScrollerWidth-0
then YY:= 3;
if i= TrackBar_NetStreamScroller+NetStreamScrollerWidth-1
then YY:= 2;
if i= TrackBar_NetStreamScroller+NetStreamScrollerWidth-2
then YY:= 0;
// if i= TrackBar_NetStreamScroller+NetStreamScrollerWidth-3 then YY:= 1;
TempBMP.Canvas.Pen.Color:= ChangeColor(Color_TrackBar, TempBMP.Width, i);
TempBMP.Canvas.MoveTo(i, 0+YY);
TempBMP.Canvas.LineTo(i, TempBMP.Height-YY);
end;
end;
end;
with TempBMP.Canvas
do
begin
if not fPlayer.IsNetStream
then
begin
if Trackbar_MouseIsInside
then
Pen.Color:= Color_Selected
else
Pen.Color:= clBlack;
end
else
Pen.Color:= clBlack;
MoveTo(3, 0);
LineTo(PB_TRackBar.Width-4,0);
LineTo(PB_TRackBar.Width-1,3);
LineTo(PB_TRackBar.Width-1, PB_TRackBar.Height-4);
LineTo(PB_TRackBar.Width-4, PB_TRackBar.Height-1);
LineTo(3, PB_TRackBar.Height-1);
LineTo(0, PB_TRackBar.Height-4);
LineTo(0, 3);
LineTo(3, 0);
end;
PB_TrackBar.Canvas.CopyRect(Rect(0,0,PB_TrackBar.Width, PB_TrackBar.Height), TempBMP.Canvas, TempBMP.Canvas.ClipRect);
TempBMP.Free;
end;