ksskintrackbars.pas
来自「小区水费管理系统源代码水费收费管理系统 水费收费管理系统」· PAS 代码 · 共 611 行 · 第 1/2 页
PAS
611 行
LowIntervalRect.Bottom := PosCooord;
end
else
begin
LowIntervalRect.Top := PosCooord;
LowIntervalRect.Bottom := Bottom;
end;
end;
end;
if not Enabled or (IntervalHighlightType = htNone) then
LowIntervalRect := Rect(0, 0, 0, 0);
{ Draw }
if Orientation = toHorizontal then
SkinObject := FSkinTrackBar.FindObjectByName('TrackHorz')
else
SkinObject := FSkinTrackBar.FindObjectByName('TrackVert');
if SkinObject = nil then
SkinObject := FSkinTrackBar.FindObjectByName('Track');
{ Draw Highlight }
if SkinObject <> nil then
begin
R := LTrackRect;
if Orientation = toHorizontal then
R.Bottom := R.Top + SkinObject.Height
else
R.Right := R.Left + SkinObject.Width;
RectCenter(R, LTrackRect);
SkinObject.BoundsRect := R;
SkinObject.Draw(Canvas);
LTrackRect := R;
Frame := SkinObject;
if Orientation = toHorizontal then
SkinObject := FSkinTrackBar.FindObjectByName('HighlightHorz')
else
SkinObject := FSkinTrackBar.FindObjectByName('HighlightVert');
if SkinObject = nil then
SkinObject := FSkinTrackBar.FindObjectByName('Highlight');
{ Draw Highlight }
if SkinObject <> nil then
begin
R := LTrackRect;
if Orientation = toHorizontal then
begin
R.Left := LowIntervalRect.Left;
R.Right := LowIntervalRect.Right;
end
else
begin
R.Top := LowIntervalRect.Top;
R.Bottom := LowIntervalRect.Bottom;
end;
if (Orientation = toVertical) and (IntervalHighlightType = htHighInterval) and
(Frame <> nil) then
begin
SkinObject.BoundsRect := R;
SkinObject.Draw(Canvas);
end
else
begin
SkinObject.BoundsRect := R;
SkinObject.Draw(Canvas);
end;
end;
end;
end;
end;
procedure TSeSkinTrackBar.DrawThumb(APosCoord: integer);
var
Bx, By: integer;
LThumbWidth, LThumbHeight: integer;
DrawState: TSeState;
SkinObject: TSeSkinObject;
begin
if not ThumbVisible then Exit;
if not UseSkin then
inherited
else
begin
LThumbWidth := GetThumbWidth;
LThumbHeight := GetThumbHeight;
if not Enabled then
DrawState := ssDisabled
else
if ThumbPressed then
DrawState := ssPressed
else
if MouseOnThumb then
DrawState := ssHot
else
if Focused then
DrawState := ssFocused
else
DrawState := ssNormal;
if Orientation = toHorizontal then
begin
Bx := APosCoord - LThumbWidth div 2;
By := GetTopBottomMargin;
if ShowTicks and ((TickMarks = tmTopLeft) or (TickMarks = tmBoth)) then
By := By + 4 + 1;
case TickMarks of
tmTopLeft: SkinObject := FSkinTrackBar.FindObjectByName('ThumbHorzTop');
tmBottomRight: SkinObject := FSkinTrackBar.FindObjectByName('ThumbHorzBottom');
else
SkinObject := nil;
end;
if SkinObject = nil then
SkinObject := FSkinTrackBar.FindObjectByName('ThumbHorz');
if SkinObject = nil then
SkinObject := FSkinTrackBar.FindObjectByName('Thumb');
if SkinObject <> nil then
begin
SkinObject.BoundsRect := Rect(Bx, By, Bx + LThumbWidth, By + LThumbHeight);
SkinObject.State := DrawState;
SkinObject.Draw(Canvas);
end;
end
else
begin
{ Orientation = toVertical }
Bx := GetTopBottomMargin;
By := APosCoord - LThumbWidth div 2;
if ShowTicks and ((TickMarks = tmTopLeft) or (TickMarks = tmBoth)) then
Bx := Bx + 4 + 1;
case TickMarks of
tmTopLeft: SkinObject := FSkinTrackBar.FindObjectByName('ThumbVertLeft');
tmBottomRight: SkinObject := FSkinTrackBar.FindObjectByName('ThumbVertRight');
else
SkinObject := nil;
end;
if SkinObject = nil then
SkinObject := FSkinTrackBar.FindObjectByName('ThumbVert');
if SkinObject = nil then
SkinObject := FSkinTrackBar.FindObjectByName('Thumb');
if SkinObject <> nil then
begin
SkinObject.BoundsRect := Rect(Bx, By, Bx + LThumbHeight, By + LThumbWidth);
SkinObject.State := DrawState;
SkinObject.Draw(Canvas);
end;
end;
end;
end;
procedure TSeSkinTrackBar.DrawTick(Value, Coord: integer;
TopLeft: boolean);
var
VCoord: integer;
LThumbHeight: integer;
TickColor: TColor;
begin
if not UseSkin then
inherited
else
begin
LThumbHeight := GetThumbHeight;
if Enabled then
TickColor := clBlack
else
TickColor := clBtnShadow;
if TopLeft then
begin
VCoord := GetTopBottomMargin + 3;
if Orientation = toHorizontal then
begin
MoveTo(Canvas, Coord, VCoord);
if (Value = Min) or (Value = Max) then
LineTo(Canvas, Coord, VCoord - 4, TickColor)
else
LineTo(Canvas, Coord, VCoord - 3, TickColor);
end
else
begin
MoveTo(Canvas, VCoord, Coord);
if (Value = Min) or (Value = Max) then
LineTo(Canvas, VCoord - 4, Coord, TickColor)
else
LineTo(Canvas, VCoord - 3, Coord, TickColor);
end;
end
else
begin
if TickMarks = tmBoth then
VCoord := GetTopBottomMargin + 4 + 1 +
LThumbHeight + 1
else
VCoord := GetTopBottomMargin + 1 +
LThumbHeight + 1;
if Orientation = toHorizontal then
begin
MoveTo(Canvas, Coord, VCoord);
if (Value = Min) or (Value = Max) then
LineTo(Canvas, Coord, VCoord + 4, TickColor)
else
LineTo(Canvas, Coord, VCoord + 3, TickColor);
end
else
begin
MoveTo(Canvas, VCoord, Coord);
if (Value = Min) or (Value = Max) then
LineTo(Canvas, VCoord + 4, Coord, ckBorder)
else
LineTo(Canvas, VCoord + 3, Coord, ckBorder);
end;
end;
end;
end;
procedure TSeSkinTrackBar.WMInvalidateSkinObject(var Msg: TMessage);
begin
Invalidate;
end;
procedure TSeSkinTrackBar.WMBeforeChange(var Msg: TMessage);
begin
if Pointer(Msg.LParam) = nil then Exit;
if TSeSkinEngine(Msg.LParam) <> FSkinEngine then Exit;
if FSkinTrackBar <> nil then FSkinTrackBar.Free;
FSkinTrackBar := nil;
end;
procedure TSeSkinTrackBar.WMSkinChange(var Msg: TMessage);
begin
if Pointer(Msg.LParam) = nil then Exit;
if TSeSkinEngine(Msg.LParam) <> FSkinEngine then Exit;
SkinEngine := FSkinEngine;
end;
{ VCL }
procedure TSeSkinTrackBar.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
if (Operation = opRemove) and (AComponent = FSkinEngine) then
SkinEngine := nil;
end;
{ Properties }
function TSeSkinTrackBar.GetVersion: TSeSkinVersion;
begin
Result := sSeSkinVersion;
end;
procedure TSeSkinTrackBar.SetVersion(const Value: TSeSkinVersion);
begin
end;
procedure TSeSkinTrackBar.SetSkinEngine(const Value: TSeSkinEngine);
begin
FSkinEngine := Value;
if (FSkinEngine <> nil) and (FSkinEngine.SkinSource <> nil) and
(not FSkinEngine.SkinSource.IsChanging) and
(FSkinEngine.SkinSource.Count > 0) then
begin
if FSkinTrackBar <> nil then FSkinTrackBar.Free;
FSkinTrackBar := nil;
if FSkinEngine.SkinSource.GetObjectByName(FSkinObject) <> nil then
FSkinTrackBar := FSkinEngine.SkinSource.GetObjectByName(FSkinObject).CreateCopy(nil);
if FSkinTrackBar <> nil then FSkinTrackBar.ParentControl := Self;
end
else
begin
if FSkinTrackBar <> nil then FSkinTrackBar.Free;
FSkinTrackBar := nil;
end;
Invalidate;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?