📄 jvqtracker.pas
字号:
DT_CENTER or DT_VCENTER or DT_SINGLELINE or DT_END_ELLIPSIS);
end;
procedure DrawThumb;
begin
{ Changed By Steve Childs 18/04/00 - Now Refers To Buffer Bitmap}
Buffer.Canvas.Brush.Color := FThumbColor;
Buffer.Canvas.FillRect(FThumbRect);
Buffer.Canvas.Pen.Style := psSolid;
Frame3D(Buffer.Canvas, FThumbRect, clBtnHighlight, clBlack, 1);
end;
begin
{ Added By Steve Childs 18/04/00 - Added Double Buffering}
Buffer := TBitmap.Create;
try
{ Added By Steve Childs 18/04/00 - Setup DoubleBuffer Bitmap}
Buffer.Width := ClientWidth;
Buffer.Height := ClientHeight;
SetThumbMinMax;
SetThumbRect;
SetTrackRect;
if Assigned(FBackBitmap) and (FBackBitmap.Height <> 0) and (FBackBitmap.Width <> 0) then
DrawBackBitmap
else
DrawBackground;
DrawTrack;
DrawThumb;
if ShowCaption then
DrawCaption;
finally
{ Added By Steve Childs 18/04/00 - Finally, Draw the Buffer onto Main Canvas}
Canvas.Draw(0, 0, Buffer);
{ Added By Steve Childs 18/04/00 - Free Buffer}
Buffer.Free;
end;
end;
procedure TJvTracker.SetBackColor(const Value: TColor);
begin
if FBackColor <> Value then
begin
FBackColor := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetMaximum(const Value: Integer);
begin
if (Value <> FMaximum) and (Value > FMinimum) then
begin
FMaximum := Value;
if FValue > FMaximum then
FValue := FMaximum;
UpdatePosition;
end;
end;
procedure TJvTracker.SetMinimum(const Value: Integer);
begin
if (Value <> FMinimum) and (Value < FMaximum) then
begin
FMinimum := Value;
if FValue < FMinimum then
FValue := FMinimum;
UpdatePosition;
end;
end;
procedure TJvTracker.UpdatePosition;
var
fac: Extended;
begin
fac := (FValue - FMinimum) / (FMaximum - FMinimum);
FThumbPosition := FThumbMin + Round((FThumbMax - FThumbMin) * fac);
Invalidate;
end;
procedure TJvTracker.SetTrackColor(const Value: TColor);
begin
if FTrackColor <> Value then
begin
FTrackColor := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetThumbColor(const Value: TColor);
begin
if FThumbColor <> Value then
begin
FThumbColor := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetValue(const Value: Integer);
begin
if (Value <> FValue) and (Value >= FMinimum) and (Value <= FMaximum) then
begin
FValue := Value;
UpdatePosition;
Invalidate;
end;
end;
procedure TJvTracker.SetThumbWidth(const Value: Integer);
begin
if FThumbWidth <> Value then
begin
FThumbWidth := Value;
SetThumbMinMax;
SetThumbRect;
SetTrackRect;
Invalidate;
end;
end;
procedure TJvTracker.SetThumbHeight(const Value: Integer);
begin
if (FThumbHeight <> Value) and (Value < Height) then
begin
FThumbHeight := Value;
SetThumbMinMax;
SetThumbRect;
SetTrackRect;
Invalidate;
end;
end;
procedure TJvTracker.SetTrackHeight(const Value: Integer);
begin
case Orientation of
jtbHorizontal:
if (FTrackHeight <> Value) and (Value < Height) then
begin
FTrackHeight := Value;
SetTrackRect;
Invalidate;
end;
jtbVertical:
if (FTrackHeight <> Value) and (Value < Width) then
begin
FTrackHeight := Value;
SetTrackRect;
Invalidate;
end;
end;
end;
procedure TJvTracker.SetOnChangedValue(const Value: TOnChangedValue);
begin
FOnChangedValue := Value;
end;
procedure TJvTracker.DoChangedValue(NewValue: Integer);
begin
if Assigned(FOnChangedValue) then
FOnChangedValue(Self, NewValue);
end;
procedure TJvTracker.BoundsChanged;
begin
inherited BoundsChanged;
SetThumbMinMax;
SetTrackRect;
UpdatePosition;
end;
procedure TJvTracker.SetCaptionColor(const Value: TColor);
begin
if FCaptionColor <> Value then
begin
FCaptionColor := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetShowCaption(const Value: Boolean);
begin
if FShowCaption <> Value then
begin
FShowCaption := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetBackBorder(const Value: Boolean);
begin
if FBackBorder <> Value then
begin
FBackBorder := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetTrackBorder(const Value: Boolean);
begin
if FTrackBorder <> Value then
begin
FTrackBorder := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetThumbBorder(const Value: Boolean);
begin
if FThumbBorder <> Value then
begin
FThumbBorder := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetCaptionBold(const Value: Boolean);
begin
if FCaptionBold <> Value then
begin
FCaptionBold := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetOrientation(const Value: TjtbOrientation);
var
Tmp: Integer;
begin
if FOrientation <> Value then
begin
FOrientation := Value;
if csDesigning in ComponentState then
begin
Tmp := Width;
Width := Height;
Height := Tmp;
end;
Invalidate;
end;
end;
procedure TJvTracker.SetBackBitmap(const Value: TBitmap);
begin
FBackBitmap.Assign(Value);
end;
procedure TJvTracker.BackBitmapChanged(Sender: TObject);
begin
Invalidate;
end;
procedure TJvTracker.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
inherited MouseMove(Shift, X, Y);
if ssLeft in Shift then
if FClickWasInRect then
begin
{
- Added By Steve Childs 18/04/00
OK, we know that when the mouse button went down, the
click was in the rect. So, we only need to check that it's now
within the bounds of the track (otherwise the button goes off the
end of the track!!)
}
// If (X >= FTrackRect.Left) and (X <= FTrackRect.Right) then
if PtInRect(FTrackRect, Point(X, Y)) then // 2-jul-2000 Jan Verhoeven
if Orientation = jtbHorizontal then
FThumbPosition := X
else
FThumbPosition := Y
else
begin
{ Added By Steve Childs 18/04/00
If it's off the edges - Set Either to left or right, depending on
which side the mouse is!!
}
// 2-jul-2000 Jan Verhoeven
if Orientation = jtbHorizontal then
begin
if X < FTrackRect.Left then
FThumbPosition := FTrackRect.Left - 1
else
if X > FTrackRect.Right then
FThumbPosition := FTrackRect.Right + 1
else
FThumbPosition := X;
end
else
begin
if Y < FTrackRect.Top then
FThumbPosition := FTrackRect.Top - 1
else
if Y > FTrackRect.Bottom then
FThumbPosition := FTrackRect.Bottom + 1
else
FThumbPosition := Y;
end;
{ If X < FTrackRect.Left then
FThumbPosition := FTrackRect.Left-1
else
// Must Be Off Right
FThumbPosition := FTrackRect.Right+1;}
end;
UpdateValue;
SetThumbRect;
Invalidate;
DoChangedValue(FValue);
end;
end;
procedure TJvTracker.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
{ Added By Steve Childs 18/04/00 - Clear Flag}
FClickWasInRect := False;
inherited MouseUp(Button, Shift, X, Y);
end;
procedure TJvTracker.SetBorderColor(const Value: TColor);
begin
if FBorderColor <> Value then
begin
FBorderColor := Value;
Invalidate;
end;
end;
procedure TJvTracker.SetTrackPositionColored(const Value: Boolean);
begin
if FTrackPositionColored <> Value then
begin
FTrackPositionColored := Value;
Invalidate;
end;
end;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvQTracker.pas,v $';
Revision: '$Revision: 1.19 $';
Date: '$Date: 2005/02/06 14:06:17 $';
LogPath: 'JVCL\run'
);
initialization
RegisterUnitVersion(HInstance, UnitVersioning);
finalization
UnregisterUnitVersion(HInstance);
{$ENDIF UNITVERSIONING}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -