⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 suiskin_raize.pas

📁 SUISkin 是为Delphi和C++Builder开发的最易用的界面增强VCL组件包。它能完全自动的为您的应用程序添加支持换肤功能
💻 PAS
字号:
////////////////////////////////////////////////////////////////////////////////
//
//
//  FileName    :   SUISkin_Raize.pas
//  Creator     :   Shen Min
//  Date        :   2005-04-21
//  Comment     :   SUISkin for Raize support
//
//  Copyright (c) 2002-2005 Sunisoft
//  http://www.sunisoft.com
//  Email: support@sunisoft.com
//
////////////////////////////////////////////////////////////////////////////////
//
//  How to use:
//      Please add this unit to the "uses" clause of the unit where you
//  also inlcuded SUISkinEngine unit. And add this unit after SUISkinEngine.
//
//  E.g.
//
//  unit test;
//  interface
//  uses ..., SUISkinEngine, SUISkin_Raize;
//  ...
//  ...


unit SUISkin_Raize;

interface

uses Windows, Messages, Graphics, Controls, Forms,
     RzRadChk, RzCommon, RzButton,
     SUISkinEngine, SUISkinConsts, SUISkinUtils, SUISkinPublic;

type
    TsuiSkinRzRadioButton = class(TsuiSkinControlVCL)
    protected
        procedure PaintControl(); override;
        procedure AfterDefProc(var Message : TMessage); override;
        function BeforeDefProc(var Message: TMessage) : Boolean; override;
    end;

    TsuiSkinRzCheckBox = class(TsuiSkinRzRadioButton)
    protected
        procedure PaintControl(); override;
    end;

    TsuiSkinRzButton = class(TsuiSkinControlVCL)
    private
        m_Downed : Boolean;
        
        procedure CalcBtnLayout(const Buf : TBitmap; out GlyphPos : TPoint; out TextRect : TRect);
        procedure PaintBitBtn(const Buf : TBitmap; out TextRect : TRect);
        
    protected
        procedure PaintControl(); override;
        procedure DoInit(); override;

        function BeforeDefProc(var Message: TMessage) : Boolean; override;
        procedure MouseUp(); override;
        procedure MouseDown(); override;
        procedure KeyUp(VKey : Integer); override;

    end;

const
    SUISKIN_RAIZE_DEF   : array [0 .. 2] of TsuiSkinCtrlVCLDef = (
        (CtrlClass : TRzRadioButton;
         SkinCtrlClass : TsuiSkinRzRadioButton),
        (CtrlClass : TRzCheckBox;
         SkinCtrlClass : TsuiSkinRzCheckBox),
        (CtrlClass : TRzButton;
         SkinCtrlClass : TsuiSkinRzButton)
    );


implementation

procedure RegisterToSUISkinEngine();
begin
    RegisterSkinControlClass(SUISKIN_RAIZE_DEF);
    
    RegisterBorderFilterClass('TRzGroupBar');
    RegisterBorderFilterClass('TRzPageControl');
    RegisterBorderFilterClass('TRzTabControl');
    RegisterBorderFilterClass('TRzTabSheet');
    RegisterBorderFilterClass('TRzButton');
    RegisterBorderFilterClass('TRzBitBtn');
    RegisterBorderFilterClass('TRzGroup');

    RegisterDisabledClass('TRzGroup');   

    RegisterDlgFormClass('TRzShellOpenSaveForm');
    RegisterDlgFormClass('TRzSelectFolderForm');
end;

{ TsuiSkinRzRadioButton }

procedure TsuiSkinRzRadioButton.AfterDefProc(var Message: TMessage);
begin
    inherited;
    if Message.Msg = WM_KILLFOCUS then
        PaintControl();

    if (Message.Msg = WM_SETFOCUS) then
    begin
        SendMessage(Message.WParam, SUIM_PAINTCONTROL, 0, 0);
        PaintControl();
    end; 
end;

function TsuiSkinRzRadioButton.BeforeDefProc(
  var Message: TMessage): Boolean;
begin
    if Message.Msg = WM_ERASEBKGND then
    begin
        Message.Result := 1;
        Result := false;
    end
    else
        Result := true;
end;

procedure TsuiSkinRzRadioButton.PaintControl;
var
    VAlignment : TsuiSkinVAlignType;
begin
    with TRzRadioButton(m_Control) do
    begin
        case AlignmentVertical of
        avTop : VAlignment := suiSkinTop;
        avBottom : VAlignment := suiSkinBottom;
        else
            VAlignment := suiSkinCenter;
        end;
        
        PaintRadioButtonLikeControl(Checked, Enabled, Color, Alignment,
            VAlignment, Width, ClientHeight, m_Engine, self, false);
    end;
end;

{ TsuiSkinRzCheckBox }

procedure TsuiSkinRzCheckBox.PaintControl;
var
    VAlignment : TsuiSkinVAlignType;
begin
    with TRzCheckBox(m_Control) do
    begin
        case AlignmentVertical of
        avTop : VAlignment := suiSkinTop;
        avBottom : VAlignment := suiSkinBottom;
        else
            VAlignment := suiSkinCenter;
        end;
        
        PaintRadioButtonLikeControl(Checked, Enabled, Color, Alignment,
            VAlignment, Width, ClientHeight, m_Engine, self, true);
    end;
end;

{ TsuiSkinRzButton }

function TsuiSkinRzButton.BeforeDefProc(var Message: TMessage): Boolean;
var
    ps : PAINTSTRUCT;
begin
    if Message.Msg = WM_KEYDOWN then
    begin
        if (Message.WParam = VK_RETURN) or (Message.WParam = VK_SPACE) then
            Result := false
        else
            Result := true;
    end
    else if (
        (Message.Msg = WM_LBUTTONDOWN) or
        (Message.Msg = WM_LBUTTONDBLCLK)
    ) then
    begin
        Include(m_MouseState, suiSkinMouseDown);
        PaintControl();
        Result := false;
    end
    else if Message.Msg = WM_ERASEBKGND then
    begin
        Message.Result := 1;
        Result := false;
    end
    else if Message.Msg = WM_PAINT then
    begin
        BeginPaint(GetHandle(), ps);
        PaintControl();
        EndPaint(GetHandle(), ps);
        Result := false;
        Message.Result := 0;
    end
    else
        Result := true;

end;

procedure TsuiSkinRzButton.CalcBtnLayout(const Buf: TBitmap;
  out GlyphPos: TPoint; out TextRect: TRect);
begin
    with TRzBitBtn(m_Control) do
        CalcBitBtnLayout(Layout, NumGlyphs, Spacing, Margin, Caption,
            Glyph, Buf, Font, m_Control, TextRect, GlyphPos);
end;

procedure TsuiSkinRzButton.DoInit;
begin
    inherited;
    m_Downed := false;
end;

procedure TsuiSkinRzButton.KeyUp(VKey: Integer);
begin
    if (VKey = VK_SPACE) and TWinControl(m_Control).Focused and m_Control.Enabled and m_Engine.RealActive then
        TRzButton(m_Control).Click();
end;

procedure TsuiSkinRzButton.MouseDown;
var
    ParentForm : TCustomForm;
begin
    ParentForm := GetParentForm(m_Control);
    if ParentForm = nil then
        Exit;
    if not FormHasFocus(ParentForm) then
        Exit;
    if TWinControl(m_Control).CanFocus() and m_Control.Enabled and m_Control.Visible then
    try
        TWinControl(m_Control).SetFocus();
    except end;

    m_Downed := true;
end;

procedure TsuiSkinRzButton.MouseUp;
begin
    if m_Downed then
        TRzButton(m_Control).Click();
    m_Downed := false;
end;

procedure TsuiSkinRzButton.PaintBitBtn(const Buf: TBitmap;
  out TextRect: TRect);
var
    P : TPoint;
begin
    CalcBtnLayout(Buf, P, TextRect);
    with TRzBitBtn(m_Control) do
        PaintBitBtnLikeControl(Enabled, suiSkinMouseDown in m_MouseState,
            NumGlyphs, P, Glyph, Buf);
end;

procedure TsuiSkinRzButton.PaintControl;
var
    BitBtn : Boolean;
begin
    if m_Control is TRzBitBtn then
        BitBtn := true
    else
        BitBtn := false;
    with TRzButton(m_Control) do
        PaintButtonLikeControl(suiSkinMouseDown in m_MouseState,
            suiSkinMouseIn in m_MouseState, BitBtn, m_Control, Font,
            m_Engine, self, PaintBitBtn); 
end;

initialization
    RegisterToSUISkinEngine();

    
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -