📄 tbxmacosxg32theme.pas
字号:
begin
with Canvas, ItemInfo do
begin
ArrowWidth := GetSystemMetrics(SM_CXMENUCHECK);
PaintMenuItemFrame(Canvas, ARect, ItemInfo);
ClrText := GetPartColor(ItemInfo, ipText);
R := ARect;
if (ItemOptions and IO_COMBO) <> 0 then
begin
X := R.Right - ArrowWidth - 1;
if not ItemInfo.Enabled then Pen.Color := ClrText
else if HoverKind = hkMouseHover then Pen.Color := clWhite //GetPartColor(ItemInfo, ipFrame)
else Pen.Color := PopupSeparatorColor;
MoveTo(X, R.Top + 1);
LineTo(X, R.Bottom - 1);
end;
if (ItemOptions and IO_SUBMENUITEM) <> 0 then
begin
Y := ARect.Bottom div 2;
X := ARect.Right - ArrowWidth * 2 div 3 - 1;
DrawArrow(ClrText);
end;
R2:= ARect;
//InflateRect(R2, -1, -1);
if ((Selected) and (Enabled)) then
begin
R.Left := R2.Left;
R.Right := R.Left + ItemInfo.PopupMargin;
//InflateRect(R, -1, -1);
PaintButton(Canvas, R, ItemInfo);
end;
end;
end;
procedure TTBXMacOSXg32Theme.PaintMenuItemFrame(Canvas: TCanvas;
const ARect: TRect; const ItemInfo: TTBXItemInfo);
const
ZERO_RECT: TRect = (Left: 0; Top: 0; Right: 0; Bottom: 0);
begin
with ItemInfo do if (Enabled and (HoverKind <> hkNone)) or
(not Enabled and (HoverKind = hkKeyboardHover)) then
begin
PaintBackgnd(Canvas, ZERO_RECT, ARect, ARect, MenuItemColors[misHot, ipBody], False, VT_UNKNOWN);
end;
end;
procedure TTBXMacOSXg32Theme.PaintSeparator(Canvas: TCanvas; ARect: TRect;
ItemInfo: TTBXItemInfo; Horizontal, LineSeparator: Boolean);
begin
with ItemInfo, ARect, Canvas do
begin
if Horizontal then
begin
InflateRect(ARect, -2,0);
Top := (Bottom div 2);
while Left < Right do
begin
Canvas.Pixels[Left, Top] := clBlack;
Left := Left + 3;
end;
end else if enabled then
begin
InflateRect(ARect, 0,-2);
Left := (Right div 2); // - 1;
while Top < Bottom do
begin
Canvas.Pixels[Left, Top] := clBlack;
Top := Top + 3;
end;
end;
end;
end;
procedure TTBXMacOSXg32Theme.PaintToolbarNCArea(Canvas: TCanvas; R: TRect;
const ToolbarInfo: TTBXToolbarInfo);
const
DragHandleSizes: array [Boolean, DHS_DOUBLE..DHS_SINGLE] of Integer = ((9, 0, 6), (14, 14, 14));
DragHandleOffsets: array [Boolean, DHS_DOUBLE..DHS_SINGLE] of Integer = ((2, 0, 2), (3, 0, 5));
GripperPart: array [Boolean] of Cardinal = (RP_GRIPPER, RP_GRIPPERVERT);
Pattern: array [0..15] of Byte = (0, 0, $CC, 0, $78, 0, $30, 0, $78, 0, $CC, 0, 0, 0, 0, 0);
var
// DC: HDC;
DHSize: Integer;
// Sz: TSize;
R2: TRect;
Flags: Cardinal;
Z: Integer;
BtnVisible, Horz, CloseButtondown, CloseButtonHover: Boolean;
y, yStart, yInc:Integer;
biRect:TRect;
begin
Canvas.FillRect(R);
{ Border }
if ToolbarInfo.BorderStyle = bsSingle then
Frame3D(Canvas.Handle, R, Lighten(ToolbarInfo.EffectiveColor, 24), Lighten(ToolbarInfo.EffectiveColor, -32), False);
if not ToolbarInfo.AllowDrag then Exit;
BtnVisible := (ToolbarInfo.CloseButtonState and CDBS_VISIBLE) <> 0;
Horz := not ToolbarInfo.IsVertical;
DHSize := GetTBXDragHandleSize(ToolbarInfo);
if Horz then R.Right := R.Left + DHSize
else R.Bottom := R.Top + DHSize;
{ Drag handle area }
if ToolbarInfo.DragHandleStyle <> DHS_NONE then
begin
R2 := R;
if Horz then Inc(R2.Top, 2)
else Inc(R2.Left, 2);
if BtnVisible then
if Horz then Inc(R2.Top, DHSize - 1)
else Dec(R2.Right, DHSize - 1);
With R2 do
if Not Horz then
begin
Top := (Bottom div 2);
while Left < Right do
begin
Canvas.Pixels[Left, Top] := clBlack;
Left := Left + 3;
end;
end else
begin
Left := (Right div 2); // - 1;
while Top < Bottom do
begin
Canvas.Pixels[Left, Top] := clBlack;
Top := Top + 3;
end;
end;
end;
{ Close Button }
if BtnVisible then
begin
With Canvas do
Begin
CloseButtonDown := (ToolbarInfo.CloseButtonState and CDBS_PRESSED) <> 0;
CloseButtonHover := (ToolbarInfo.CloseButtonState and CDBS_HOT) <> 0;
R2 := GetTBXDockedCloseButtonRect(ToolbarInfo);
Brush.Color := ToolbarColor;
Flags := TS_NORMAL;
if CloseButtonDown then Flags := TS_PRESSED
else if CloseButtonHover then Flags := TS_HOT;
{DrawThemeBackground(TOOLBAR_THEME, DC, TP_BUTTON, Flags, R2, nil);
if CloseButtonDown then OffsetRect(R2, 1, 1);
InflateRect(R2, -2, -2);}
yStart:= 0;
yInc:= MDICLOSE.Height div 4;
// y:=0;
Case Flags of
TS_NORMAL : y:=0;
TS_PRESSED: y:=2;
TS_HOT : y:=1;
Else y:=3;
End;//CASE
biRect:= Rect(0,yStart+yInc*y,MDICLOSE.Width,yStart+yInc*(y+1));
InflateRect(R2, (((biRect.Right-biRect.Left)-(R2.Right-R2.Left)) div 2), (((biRect.Bottom-biRect.Top)-(R2.Bottom-R2.Top)) div 2));
OffsetRect(R2, 0, -1);
//EnlargeBitmap(MDICLOSE, Canvas, biRect, R2, 8,8);
DrawImage(MDICLOSE, Canvas, biRect, R2.Left, R2.Top);
// DrawButtonBitmap(Canvas, R2);
End;
end;
end;
procedure TTBXMacOSXg32Theme.SetupColorCache;
var
DC: HDC;
HotBtnFace, DisabledText: TColor;
procedure Undither(var C: TColor);
begin
if C <> clNone then C := GetNearestColor(DC, ColorToRGB(C));
end;
begin
DC := StockCompatibleBitmap.Canvas.Handle;
{ gradCol1 := Blend(BaseColor, clWhite, 80);
gradCol2 := clWhite;
gradHandle1 := clSilver;
gradHandle2 := clGray;
gradHandle3 := clWhite;
gradBL := NearestMixedColor(clGray, gradCol1, 64);}
MenubarColor := $00F7F7F7;
ToolbarColor := $00F7F7F7;
PopupColor := MenuBarColor;
DockPanelColor := PopupColor;
PopupFrameColor := clSilver;
{ BarSepColor := $A0A0A0;
EditFrameColor := Blend(clSilver, clWhite, 80);
EditFrameDisColor := Blend(clSilver, clWhite, 50);}
{ if Aqua then
BaseColor := $00E0A030 // Aqua
else
BaseColor := $00A8A8A8; // Discret}
BaseColor := $00E0A030; // Aqua
HotColor := clBlack;
PopupSeparatorColor := clBlack;
HotBtnFace := Blend(BaseColor, clWhite, 80);
SetContrast(HotBtnFace, ToolbarColor, 50);
DisabledText := Blend(clBtnshadow, clWindow, 90);
WinFrameColors[wfsActive, wfpBorder] := clSilver; //Blend(clGray, clWhite, 80);
//SetContrast(WinFrameColors[wfsActive, wfpBorder], ToolbarColor, 120);
WinFrameColors[wfsActive, wfpCaption] := clSilver;
WinFrameColors[wfsActive, wfpCaptionText] := HotColor; //clWhite;
SetContrast(WinFrameColors[wfsActive, wfpCaptionText], clGray, 180);
WinFrameColors[wfsInactive, wfpBorder] := WinFrameColors[wfsActive, wfpBorder];
WinFrameColors[wfsInactive, wfpCaption] := BaseColor;
WinFrameColors[wfsInactive, wfpCaptionText] := clSilver;
SetContrast(WinFrameColors[wfsInactive, wfpCaptionText], clSilver, 120);
PnlFrameColors[wfsActive, wfpBorder] := clSilver; //Blend(clGray, clWhite, 80);
PnlFrameColors[wfsActive, wfpCaption] := clSilver;
PnlFrameColors[wfsActive, wfpCaptionText] := WinFrameColors[wfsActive, wfpCaptionText];
PnlFrameColors[wfsInactive, wfpBorder] := clSilver; //clGray;
PnlFrameColors[wfsInactive, wfpCaption] := clSilver;
PnlFrameColors[wfsInactive, wfpCaptionText] := clSilver;
SetContrast(PnlFrameColors[wfsInactive, wfpCaptionText], clGray, 120);
BtnItemColors[bisNormal, ipBody] := clNone;
BtnItemColors[bisNormal, ipText] := clBlack;
SetContrast(BtnItemColors[bisNormal, ipText], ToolbarColor, 180);
BtnItemColors[bisNormal, ipFrame] := clNone;
BtnItemColors[bisDisabled, ipBody] := clWhite;
BtnItemColors[bisDisabled, ipText] := Blend(clGray, clWhite, 70);
SetContrast(BtnItemColors[bisDisabled, ipText], ToolbarColor, 80);
BtnItemColors[bisDisabled, ipFrame] := Blend(clSilver, clWhite, 50);
BtnItemColors[bisSelected, ipBody] := clSilver;
SetContrast(BtnItemColors[bisSelected, ipBody], ToolbarColor, 5);
BtnItemColors[bisSelected, ipText] := BtnItemColors[bisNormal, ipText];
BtnItemColors[bisSelected, ipFrame] := clDkGray;//Blend(clSilver, clWhite, 50);
BtnItemColors[bisPressed, ipBody] := Blend(BaseColor, clWhite, 50);
BtnItemColors[bisPressed, ipText] := clBlack;
BtnItemColors[bisPressed, ipFrame] := BaseColor;
BtnItemColors[bisHot, ipBody] := HotBtnFace;
BtnItemColors[bisHot, ipText] := HotColor; //clWhite;
BtnItemColors[bisHot, ipFrame] := Blend(BaseColor, clWhite, 80);
//SetContrast(BtnItemColors[bisHot, ipFrame], ToolbarColor, 100);
BtnItemColors[bisDisabledHot, ipBody] := HotBtnFace;
BtnItemColors[bisDisabledHot, ipText] := DisabledText;
BtnItemColors[bisDisabledHot, ipFrame] := clNone;
BtnItemColors[bisSelectedHot, ipBody] := Blend(BaseColor, clWhite, 25);
SetContrast(BtnItemColors[bisSelectedHot, ipBody], ToolbarColor, 30);
BtnItemColors[bisSelectedHot, ipText] := clWhite;
SetContrast(BtnItemColors[bisSelectedHot, ipText], BtnItemColors[bisSelectedHot, ipBody], 180);
BtnItemColors[bisSelectedHot, ipFrame] := Blend(BaseColor, clWhite, 25);
SetContrast(BtnItemColors[bisSelectedHot, ipFrame], BtnItemColors[bisSelectedHot, ipBody], 100);
BtnItemColors[bisPopupParent, ipBody] := Blend(BaseColor, clWhite, 80);
BtnItemColors[bisPopupParent, ipText] := clBlack;
BtnItemColors[bisPopupParent, ipFrame] := BaseColor;
MenuItemColors[misNormal, ipBody] := clNone;
MenuItemColors[misNormal, ipText] := clBlack;
SetContrast(MenuItemColors[misNormal, ipText], PopupColor, 180);
MenuItemColors[misNormal, ipFrame] := clNone;
MenuItemColors[misDisabled, ipBody] := clNone;
MenuItemColors[misDisabled, ipText] := Blend(clGray, clWhite, 70);
SetContrast(MenuItemColors[misDisabled, ipText], PopupColor, 80);
MenuItemColors[misDisabled, ipFrame] := clNone;
MenuItemColors[misHot, ipBody] := BaseColor;
MenuItemColors[misHot, ipText] := clWhite;
MenuItemColors[misHot, ipFrame] := BtnItemColors[bisHot, ipFrame];
MenuItemColors[misDisabledHot, ipBody] := PopupColor;
MenuItemColors[misDisabledHot, ipText] := Blend(clGray, clWhite, 50);
MenuItemColors[misDisabledHot, ipFrame] := clNone;
{ DragHandleColor := Blend(clGray, clWhite, 75);
SetContrast(DragHandleColor, ToolbarColor, 85);
IconShadowColor := Blend(clBlack, HotBtnFace, 25);}
{ ToolbarSeparatorColor := clBlack;
PopupSeparatorColor := ToolbarSeparatorColor;}
Undither(MenubarColor);
Undither(ToolbarColor);
Undither(PopupColor);
Undither(DockPanelColor);
Undither(PopupFrameColor);
Undither(WinFrameColors[wfsActive, wfpBorder]);
Undither(WinFrameColors[wfsActive, wfpCaption]);
Undither(WinFrameColors[wfsActive, wfpCaptionText]);
Undither(WinFrameColors[wfsInactive, wfpBorder]);
Undither(WinFrameColors[wfsInactive, wfpCaption]);
Undither(WinFrameColors[wfsInactive, wfpCaptionText]);
Undither(PnlFrameColors[wfsActive, wfpBorder]);
Undither(PnlFrameColors[wfsActive, wfpCaption]);
Undither(PnlFrameColors[wfsActive, wfpCaptionText]);
Undither(PnlFrameColors[wfsInactive, wfpBorder]);
Undither(PnlFrameColors[wfsInactive, wfpCaption]);
Undither(PnlFrameColors[wfsInactive, wfpCaptionText]);
Undither(BtnItemColors[bisNormal, ipBody]);
Undither(BtnItemColors[bisNormal, ipText]);
Undither(BtnItemColors[bisNormal, ipFrame]);
Undither(BtnItemColors[bisDisabled, ipBody]);
Undither(BtnItemColors[bisDisabled, ipText]);
Undither(BtnItemColors[bisDisabled, ipFrame]);
Undither(BtnItemColors[bisSelected, ipBody]);
Undither(BtnItemColors[bisSelected, ipText]);
Undither(BtnItemColors[bisSelected, ipFrame]);
Undither(BtnItemColors[bisPressed, ipBody]);
Undither(BtnItemColors[bisPressed, ipText]);
Undither(BtnItemColors[bisPressed, ipFrame]);
Undither(BtnItemColors[bisHot, ipBody]);
Undither(BtnItemColors[bisHot, ipText]);
Undither(BtnItemColors[bisHot, ipFrame]);
Undither(BtnItemColors[bisDisabledHot, ipBody]);
Undither(BtnItemColors[bisDisabledHot, ipText]);
Undither(BtnItemColors[bisDisabledHot, ipFrame]);
Undither(BtnItemColors[bisSelectedHot, ipBody]);
Undither(BtnItemColors[bisSelectedHot, ipText]);
Undither(BtnItemColors[bisSelectedHot, ipFrame]);
Undither(BtnItemColors[bisPopupParent, ipBody]);
Undither(BtnItemColors[bisPopupParent, ipText]);
Undither(BtnItemColors[bisPopupParent, ipFrame]);
Undither(MenuItemColors[misNormal, ipBody]);
Undither(MenuItemColors[misNormal, ipText]);
Undither(MenuItemColors[misNormal, ipFrame]);
Undither(MenuItemColors[misDisabled, ipBody]);
Undither(MenuItemColors[misDisabled, ipText]);
Undither(MenuItemColors[misDisabled, ipFrame]);
Undither(MenuItemColors[misHot, ipBody]);
Undither(MenuItemColors[misHot, ipText]);
Undither(MenuItemColors[misHot, ipFrame]);
Undither(MenuItemColors[misDisabledHot, ipBody]);
Undither(MenuItemColors[misDisabledHot, ipText]);
Undither(MenuItemColors[misDisabledHot, ipFrame]);
// Undither(DragHandleColor);
// Undither(IconShadowColor);
// Undither(ToolbarSeparatorColor);
// Undither(PopupSeparatorColor);
// Undither(StatusPanelFrameColor);
end;
initialization
RegisterTBXTheme('MacOSx', TTBXMacOSXg32Theme);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -