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

📄 winskindata.pas

📁 这是VCLSKIN v4.22 的所有的源代码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit WinSkinData;

{$WARNINGS OFF}
{$HINTS OFF}
{$RANGECHECKS OFF}

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms,
     IniFiles, Dialogs, FileCtrl,SkinRead,WinSkinStore,imgutil,Winskinini,
     ImgList,typinfo;

const
  CN_SkinChanged = WM_USER + $3001;
  CN_CaptionBtnClick = WM_USER + $3114;
  CN_CaptionBtnVisible = WM_USER + $3115;
  CN_UPdateMainMenu = WM_USER + $3105;
  CN_SkinEnabled = WM_USER + $3106;
  CN_TabSheetClose = WM_USER + $3107;
  CN_SkinNotify = WM_USER + $3108;
  NM_COOLSB_CUSTOMDRAW = 0-$aff;
  c_version = '4.22.08.28';
  c_skintag = 33333;

 // Billenium Effects messages
  BE_ID           = $41A2;
  BE_BASE         = CM_BASE + $0C4A;
  CM_BEPAINT      = BE_BASE + 0; // Paint client area to Billenium Effects' DC
  CM_BENCPAINT    = BE_BASE + 1; // Paint non client area to Billenium Effects' DC
  CM_BEFULLRENDER = BE_BASE + 2; // Paint whole control to Billenium Effects' DC
  CM_BEWAIT       = BE_BASE + 3; // Don't execute effect yet
  CM_BERUN        = BE_BASE + 4; // Execute effect now!

type
  TWinContainer = (xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
                  xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller);
  TWinContainers = set of TWinContainer;

  TSkinOption = (xoMDIScrollbar,xoMenuMerge,xoTransparent,xoPreview,xoParentBackGround,
   xoNoFocusRect,xoToolbarBK,xoMDIChildBorder,xoMenuBG,xoFormScrollbar);
  TSkinOptions = set of TSkinOption;

  TSkinControlType = (xcMainMenu, xcPopupMenu,xcMenuItem, xcToolbar, xcControlbar, xcCombo,
                xcCheckBox, xcRadioButton,xcProgress,xcScrollbar,xcEdit,
                xcButton, xcBitBtn, xcSpeedButton,xcSpin,xcPanel, xcGroupBox,xcStatusBar,
                xcTab,xcTrackBar,xcSystemMenu,xcFastReport);
  TSkinControlTypes = set of TSkinControlType;

  TShemeColor=(csText,csTitleTextActive,csTitleTextNoActive,
         csButtonFace,csButtonText,
         csButtonHilight,csButtonlight,csButtonShadow,csButtonDkshadow,
         csSelectText,csSelectBg,csHilightText,csHilight,
         csMenuBar,csMenuBarText,csMenuText,csMenubg,csCaption,
         csScrollbar,csTextDisable);
  TShemeColors=array[csText..csTextDisable] of Tcolor;

  TSkinFormType=(sfMainform,sfOnlyThisForm,sfDialog,sfDLL);

  TSkinData = class;
  TOnFormSkin  = procedure(Sender:TObject;aName:string;Var DoSkin:boolean) of object;
  TOnSkinForm   = procedure(Sender:TObject;ahwnd:HWND;aName:string) of object;
  TOnSkinControl = procedure(Sender: TComponent; SkinData: TSkinData; Form, Control: TControl;
                             ControlClass: String; var SkinnedControl: TComponent) of object;
  TGetScrollBarInfo = Function(hwnd: HWND; idObject: Longint;
              var psbi: TScrollBarInfo): BOOL; stdcall;
  FTrackMouseEvent = function(var EventTrack: TTrackMouseEvent):BOOL; stdcall;
  TGetComboBoxInfo = function(hwndCombo: HWND; var pcbi: TComboBoxInfo): BOOL; stdcall;
  TDisableProcessWindowsGhosting = procedure(); stdcall;

  TDataSkinObject = class(TObject)
  public
    r:Trect;
    Map: TBitMap;
    trans:integer;
    Tile : integer;
    IDName :String;
    frame : integer;
    style : integer;
    Normalcolor,Overcolor,Downcolor:integer;
    Normalcolor2,Overcolor2,Downcolor2:Tcolor;
    constructor Create(AIDName: String);
    destructor Destroy; override;
  end;

  TDataSkinBorder = class(TDataSkinObject)
  public
    MaskMap: TBitMap;
    constructor Create(AIDName: String);
    destructor Destroy; override;
  end;

  TDataSkinTitle = class(TDataSkinObject)
  public
    Aligment,BackGround,FontHeight :integer;
    backleft,backright:integer;
    activetext,inactivetext:Tcolor;
  end;

  TDataSkinButton = class(TDataSkinObject)
  public
    CheckMap,RadioMap:Tbitmap;
    radioframe,checkframe:integer;
    newnormal,newover,newdown:boolean;
    constructor Create(AIDName: String);
    destructor Destroy; override;
  end;

  TDataSkinSysButton = class(TDataSkinObject)
  public
    Action:integer;
    Align :integer;
    XCoord,YCoord:integer;
    CombineOp:integer;
    Visibility,Visibility1 :integer;
  end;

  TDataSkinBoxLabel = class(TDataSkinObject)
  public
    LeftShift,RightShift,Alignment:integer;
  end;

  TSkinControlList = class(TPersistent)
  private
    Fedit: TStrings;
    fCheckbox:Tstrings;
    fRadiobutton:tStrings;
    fcombobox   :TStrings;
    procedure SetEdit(Value:Tstrings);
    procedure SetCheckbox(Value:Tstrings);
    procedure SetRadiobutton(Value:Tstrings);
    procedure Setcombobox(Value:Tstrings);
  public
    constructor Create;
    destructor Destroy; override;
  published
    property Edit: TStrings read Fedit write SetEdit;
    property Checkbox: TStrings read Fcheckbox write SetCheckbox;
    property Combobox: TStrings read Fcombobox write SetCombobox;
    property Radiobutton: TStrings read Fradiobutton write Setradiobutton;
  end;

  TSkinData = class(TComponent)
  private
    fskinfile : string;
    ini : TQuickIni;
    fMenuSideBar :Tcolor;
    ms:TMemorystream;
    factive:boolean;
    fdisableTag:integer;
    FContainers: TWinContainers;
    FSkinControls: TSkinControlTypes;
    fSkinOptions:TSkinOptions;
    ftype:TSkinFormType;
    fOnFormSkin:TOnFormSkin;
    fOnBeforeSkinForm: TOnSkinForm;
    fOnAfterSkinForm: TOnSkinForm;
//    fOnNewform:TOnSkinForm;
    fOnSkinChanged :TNotifyevent;
    FOnSkinControl: TOnSkinControl;
    FInDLL : boolean;
    f3rdControls:TStrings;
    fmenuauto : boolean;
    fversion : String;
    fmenumerge:boolean;
    procedure ReadMenuBar(var aobject:TDataSkinObject;aname:string);
    procedure ReadProgress(var aobject:TDataSkinObject;aname:string);
    Procedure ReadRGB(Section,aname:string;var value:Tcolor);
    function  GetColor(const s1:string;acolor:Tcolor):Tcolor;
    procedure SetFrame;
    function GetSectionNum(asection,aname:string):integer;
    procedure WriteData (Stream : TStream);
    procedure ReadData (Stream : TStream);
    function GetSkinStore: string;
    procedure SetSkinStore(const Value: string);
    procedure CreateMdibtn(n:integer);
    procedure SetActive( Value: boolean);
    procedure SetVersion( Value: string);
    procedure InitControlList;
    procedure SetControlList(Value: TStrings);
    procedure GetAppIcon;
    procedure ReadTrack(var aobject:TDataSkinObject;aname:string);
    procedure CreateLogo;
    procedure CreateCaptionFont;
    procedure CreateMinCaption;
  protected
    procedure ReadObject(var aobject:TDataskinobject;aname:string);
    procedure ReadObject2(var aobject:TDataSkinborder;aname,image2:string);
    procedure ReadButton;
    procedure ReadSysButton;
    procedure LoadFromIni(filename:string);
    procedure ReadBord;
    procedure ReadColor;
    procedure ReadTitle(aobject:TDataSkinObject;aname:string);
    procedure ReadBoxLabel(var aobject:TDataSkinBoxLabel;aname:string);
    procedure DefineProperties (Filer : TFiler); override;
    procedure RebuildToolbar;
    procedure ReBuildCombobox;
    procedure ReBuildComboxArrow;
    procedure Loaded; override;
    function LoadSkin:boolean;
    procedure UpdateSkin;
  public
    reader: TSkinReader;
    data :Tmemorystream;
    Empty : boolean;
    Colors: TShemeColors;
    ColorPreset : array of Tcolor;
    SysIcon:Tbitmap;
    Title : TDataSkinTitle;
    SysBtn : array of TDataSkinSysButton;
    Button : TDataSkinButton;
    tab:Tdataskinborder;
    HSpin,VSpin:Tdataskinborder;
    Comboxborder,ExtraImages: TDataSkinObject;
    combox: Tdataskinborder;
    comboxarrow:TDataSkinObject;
    Box,Toolbar,Toolbarbtn : TDataSkinObject;
    progress,progresschunk:TdataskinObject;
    boxlabel:TDataSkinBoxLabel;
    StatusBar,TabSheet: TDataSkinObject;
    Header: TDataSkinObject;
    Menubar,MenuItem,MenuitemBG : TDataSkinObject;
    SArrow,HBar,VBar,HSlider,VSlider:TDataSkinObject;
    TrackHorz,TrackVert :TDataSkinObject;
    TrackBar,TrackBarVert:TDataSkinObject;
    TrackLeft,Trackright,Tracktop,Trackbottom:TDataSkinObject;
    MinCaption: TDataSkinObject;
    border:array[1..4] of TDataskinborder;
    sectionlist:Tstringlist;
    PresetColors:array[0..9] of integer;
    BGBrush :HBRUSH;
    MenuMsg:boolean;
    bmpmenu:Timagelist;
    SkinName : string;
    DebugList: TStrings;
    cxMax,cyMax:integer;
    logo:TBitmap;
    CaptionFont: Tfont;
    formhwnd:Thandle;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure LoadFromFile(value:string);
    procedure LoadFromStream(Stream: TStream);
    procedure LoadFromCollection(astore:TSkinStore;aindex:integer);
    procedure Readbmp(bmp:Tbitmap;fname:string);
    function GetPrecolor(var acolor:Tcolor;n:integer):boolean;
    function GetFileName(s:string):string;
    procedure Uninstall;
    procedure Install;
    procedure DoFormSkin(ahwnd:Thandle;aname:string;var Doskin:boolean);
    procedure DoSkinChanged;
    procedure AddNestForm(fParent,fNested:TWincontrol);
    procedure UpdateSkinControl(fParent:Tform;acontrol:Twincontrol=nil);
    procedure DeleteGraphicControl(fParent:Tform;acontrol:TGraphicControl);
    procedure UpdateMenu(fParent:Tform);
    procedure UpdateMainMenu(done:boolean);
    procedure SkinForm(ahwnd:THandle);
    procedure InstallThread(aThreadID:integer);
    procedure UnInstallThread(aThreadID:integer);
    procedure ChangeProperty(control: TObject;aprop,value:string);
    procedure EnableSkin(b:boolean);
    function GetCaptionColor:Tcolor;
    function GetScrollBarInfo(hwnd: HWND; idObject: Longint;
                   var psbi: TScrollBarInfo):boolean;
    procedure DoDebug(s:string);
    procedure ChangeForm(aform:Tform);
//    property OnNewForm     :TOnSkinForm read fOnNewform write fOnNewform;
  published
    property Active : boolean read factive write setactive;
    property DisableTag:integer read fdisabletag write fdisabletag;
    property SkinControls: TSkinControlTypes read fSkinControls write fSkinControls;
    property Options:TSkinOptions read fSkinOptions write fSkinOptions;
    property Skin3rd: TStrings read f3rdControls write SetControllist;
    property SkinFile : String read fskinfile write LoadFromFile;
    property SkinStore: string read GetSkinStore write SetSkinStore;
    property SkinFormtype:TSkinFormType read ftype write ftype;
    property Version : string read fversion write setversion;
    property MenuUpdate: boolean read fmenuauto write fmenuauto;
    property MenuMerge: boolean read fmenumerge write fmenumerge;
//    property InDLL :boolean read findll write findll;
    property OnFormSkin    :TOnFormSkin read fOnFormSkin write fOnFormSkin;
    property OnSkinChanged :TNotifyevent read fOnSkinChanged write fOnSkinChanged;
    property OnSkinControl :TOnSkinControl read FOnSkinControl write FOnSkinControl;
    property OnBeforeSkinForm: TOnSkinForm read fOnBeforeSkinForm write fOnBeforeSkinForm;
    property OnAfterSkinForm: TOnSkinForm read fOnAfterSkinForm write fOnAfterSkinForm;
  end;

function RGBToColor(R,G,B:Byte): TColor;
function strcolor(s:string):Tcolor;
function Tnt_DrawTextW(hDC: HDC; wString: WideString;var lpRect: TRect; uFormat: UINT): Integer;
function StrToWideStr(const S: AnsiString): WideString;
function WideStringToStringEx(const WS: WideString): AnsiString;
function _WStr(lpString: PWideChar; cchCount: Integer): WideString;
function FindControlx(Handle: HWnd): TWinControl;
procedure SkinDll(adata: Pointer);
procedure DoTrackMouse(ahwnd:THandle);
procedure CopyBMP(sbmp,dbmp:TBitMap);

var  GSkinData:TSkinData;
     Win32PlatformIsUnicode:boolean;
     DefaultUserCodePage: Cardinal;
     pGetScrollBarInfo:TGetScrollBarInfo;
     pTrackMouseEvent:FTrackMouseEvent;
     pGetComboBoxInfo:TGetComboBoxInfo;
     pDisableProcessWindowsGhosting:TDisableProcessWindowsGhosting ;
implementation

uses Winskinform,WinSkinDlg,winsubclass;

constructor TSkinControlList.Create;
begin
    inherited create;
    fedit := TStringList.create;
    fCombobox := TStringList.create;
    fcheckbox := TStringList.create;
    fradiobutton := TStringList.create;
end;

procedure TSkinData.InitControlList;
begin
    f3rdControls.add('TCategoryButtons=scrollbar');
    f3rdControls.add('TPngBitBtn=pngbitbtn');
    f3rdControls.add('TVirtualStringTree=scrollbar');
    f3rdControls.add('TVirtualDrawTree=scrollbar');

    f3rdControls.add('TTBXDockablePanel=Panel');
    f3rdControls.add('TAdvPanelGroup=scrollbar');
    f3rdControls.add('TComboboxex=combobox');
    f3rdControls.add('TRxSpeedButton=speedbutton');
    f3rdControls.add('THTMLViewer=scrollbar');
    f3rdControls.add('TDBCtrlGrid=scrollbar');

    f3rdControls.add('TfrSpeedButton=speedbutton');
    f3rdControls.add('TfrTBButton=speedbutton');

    f3rdControls.add('TControlBar=Panel');
    f3rdControls.add('TTBDock=Panel');
    f3rdControls.add('TTBToolbar=Panel');
//    f3rdControls.add('TAdvPageControl=nil');

    f3rdControls.add('TImageEnMView=scrollbar');
    f3rdControls.add('TImageEnView=scrollbar');
    f3rdControls.add('TAdvMemo=scrollbar');
    f3rdControls.add('TDBAdvMemo=scrollbar');

    f3rdControls.add('TcxDBLookupComboBox=combobox');
    f3rdControls.add('TcxDBComboBox=combobox');
    f3rdControls.add('TcxDBDateEdit=combobox');
    f3rdControls.add('TcxDBImageComboBox=combobox');
    f3rdControls.add('TcxDBCalcEdit=combobox');
    f3rdControls.add('TcxDBBlobEdit=combobox');
    f3rdControls.add('TcxDBPopupEdit=combobox');
    f3rdControls.add('TcxDBFontNameComboBox=combobox');
    f3rdControls.add('TcxDBShellComboBox=combobox');

    f3rdControls.add('TRxLookupEdit=combobox');
    f3rdControls.add('TRxDBLookupCombo=combobox');

    f3rdControls.add('TRzGroup=panel');
    f3rdControls.add('TRzButton=button');
    f3rdControls.add('TRzBitbtn=bitbtn');
    f3rdControls.add('TRzMenuButton=menubtn');
    f3rdControls.add('TRzCheckGroup=CheckGroup');
    f3rdControls.add('TRzRadioGroup=Radiogroup');
//    f3rdControls.add('TRzRadioButton=Radiobutton');
//    f3rdControls.add('TRzCheckBox=Checkbox');
    f3rdControls.add('TRzButtonEdit=Edit');
    f3rdControls.add('TRzDBRadioGroup=Radiogroup');
    f3rdControls.add('TRzDBRadioButton=Radiobutton');
    f3rdControls.add('TRzDateTimeEdit=combobox');
    f3rdControls.add('TRzColorEdit=combobox');
    f3rdControls.add('TRzDateTimePicker=combobox');
    f3rdControls.add('TRzDBDateTimeEdit=combobox');
    f3rdControls.add('TRzDbColorEdit=combobox');
    f3rdControls.add('TRzDBDateTimePicker=combobox');

    f3rdControls.add('TLMDButton=bitbtn');
    f3rdControls.add('TLMDGroupBox=Groupbox');
    f3rdControls.add('TDBCheckboxEh=Checkbox');
    f3rdControls.add('TDBCheckboxEh=Checkbox');
    f3rdControls.add('TLMDCHECKBOX=Checkbox');
    f3rdControls.add('TLMDDBCHECKBOX=Checkbox');

    f3rdControls.add('TLMDRadiobutton=Radiobutton');

    f3rdControls.add('TLMDCalculator=panel');
    f3rdControls.add('TLMDGROUPBOX=Panel');
    f3rdControls.add('TLMDSIMPLEPANEL=Panel');
    f3rdControls.add('TLMDDBCalendar=Panel');
    f3rdControls.add('TLMDButtonPanel=Panel');
    f3rdControls.add('TLMDLMDCalculator=Panel');
    f3rdControls.add('TLMDHeaderPanel=Panel');
    f3rdControls.add('TLMDTechnicalLine=Panel');

⌨️ 快捷键说明

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