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 + -
显示快捷键?