cxsplitter.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,764 行 · 第 1/5 页
PAS
1,764 行
FArrowColor := clWindowText;
FArrowHighlightColor := clBlue;
FLightColor := clWindow;
FBorderColor := clBtnShadow;
FShadowStartColor := $00F5E6CD;
FShadowHighlightStartColor := $00AFF5C3;
end;
procedure TcxMediaPlayer9Style.Assign(Source: TPersistent);
begin
if (Source is TcxMediaPlayer9Style) then
begin
inherited Assign(Source);
with (Source as TcxMediaPlayer9Style) do
begin
Self.ArrowColor := ArrowColor;
Self.ArrowHighlightColor := ArrowHighlightColor;
Self.LightColor := LightColor;
Self.BorderColor := BorderColor;
Self.ShadowStartColor := ShadowStartColor;
Self.ShadowHighlightStartColor := ShadowHighlightStartColor;
end;
end
else
inherited Assign(Source);
end;
procedure TcxMediaPlayer9Style.SetArrowColor(Value: TColor);
begin
if FArrowColor <> Value then
begin
FArrowColor := Value;
Changed;
end;
end;
procedure TcxMediaPlayer9Style.SetArrowHighlightColor(Value: TColor);
begin
if FArrowHighlightColor <> Value then
begin
FArrowHighlightColor := Value;
Changed;
end;
end;
procedure TcxMediaPlayer9Style.SetLightColor(Value: TColor);
begin
if FLightColor <> Value then
begin
FLightColor := Value;
Changed;
end;
end;
procedure TcxMediaPlayer9Style.SetBorderColor(Value: TColor);
begin
if FBorderColor <> Value then
begin
FBorderColor := Value;
Changed;
end;
end;
procedure TcxMediaPlayer9Style.SetShadowStartColor(Value: TColor);
begin
if FShadowStartColor <> Value then
begin
FShadowStartColor := Value;
Changed;
end;
end;
procedure TcxMediaPlayer9Style.SetShadowHighlightStartColor(Value: TColor);
begin
if FShadowHighlightStartColor <> Value then
begin
FShadowHighlightStartColor := Value;
Changed;
end;
end;
function TcxMediaPlayer9Style.DrawHotZone(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean): TRect;
begin
Result := CalculateHotZoneRect(ARect);
ACanvas.Canvas.Lock;
try
ACanvas.Canvas.Brush.Color := Owner.Color;
DrawBackground(ACanvas, HotZoneRect, AHighlighted, AClicked);
DrawHotZoneArrow(ACanvas, FArrowRect, AHighlighted, AClicked, FArrowColor,
FArrowHighlightColor, SplitterDirection);
finally
ACanvas.Canvas.Unlock;
end;
end;
function TcxMediaPlayer9Style.CalculateHotZoneRect(const ABounds: TRect): TRect;
begin
Result := inherited CalculateHotZoneRect(ABounds);
if (SplitterDirection = cxsdLeftToRight) or (SplitterDirection = cxsdRightToLeft) then
FArrowRect := Rect(Result.Left, Result.Top + (RectHeight(Result) div 2) - 7,
Result.Left + SplitterDefaultSize - 1,
Result.Top + (RectHeight(Result) div 2) + 7)
else
FArrowRect := Rect(Result.Left + (RectWidth(Result) div 2) - 7,
Result.Top, Result.Left + (RectWidth(Result) div 2) + 7,
Result.Top + SplitterDefaultSize - 1);
HotZoneRect := Result;
end;
procedure TcxMediaPlayer9Style.DrawBackground(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean);
var
FRect: TRect;
FXDelta, FYDelta, FShadowStepDelta, FShadowStep: Integer;
FLocalShadowColor: TColor;
begin
FRect := ARect;
case SplitterDirection of
cxsdLeftToRight, cxsdRightToLeft: InflateRectEx(FRect, 0, 1, 0, -1);
cxsdTopToBottom, cxsdBottomToTop: InflateRectEx(FRect, 1, 0, -1, 0);
end;
ACanvas.Pen.Color := BorderColor;
ACanvas.Brush.Color := LightColor;
ACanvas.FillRect(FRect);
DrawBounds(ACanvas, FRect, BorderColor, BorderColor);
if AHighlighted = False then
FLocalShadowColor := ShadowStartColor
else
FLocalShadowColor := ShadowHighlightStartColor;
if not AClicked then
begin
FXDelta := 4;
FYDelta := 2;
FShadowStep := 0;
FShadowStepDelta := -30;
end
else
begin
FXDelta := 1;
FYDelta := 0;
FShadowStep := -60;
FShadowStepDelta := 30;
end;
case SplitterDirection of
cxsdLeftToRight, cxsdRightToLeft:
begin
DrawCanvasLine(ACanvas.Canvas, LightColor, Point(ARect.Left + 2, ARect.Top + 1),
Point(ARect.Right - 1, ARect.Top + 1));
DrawCanvasLine(ACanvas.Canvas, BorderColor, Point(ARect.Left + 1, ARect.Top),
Point(ARect.Right, ARect.Top));
DrawCanvasLine(ACanvas.Canvas, LightColor, Point(ARect.Left + 2, ARect.Bottom - 1),
Point(ARect.Right - 1, ARect.Bottom - 1));
DrawCanvasLine(ACanvas.Canvas, BorderColor, Point(ARect.Left + 1, ARect.Bottom),
Point(ARect.Right, ARect.Bottom));
DrawCanvasLine(ACanvas.Canvas, IncColor(FLocalShadowColor, FShadowStep, FShadowStep, FShadowStep),
Point(ARect.Left + FXDelta, ARect.Top + FYDelta), Point(ARect.Left + FXDelta,
ARect.Bottom + FYDelta - 2));
Inc(FShadowStep, FShadowStepDelta);
DrawCanvasLine(ACanvas.Canvas, IncColor(FLocalShadowColor, FShadowStep, FShadowStep, FShadowStep),
Point(ARect.Left + FXDelta + 1, ARect.Top + FYDelta + 1),
Point(ARect.Left + FXDelta + 1, ARect.Bottom + FYDelta - 2));
Inc(FShadowStep, FShadowStepDelta);
DrawCanvasLine(ACanvas.Canvas, IncColor(FLocalShadowColor, FShadowStep, FShadowStep, FShadowStep),
Point(ARect.Left + FXDelta + 2, ARect.Top + FYDelta + 1),
Point(ARect.Left + FXDelta + 2, ARect.Bottom + FYDelta - 3));
end;
cxsdTopToBottom, cxsdBottomToTop:
begin
DrawCanvasLine(ACanvas.Canvas, LightColor, Point(ARect.Left + 1, ARect.Top + 2),
Point(ARect.Left + 1, ARect.Bottom - 1));
DrawCanvasLine(ACanvas.Canvas, BorderColor, Point(ARect.Left, ARect.Top + 1),
Point(ARect.Left, ARect.Bottom));
DrawCanvasLine(ACanvas.Canvas, LightColor, Point(ARect.Right - 1, ARect.Top + 2),
Point(ARect.Right - 1, ARect.Bottom - 1));
DrawCanvasLine(ACanvas.Canvas, BorderColor, Point(ARect.Right, ARect.Top + 1),
Point(ARect.Right, ARect.Bottom));
DrawCanvasLine(ACanvas.Canvas, IncColor(FLocalShadowColor, FShadowStep, FShadowStep, FShadowStep),
Point(ARect.Left + FYDelta, ARect.Top + FXDelta),
Point(ARect.Right + FYDelta - 2, ARect.Top + FXDelta));
Inc(FShadowStep, FShadowStepDelta);
DrawCanvasLine(ACanvas.Canvas, IncColor(FLocalShadowColor, FShadowStep, FShadowStep, FShadowStep),
Point(ARect.Left + FYDelta + 1, ARect.Top + FXDelta + 1),
Point(ARect.Right + FYDelta - 2, ARect.Top + FXDelta + 1));
Inc(FShadowStep, FShadowStepDelta);
DrawCanvasLine(ACanvas.Canvas, IncColor(FLocalShadowColor, FShadowStep, FShadowStep, FShadowStep),
Point(ARect.Left + FYDelta + 1, ARect.Top + FXDelta + 2),
Point(ARect.Right + FYDelta - 3, ARect.Top + FXDelta + 2));
end;
end;
ACanvas.Pen.Color := FOwner.Color;
ACanvas.Brush.Color := FOwner.Color;
end;
{ TcxMediaPlayer9Style }
{ TcxMediaPlayer8Style }
constructor TcxMediaPlayer8Style.Create(AOwner: TcxCustomSplitter);
begin
inherited Create(AOwner);
FArrowColor := clWindowText;
FArrowHighlightColor := clWindow;
FLightColor := clWindow;
FShadowColor := clBtnShadow;
end;
procedure TcxMediaPlayer8Style.Assign(Source: TPersistent);
begin
if (Source is TcxMediaPlayer8Style) then
begin
inherited Assign(Source);
with (Source as TcxMediaPlayer8Style) do
begin
Self.ShadowColor := ShadowColor;
Self.LightColor := LightColor;
Self.ArrowColor := ArrowColor;
Self.ArrowHighlightColor := ArrowHighlightColor;
end;
end
else
inherited Assign(Source);
end;
procedure TcxMediaPlayer8Style.SetShadowColor(Value: TColor);
begin
if FShadowColor <> Value then
begin
FShadowColor := Value;
Changed;
end;
end;
procedure TcxMediaPlayer8Style.SetLightColor(Value: TColor);
begin
if FLightColor <> Value then
begin
FLightColor := Value;
Changed;
end;
end;
procedure TcxMediaPlayer8Style.SetArrowColor(Value: TColor);
begin
if FArrowColor <> Value then
begin
FArrowColor := Value;
Changed;
end;
end;
procedure TcxMediaPlayer8Style.SetArrowHighlightColor(Value: TColor);
begin
if FArrowHighlightColor <> Value then
begin
FArrowHighlightColor := Value;
Changed;
end;
end;
function TcxMediaPlayer8Style.DrawHotZone(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean): TRect;
begin
Result := CalculateHotZoneRect(ARect);
ACanvas.Canvas.Lock;
try
ACanvas.Canvas.Brush.Color := Owner.Color;
DrawBackground(ACanvas, HotZoneRect, AHighlighted, AClicked);
DrawSplitterDots(ACanvas, FLTPointsRect, AClicked, False, FLightColor,
FShadowColor, SplitterDirection, 3, 3);
DrawSplitterDots(ACanvas, FRBPointsRect, AClicked, True, FLightColor,
FShadowColor, SplitterDirection, 3, 3);
DrawArrowRect(ACanvas, FArrowRect, AHighlighted, AClicked);
DrawHotZoneArrow(ACanvas, FArrowRect, AHighlighted, AClicked, FArrowColor,
FArrowHighlightColor, SplitterDirection);
finally
ACanvas.Canvas.Unlock;
end;
end;
function TcxMediaPlayer8Style.CalculateHotZoneRect(const ABounds: TRect): TRect;
var
FRect : TRect;
FHotZoneRectSize, FPos: Integer;
FHotZonePointsRectHeight, FHotZoneRoundRectHeight: Integer;
begin
FRect := ABounds;
if (SplitterDirection = cxsdLeftToRight) or (SplitterDirection = cxsdRightToLeft) then
begin
FRect.Right := FRect.Left + SplitterDefaultSize - 1;
FHotZoneRectSize := ((FRect.Bottom - FRect.Top) * SizePercent) div 100;
FPos := ((FRect.Bottom - FRect.Top) div 2) - (FHotZoneRectSize div 2);
HotZoneRect := Rect(FRect.Left, FPos, FRect.Right, FPos + FHotZoneRectSize);
end
else
begin
FRect.Bottom := FRect.Top + SplitterDefaultSize - 1;
FHotZoneRectSize := ((FRect.Right - FRect.Left) * SizePercent) div 100;
FPos := ((FRect.Right - FRect.Left) div 2) - (FHotZoneRectSize div 2);
HotZoneRect := Rect(FPos, FRect.Top, FPos + FHotZoneRectSize, FRect.Bottom);
end;
FHotZoneRoundRectHeight := 4;
FHotZonePointsRectHeight := (FHotZoneRectSize - (FHotZoneRoundRectHeight * 2) - 19) div 2;
if (SplitterDirection = cxsdLeftToRight) or (SplitterDirection = cxsdRightToLeft) then
begin
FLTPointsRect := Rect(HotZoneRect.Left, HotZoneRect.Top + FHotZoneRoundRectHeight,
HotZoneRect.Left + HotZoneRect.Right - HotZoneRect.Left,
HotZoneRect.Top + FHotZoneRoundRectHeight + FHotZonePointsRectHeight);
FRBPointsRect := Rect(HotZoneRect.Left, HotZoneRect.Bottom - FHotZoneRoundRectHeight - FHotZonePointsRectHeight,
HotZoneRect.Left + HotZoneRect.Right - HotZoneRect.Left,
HotZoneRect.Bottom - FHotZoneRoundRectHeight - FHotZonePointsRectHeight + FHotZonePointsRectHeight);
FArrowRect := Rect(HotZoneRect.Left, HotZoneRect.Top + FHotZonePointsRectHeight + FHotZoneRoundRectHeight,
HotZoneRect.Left + SplitterDefaultSize - 1,
HotZoneRect.Top + FHotZonePointsRectHeight + FHotZoneRoundRectHeight + 19);
end
else
begin
FLTPointsRect := Rect(HotZoneRect.Left + FHotZoneRoundRectHeight,
HotZoneRect.Top, HotZoneRect.Left + FHotZoneRoundRectHeight + FHotZonePointsRectHeight,
HotZoneRect.Bottom);
FRBPointsRect := Rect(HotZoneRect.Right - FHotZoneRoundRectHeight - FHotZonePointsRectHeight,
HotZoneRect.Top, HotZoneRect.Right - FHotZoneRoundRectHeight - FHotZonePointsRectHeight + FHotZonePointsRectHeight,
HotZoneRect.Bottom);
FArrowRect := Rect(HotZoneRect.Left + FHotZonePointsRectHeight + FHotZoneRoundRectHeight,
HotZoneRect.Top, HotZoneRect.Left + FHotZonePointsRectHeight + FHotZoneRoundRectHeight + 19,
HotZoneRect.Top + SplitterDefaultSize - 1);
end;
Result := HotZoneRect;
end;
procedure TcxMediaPlayer8Style.DrawBackground(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean);
begin
ACanvas.Pen.Color := FOwner.Color;
ACanvas.Brush.Color := FOwner.Color;
ACanvas.FillRect(ARect);
case SplitterDirection of
cxsdLeftToRight:
begin
{Shadow border}
DrawCanvasLine(ACanvas.Canvas, ShadowColor, Point(ARect.Left, ARect.Bottom - 4),
Point(ARect.Left, ARect.Top + 3));
DrawCanvasLine(ACanvas.Canvas, ShadowColor, Point(ARect.Right, ARect.Bottom),
Point(ARect.Right, ARect.Top));
DrawCanvasLine(ACanvas.Canvas, ShadowColor, Point(ARect.Left + 1, ARect.Bottom - 2),
Point(ARect.Left + 1, ARect.Bottom - 4));
DrawCanvasLine(ACanvas.Canvas, ShadowColor, Point(ARect.Left + 1, ARect.Top + 2),
Point(ARect.Left + 1, ARect.Top + 4));
DrawCanvasLine(ACanvas.Canvas, ShadowColor, Point(ARect.Left + 2, ARect.Bottom - 1),
Point(ARect.Left + 4, ARect.Bottom - 1));
DrawCanvasLine(ACanvas.Canvas, ShadowColor, Point(ARect.Left + 2, ARect.Top + 1),
Point(ARect.Left + 4, ARect.Top + 1));
DrawCanvasLine(ACanvas.Canvas, ShadowColor, Point(ARect.Left + 4, ARect.Bottom),
Point(ARect.Right, ARect.Bottom));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?