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

📄 suiedit.pas

📁 SUIPack是一款为Delphi和C++Builder开发的所见即所得的界面增强VCL组件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
////////////////////////////////////////////////////////////////////////////////
//
//
//  FileName    :   SUIEdit.pas
//  Creator     :   Shen Min
//  Date        :   2002-08-22 V1-V3
//                  2003-06-20 V4
//  Comment     :
//
//  Copyright (c) 2002-2006 Sunisoft
//  http://www.sunisoft.com
//  Email: support@sunisoft.com
//
////////////////////////////////////////////////////////////////////////////////

unit SUIEdit;

interface

{$I SUIPack.inc}

uses Windows, Classes, Controls, StdCtrls, Forms, Graphics, Messages, Mask,
     SysUtils,
     SUIThemes, SUIMgr, SUIButton, SUI2Define;

type
    TsuiEdit = class(TCustomEdit)
    private
        m_BorderColor : TColor;
        m_UIStyle : TsuiUIStyle;
        m_FileTheme : TsuiFileTheme;

        procedure SetFileTheme(const Value: TsuiFileTheme);
        procedure SetUIStyle(const Value: TsuiUIStyle);
        procedure SetBorderColor(const Value: TColor);
        procedure WMPAINT(var Msg : TMessage); message WM_PAINT;
        procedure WMEARSEBKGND(var Msg : TMessage); message WM_ERASEBKGND;

    protected
        procedure Notification(AComponent: TComponent; Operation: TOperation); override;
        procedure UIStyleChanged(); virtual;    

    public
        constructor Create(AOwner : TComponent); override;

    published
        property FileTheme : TsuiFileTheme read m_FileTheme write SetFileTheme;
        property UIStyle : TsuiUIStyle read m_UIStyle write SetUIStyle;
        property BorderColor : TColor read m_BorderColor write SetBorderColor;

        property Anchors;
        property AutoSelect;
        property AutoSize;
        property BiDiMode;
        property CharCase;
        property Color;
        property Constraints;
        property Ctl3D;
        property DragCursor;
        property DragKind;
        property DragMode;
        property Enabled;
        property Font;
        property HideSelection;
        property ImeMode;
        property ImeName;
        property MaxLength;
        property OEMConvert;
        property ParentBiDiMode;
        property ParentColor;
        property ParentCtl3D;
        property ParentFont;
        property ParentShowHint;
        property PasswordChar;
        property PopupMenu;
        property ReadOnly;
        property ShowHint;
        property TabOrder;
        property TabStop;
        property Text;
        property Visible;
        property OnChange;
        property OnClick;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDock;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnKeyDown;
        property OnKeyPress;
        property OnKeyUp;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDock;
        property OnStartDrag;
    end;

    TsuiMaskEdit = class(TCustomMaskEdit)
    private
        m_BorderColor : TColor;
        m_UIStyle : TsuiUIStyle;
        m_FileTheme : TsuiFileTheme;

        procedure SetFileTheme(const Value: TsuiFileTheme);
        procedure SetUIStyle(const Value: TsuiUIStyle);
        procedure SetBorderColor(const Value: TColor);
        procedure WMPAINT(var Msg : TMessage); message WM_PAINT;
        procedure WMEARSEBKGND(var Msg : TMessage); message WM_ERASEBKGND;

    protected
        procedure Notification(AComponent: TComponent; Operation: TOperation); override;    

    public
        constructor Create(AOwner : TComponent); override;

    published
        property FileTheme : TsuiFileTheme read m_FileTheme write SetFileTheme;
        property UIStyle : TsuiUIStyle read m_UIStyle write SetUIStyle;
        property BorderColor : TColor read m_BorderColor write SetBorderColor;

        property Anchors;
        property AutoSelect;
        property AutoSize;
        property BiDiMode;
        property BorderStyle;
        property CharCase;
        property Color;
        property Constraints;
        property DragCursor;
        property DragKind;
        property DragMode;
        property Enabled;
        property EditMask;
        property Font;
        property ImeMode;
        property ImeName;
        property MaxLength;
        property ParentBiDiMode;
        property ParentColor;
        property ParentCtl3D;
        property ParentFont;
        property ParentShowHint;
        property PasswordChar;
        property PopupMenu;
        property ReadOnly;
        property ShowHint;
        property TabOrder;
        property TabStop;
        property Text;
        property Visible;
        property OnChange;
        property OnClick;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDock;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnKeyDown;
        property OnKeyPress;
        property OnKeyUp;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDock;
        property OnStartDrag;

    end;

    TsuiNumberEdit = class(TsuiEdit)
    private
        m_Mask: string;
        m_Value: Real;
        m_AutoSelectSigns: Integer;
        procedure SetValue(Value: Real);
        procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
    protected
        procedure CreateParams(var Params: TCreateParams); override;
        procedure DoExit; override;
        procedure DoEnter; override;
        procedure Change; override;
        procedure KeyPress(var Key: Char); override;
        procedure Click; override;
    public
        constructor Create(AOwner: TComponent); override;

    published
        property Mask: string read m_Mask write m_Mask;
        property Value: Real read m_Value write SetValue;
        property AutoSelectSigns: Integer read m_AutoSelectSigns write m_AutoSelectSigns;
        property AutoSelect;
        property AutoSize;
        property BorderStyle;
        property CharCase;
        property Color;
        property Ctl3D;
        property DragCursor;
        property DragMode;
        property Enabled;
        property Font;
        property HideSelection;
        property ImeMode;
        property ImeName;
        property MaxLength;
        property OEMConvert;
        property ParentColor;
        property ParentCtl3D;
        property ParentFont;
        property ParentShowHint;
        property PasswordChar;
        property PopupMenu;
        property ReadOnly;
        property ShowHint;
        property TabOrder;
        property TabStop;
        property Visible;
        property OnChange;
        property OnClick;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnKeyDown;
        property OnKeyPress;
        property OnKeyUp;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDrag;
    end;

    TsuiSpinButtons = class(TWinControl)
    private
        m_UpButton: TsuiArrowButton;
        m_DownButton: TsuiArrowButton;
        m_OnUpClick: TNotifyEvent;
        m_OnDownClick: TNotifyEvent;

        function CreateButton: TsuiArrowButton;
        procedure BtnClick(Sender: TObject);
        procedure AdjustSize(var W, H: Integer); reintroduce;
        procedure WMSize(var Message: TWMSize); message WM_SIZE;
        function GetFileTheme: TsuiFileTheme;
        function GetUIStyle: TsuiUIStyle;
        procedure SetFileTheme(const Value: TsuiFileTheme);
        procedure SetUIStyle(const Value: TsuiUIStyle);
        
    protected
        procedure Loaded; override;
        procedure KeyDown(var Key: Word; Shift: TShiftState); override;
        
    public
        constructor Create(AOwner: TComponent); override;
        procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
        
    published
        property OnUpClick: TNotifyEvent read m_OnUpClick write m_OnUpClick;
        property OnDownClick: TNotifyEvent read m_OnDownClick write m_OnDownClick;

        property FileTheme : TsuiFileTheme read GetFileTheme write SetFileTheme;
        property UIStyle : TsuiUIStyle read GetUIStyle write SetUIStyle;

    end;

    TsuiSpinEdit = class(TsuiEdit)
    private
        m_MinValue: Integer;
        m_MaxValue: Integer;
        m_Increment: Integer;
        m_Button: TsuiSpinButtons;
        m_EditorEnabled: Boolean;
        
        function GetValue: Integer;
        function CheckValue(NewValue: Integer): Integer;
        procedure SetValue(NewValue: Integer);
        procedure SetEditRect;
        procedure WMSize(var Message: TWMSize); message WM_SIZE;
        procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
        procedure CMExit(var Message: TCMExit); message CM_EXIT;
        procedure WMPaste(var Message: TWMPaste); message WM_PASTE;
        procedure WMCut(var Message: TWMCut); message WM_CUT;
        
    protected
        procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
        function IsValidChar(Key: Char): Boolean; virtual;
        procedure UpClick(Sender: TObject); virtual;
        procedure DownClick(Sender: TObject); virtual;
        procedure KeyDown(var Key: Word; Shift: TShiftState); override;
        procedure KeyPress(var Key: Char); override;
        procedure CreateParams(var Params: TCreateParams); override;
        procedure CreateWnd; override;

        procedure UIStyleChanged(); override;
        
    public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        
        property Buttons: TsuiSpinButtons read m_Button;

    published
        property Anchors;
        property AutoSelect;
        property AutoSize;
        property Color;
        property Constraints;
        property Ctl3D;
        property DragCursor;
        property DragMode;
        property EditorEnabled: Boolean read m_EditorEnabled write m_EditorEnabled default True;
        property Enabled;
        property Font;
        property Increment: Integer read m_Increment write m_Increment;
        property MaxLength;
        property MaxValue: Integer read m_MaxValue write m_MaxValue;
        property MinValue: Integer read m_MinValue write m_MinValue;
        property ParentColor;
        property ParentCtl3D;
        property ParentFont;
        property ParentShowHint;
        property PopupMenu;
        property ReadOnly;
        property ShowHint;
        property TabOrder;
        property TabStop;
        property Value: Integer read GetValue write SetValue;
        property Visible;
        property OnChange;
        property OnClick;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnKeyDown;
        property OnKeyPress;
        property OnKeyUp;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDrag;
    end;


implementation

uses SUIPublic;

{ TsuiEdit }

constructor TsuiEdit.Create(AOwner: TComponent);
begin
    inherited;

    ControlStyle := ControlStyle + [csOpaque];
    BorderStyle := bsNone;
    BorderWidth := 2;

    UIStyle := GetSUIFormStyle(AOwner);
end;


procedure TsuiEdit.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
    inherited;

    if (
        (Operation = opRemove) and
        (AComponent = m_FileTheme)
    )then
    begin
        m_FileTheme := nil;
        SetUIStyle(SUI_THEME_DEFAULT);          
    end;
end;

procedure TsuiEdit.SetBorderColor(const Value: TColor);
begin
    m_BorderColor := Value;
    Repaint();
end;

procedure TsuiEdit.SetFileTheme(const Value: TsuiFileTheme);
begin
    m_FileTheme := Value;
    SetUIStyle(m_UIStyle);
end;

procedure TsuiEdit.SetUIStyle(const Value: TsuiUIStyle);
var
    OutUIStyle : TsuiUIStyle;
begin
    m_UIStyle := Value;
    if UsingFileTheme(m_FileTheme, m_UIStyle, OutUIStyle) then
        m_BorderColor := m_FileTheme.GetColor(SKIN2_CONTROLBORDERCOLOR)
    else
        m_BorderColor := GetInsideThemeColor(OutUIStyle, SUI_THEME_CONTROL_BORDER_COLOR);
    UIStyleChanged();
    Repaint();
end;

procedure TsuiEdit.UIStyleChanged;
begin
    // do nothing
end;

procedure TsuiEdit.WMEARSEBKGND(var Msg: TMessage);
begin
    inherited;

    DrawControlBorder(self, m_BorderColor, Color);
end;

procedure TsuiEdit.WMPAINT(var Msg: TMessage);
begin
    inherited;

    DrawControlBorder(self, m_BorderColor, Color);
end;

{ TsuiMaskEdit }

constructor TsuiMaskEdit.Create(AOwner: TComponent);
begin
    inherited;

    ControlStyle := ControlStyle + [csOpaque];
    BorderStyle := bsNone;
    BorderWidth := 2;

    UIStyle := GetSUIFormStyle(AOwner);
end;

procedure TsuiMaskEdit.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
    inherited;

    if (
        (Operation = opRemove) and
        (AComponent = m_FileTheme)
    )then
    begin

⌨️ 快捷键说明

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