📄 aclfpainter.pas
字号:
unit acLFPainter;
{$I sDefs.inc}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
sSkinManager, sStyleSimply, sMaskData, cxLookAndFeelPainters, cxGraphics, cxClasses;
type
TcxACLookAndFeelPainter = class(TcxFlatLookAndFeelPainter)
public
// colors
class function DefaultContentColor: TColor; override;
class function DefaultContentEvenColor: TColor; override;
class function DefaultContentOddColor: TColor; override;
class function DefaultContentTextColor: TColor; override;
class function DefaultFilterBoxColor: TColor; override;
class function DefaultFilterBoxTextColor: TColor; override;
class function DefaultFixedSeparatorColor: TColor; override;
class function DefaultFooterColor: TColor; override;
class function DefaultFooterTextColor: TColor; override;
class function DefaultGridLineColor: TColor; override;
class function DefaultGroupByBoxTextColor: TColor; override;
class function DefaultGroupColor: TColor; override;
class function DefaultGroupTextColor: TColor; override;
class function DefaultHeaderColor: TColor; override;
class function DefaultHeaderBackgroundColor: TColor; override;
class function DefaultGroupByBoxColor: TColor; override;
class function DefaultHeaderTextColor: TColor; override;
class function DefaultHyperlinkTextColor: TColor; override;
class function DefaultInactiveColor: TColor; override;
class function DefaultInactiveTextColor: TColor; override;
class function DefaultPreviewTextColor: TColor; override;
class function DefaultRecordSeparatorColor: TColor; override;
class function DefaultSizeGripAreaColor: TColor; override;
class function DefaultVGridCategoryColor: TColor; override;
class function DefaultVGridCategoryTextColor: TColor; override;
class function DefaultVGridLineColor: TColor; override;
class function DefaultVGridBandLineColor: TColor; override;
class function DefaultDateNavigatorHeaderColor: TColor; override;
class function DefaultDateNavigatorSelectionColor: TColor; override;
class function DefaultDateNavigatorSelectionTextColor: TColor; override;
class function DefaultSchedulerBackgroundColor: TColor; override;
class function DefaultSchedulerTextColor: TColor; override;
class function DefaultSchedulerBorderColor: TColor; override;
class function DefaultSchedulerControlColor: TColor; override;
class function DefaultSchedulerNavigatorColor: TColor; override;
class function DefaultSchedulerViewContentColor: TColor; override;
class function DefaultSchedulerViewTextColor: TColor; override;
class function DefaultSelectionColor: TColor; override;
class function DefaultSelectionTextColor: TColor; override;
class function DefaultSeparatorColor: TColor; override;
class function DefaultTabColor: TColor; override;
class function DefaultTabTextColor: TColor; override;
class function DefaultTimeGridMajorScaleTextColor: TColor; override;
class function DefaultTabsBackgroundColor: TColor; override;
class function DefaultChartDiagramValueBorderColor: TColor; override;
class function DefaultChartDiagramValueCaptionTextColor: TColor; override;
class function DefaultChartHistogramAxisColor: TColor; override;
class function DefaultChartHistogramGridLineColor: TColor; override;
class function DefaultChartHistogramPlotColor: TColor; override;
class function DefaultChartPieDiagramSeriesSiteBorderColor: TColor; override;
class function DefaultChartPieDiagramSeriesSiteCaptionColor: TColor; override;
class function DefaultChartPieDiagramSeriesSiteCaptionTextColor: TColor; override;
class function DefaultChartToolBoxDataLevelInfoBorderColor: TColor; override;
class function DefaultChartToolBoxItemSeparatorColor: TColor; override;
class procedure DrawBorder(ACanvas: TcxCanvas; R: TRect); override;
class function BorderSize: Integer; override;
// tabs
class procedure DrawTab(ACanvas: TcxCanvas; R: TRect; ABorders: TcxBorders; const AText: string; AState: TcxButtonState;
AVertical: Boolean; AFont: TFont; ATextColor, ABkColor: TColor; AShowPrefix: Boolean = False); override;
class procedure DrawTabBorder(ACanvas: TcxCanvas; R: TRect; ABorder: TcxBorder; ABorders: TcxBorders; AVertical: Boolean); override;
class procedure DrawTabsRoot(ACanvas: TcxCanvas; const R: TRect; ABorders: TcxBorders; AVertical: Boolean); override;
class function IsDrawTabImplemented(AVertical: Boolean): Boolean; override;
class function IsTabHotTrack(AVertical: Boolean): Boolean; override;
class function TabBorderSize(AVertical: Boolean): Integer; override;
// Scrollbar
class procedure DrawScrollBarPart(ACanvas: TcxCanvas; AHorizontal: Boolean; R: TRect; APart: TcxScrollBarPart; AState: TcxButtonState); override;
// buttons
class function IsButtonHotTrack: Boolean; override;
class function ButtonBorderSize(AState: TcxButtonState = cxbsNormal): Integer; override;
class function ExpandButtonSize: Integer; override;
class procedure DrawButton(ACanvas: TcxCanvas; R: TRect; const ACaption: string; AState: TcxButtonState; ADrawBorder: Boolean = True;
AColor: TColor = clDefault; ATextColor: TColor = clDefault; AWordWrap: boolean = False); override;
// size grip
class function SizeGripSize: TSize; override;
class procedure DrawSizeGrip(ACanvas: TcxCanvas; const ARect: TRect; ABackgroundColor: TColor = clDefault); override;
// header
class function HeaderBorderSize: Integer; override;
class procedure DrawHeader(ACanvas: TcxCanvas; const ABounds, ATextAreaBounds: TRect;
ANeighbors: TcxNeighbors; ABorders: TcxBorders; AState: TcxButtonState;
AAlignmentHorz: TAlignment; AAlignmentVert: TcxAlignmentVert; AMultiLine, AShowEndEllipsis: Boolean;
const AText: string; AFont: TFont; ATextColor, ABkColor: TColor;
AOnDrawBackground: TcxDrawBackgroundEvent = nil; AIsLast: Boolean = False;
AIsGroup: Boolean = False); override;
class procedure DrawHeaderPressed(ACanvas: TcxCanvas; const ABounds: TRect); override;
class function IsHeaderHotTrack: Boolean; override;
class procedure DrawHeaderBorder(ACanvas: TcxCanvas; const R: TRect; ANeighbors: TcxNeighbors; ABorders: TcxBorders); override;
class procedure DrawHeaderControlSection(ACanvas: TcxCanvas; const ABounds, ATextAreaBounds: TRect;
ANeighbors: TcxNeighbors; ABorders: TcxBorders; AState: TcxButtonState;
AAlignmentHorz: TAlignment; AAlignmentVert: TcxAlignmentVert; AMultiLine,
AShowEndEllipsis: Boolean; const AText: string; AFont: TFont; ATextColor,
ABkColor: TColor); override;
class procedure DrawHeaderControlSectionBorder(ACanvas: TcxCanvas; const R: TRect;
ABorders: TcxBorders; AState: TcxButtonState); override;
class procedure DrawHeaderEx(ACanvas: TcxCanvas; const ABounds, ATextAreaBounds: TRect;
ANeighbors: TcxNeighbors; ABorders: TcxBorders; AState: TcxButtonState;
AAlignmentHorz: TAlignment; AAlignmentVert: TcxAlignmentVert; AMultiLine, AShowEndEllipsis: Boolean;
const AText: string; AFont: TFont; ATextColor, ABkColor: TColor;
AOnDrawBackground: TcxDrawBackgroundEvent = nil); override;
class function HeaderBorders(ANeighbors: TcxNeighbors): TcxBorders; override;
// filter
class function FilterCloseButtonSize: TPoint; override;
class function FilterDropDownButtonSize: TPoint; override;
class function FilterActivateButtonSize: TPoint; override;
class procedure DrawFilterDropDownButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState; AIsFilterActive: Boolean); override;
class procedure DrawFilterCloseButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState); override;
// checkbox
class procedure DrawCheckButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState; AChecked: Boolean); overload; override;
class procedure DrawCheckButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState; ACheckState: TcxCheckBoxState); overload; override;
// RadioButton
class procedure DrawRadioButton(ACanvas: TcxCanvas; X, Y: Integer; AButtonState: TcxButtonState; AChecked, AFocused: Boolean; ABrushColor: TColor; AIsDesigning: Boolean = False); override;
class function RadioButtonSize: TSize; override;
// footer
class procedure DrawFooterBorder(ACanvas: TcxCanvas; const R: TRect); override;
class function FooterBorderSize: Integer; override;
class procedure DrawFooterCellBorder(ACanvas: TcxCanvas; const R: TRect); override;
// Glyphs
class procedure DrawSortingMark(ACanvas: TcxCanvas; const R: TRect; AAscendingSorting: Boolean); override;
//
class procedure DrawMonthHeader(ACanvas: TcxCanvas; const ABounds: TRect;
const AText: string; ANeighbors: TcxNeighbors; const AViewParams: TcxViewParams;
AArrows: TcxHeaderArrows; ASideWidth: Integer; AOnDrawBackground: TcxDrawBackgroundEvent = nil); override;
end;
procedure PaintConstBorder(Size: integer; MaskData: TsMaskData; R: TRect; Canvas : TcxCanvas);
implementation
uses sGraphUtils, sSkinProps, acntUtils, sConst, sAlphaGraph, math, sVCLUtils;
function Skinned : boolean; begin
Result := (DefaultManager <> nil) and DefaultManager.SkinData.Active
end;
procedure PaintConstBorder(Size: integer; MaskData: TsMaskData; R: TRect; Canvas : TcxCanvas);
var
w, h, dw, dh, x, y : integer;
c : TColor;
begin
with DefaultManager do begin
if (WidthOf(R) < 4) or (HeightOf(R) < 4) or (MaskData.ImageCount = 0) then Exit;
dw := WidthOf(MaskData.R) div MaskData.ImageCount;
dh := HeightOf(MaskData.R) div (1 + MaskData.MaskType);
w := dw div 3;
h := dh div 3;
c := DefaultManager.GetGlobalColor;
StretchBlt(Canvas.Handle, R.Left, R.Top + Size, Size, R.Bottom - 2 * Size, MasterBitmap.Canvas.Handle,
MaskData.R.Left, MaskData.R.Top + h, Size, h, SRCCOPY); // left - middle
StretchBlt(Canvas.Handle, R.Left + Size, R.Top, R.Right - 2 * Size, Size, MasterBitmap.Canvas.Handle,
MaskData.R.Left + w, MaskData.R.Top, w, Size, SRCCOPY); // top - middle
StretchBlt(Canvas.Handle, R.Left + Size, R.Bottom - Size, R.Right - 2 * Size, Size, MasterBitmap.Canvas.Handle,
MaskData.R.Left + w, MaskData.R.Top + dh - Size, w, Size, SRCCOPY); // bottom - middle
StretchBlt(Canvas.Handle, R.Right - Size, R.Top + Size, Size, R.Bottom - 2 * Size, MasterBitmap.Canvas.Handle,
MaskData.R.Left + dw - Size, MaskData.R.Top + h, Size, h, SRCCOPY); // right - middle
BitBlt(Canvas.Handle, R.Left, R.Top, Size, Size, MasterBitmap.Canvas.Handle, MaskData.R.Left, MaskData.R.Top, SRCCOPY); // left - top
BitBlt(Canvas.Handle, R.Left, R.Bottom - Size, Size, Size, MasterBitmap.Canvas.Handle, MaskData.R.Left, MaskData.R.Top + dh - Size, SRCCOPY); // left - bottom
BitBlt(Canvas.Handle, R.Right - Size, R.Bottom - Size, Size, Size, MasterBitmap.Canvas.Handle, MaskData.R.Left + dw - Size, MaskData.R.Top + dh - Size, SRCCOPY); // right - bottom
BitBlt(Canvas.Handle, R.Right - Size, R.Top, Size, Size, MasterBitmap.Canvas.Handle, MaskData.R.Left + dw - Size, MaskData.R.Top, SRCCOPY); // right - top
for x := 0 to Size - 1 do for y := 0 to Size - 1 do begin
if Canvas.Canvas.Pixels[R.Left + x, R.Top + y] = clFuchsia then Canvas.Canvas.Pixels[R.Left + x, R.Top + y] := c;
if Canvas.Canvas.Pixels[R.Left + x, R.Bottom - Size + y] = clFuchsia then Canvas.Canvas.Pixels[R.Left + x, R.Bottom - Size + y] := c;
if Canvas.Canvas.Pixels[R.Right - Size + x, R.Bottom - Size + y] = clFuchsia then Canvas.Canvas.Pixels[R.Right - Size + x, R.Bottom - Size + y] := c;
if Canvas.Canvas.Pixels[R.Right - Size + x, R.Top + y] = clFuchsia then Canvas.Canvas.Pixels[R.Right - Size + x, R.Top + y] := c;
end;
end;
end;
{ TcxACLookAndFeelPainter }
class function TcxACLookAndFeelPainter.BorderSize: Integer;
begin
if Skinned then Result := 2 else Result := inherited BorderSize;
end;
class function TcxACLookAndFeelPainter.ButtonBorderSize(AState: TcxButtonState): Integer;
begin
if Skinned then Result := 4 else Result := inherited ButtonBorderSize(AState)
end;
class function TcxACLookAndFeelPainter.DefaultSizeGripAreaColor: TColor;
begin
if Skinned then Result := DefaultManager.GetActiveEditColor else Result := inherited DefaultSizeGripAreaColor
end;
class function TcxACLookAndFeelPainter.DefaultVGridCategoryColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultVGridCategoryColor;
end;
class function TcxACLookAndFeelPainter.DefaultVGridCategoryTextColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultVGridCategoryTextColor;
end;
class function TcxACLookAndFeelPainter.DefaultVGridLineColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultVGridLineColor;
end;
class function TcxACLookAndFeelPainter.DefaultVGridBandLineColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultVGridBandLineColor;
end;
class function TcxACLookAndFeelPainter.DefaultContentColor: TColor;
begin
if Skinned then Result := DefaultManager.GetActiveEditColor else Result := inherited DefaultContentColor
end;
class function TcxACLookAndFeelPainter.DefaultContentEvenColor: TColor;
begin
if Skinned then Result := DefaultManager.GetActiveEditColor else Result := inherited DefaultContentEvenColor;
end;
class function TcxACLookAndFeelPainter.DefaultContentOddColor: TColor;
begin
if Skinned then Result := DefaultManager.GetActiveEditColor else Result := inherited DefaultContentOddColor;
end;
class function TcxACLookAndFeelPainter.DefaultContentTextColor: TColor;
var
i : integer;
begin
if Skinned then begin
i := DefaultManager.GetSkinIndex(s_Edit);
if DefaultManager.IsValidSkinIndex(i) then Result := DefaultManager.gd[i].FontColor[1] else Result := 0;
end
else Result := inherited DefaultContentTextColor
end;
class function TcxACLookAndFeelPainter.DefaultDateNavigatorHeaderColor: TColor;
begin
Result := clYellow//!!!
end;
class function TcxACLookAndFeelPainter.DefaultDateNavigatorSelectionColor: TColor;
begin
if Skinned then Result:=DefaultManager.GetHighLightColor
else Result:=inherited DefaultDateNavigatorSelectionColor;
end;
class function TcxACLookAndFeelPainter.DefaultDateNavigatorSelectionTextColor: TColor;
begin
if Skinned then Result:=DefaultManager.GetHighLightFontColor
else Result:=inherited DefaultDateNavigatorSelectionTextColor;
end;
class function TcxACLookAndFeelPainter.DefaultSchedulerBackgroundColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultSchedulerBackgroundColor;
end;
class function TcxACLookAndFeelPainter.DefaultSchedulerTextColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultSchedulerTextColor;
end;
class function TcxACLookAndFeelPainter.DefaultSchedulerBorderColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultSchedulerBorderColor;
end;
class function TcxACLookAndFeelPainter.DefaultSchedulerControlColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultSchedulerControlColor;
end;
class function TcxACLookAndFeelPainter.DefaultSchedulerNavigatorColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultSchedulerNavigatorColor;
end;
class function TcxACLookAndFeelPainter.DefaultSchedulerViewContentColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultSchedulerViewContentColor;
end;
class function TcxACLookAndFeelPainter.DefaultSchedulerViewTextColor: TColor;
begin
if Skinned then Result:=clRed
else Result:=inherited DefaultSchedulerViewTextColor;
end;
class function TcxACLookAndFeelPainter.DefaultSelectionColor: TColor;
begin
if Skinned then Result:=DefaultManager.GetHighLightColor
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -