📄 winskindata.pas
字号:
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_UPdateMainMenu = WM_USER + $3105;
CN_SkinEnabled = WM_USER + $3106;
NM_COOLSB_CUSTOMDRAW = 0-$aff;
c_version = '2.74.12.06';
c_skintag = 33333;
type
TWinContainer = (xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller);
TWinContainers = set of TWinContainer;
TSkinControlType = (xcMainMenu, xcPopupMenu,xcMenuItem, xcToolbar, xcControlbar, xcCombo,
xcCheckBox, xcRadioButton,xcProgress,xcScrollbar,xcEdit,
xcButton, xcBitBtn, xcSpeedButton, xcPanel, xcGroupBox,xcStatusBar,
xcTab,xcSystemMenu,xcFastReport);
TSkinControlTypes = set of TSkinControlType;
TShemeColor=(csText,csTitleTextActive,csTitleTextNoActive,
csButtonFace,csButtonText,
csButtonHilight,csButtonlight,csButtonShadow,csButtonDkshadow,
csSelectText,csSelectBg,csHilightText,csHilight,
csMenuBar,csMenuBarText,csMenuText,csMenubg,
csScrollbar,csTextDisable);
TShemeColors=array[csText..csTextDisable] of Tcolor;
TSkinFormType=(sfMainform,sfOnlyThisForm,sfDialog);
TSkinData = class;
TOnFormSkin = procedure(Sender:TObject;aName:string;Var DoSkin:boolean) of object;
TOnNewForm = 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;
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;
SkinName : string;
ini : TQuickIni;
fMenuSideBar :Tcolor;
ms:TMemorystream;
factive:boolean;
fdisableTag:integer;
FContainers: TWinContainers;
FSkinControls: TSkinControlTypes;
ftype:TSkinFormType;
fOnFormSkin:TOnFormSkin;
fOnNewform:TOnNewForm;
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:TDataSkinborder;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);
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 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,progress:Tdataskinborder;
HSpin,VSpin:Tdataskinborder;
Comboxborder,ExtraImages: TDataSkinObject;
combox: Tdataskinborder;
Box,Toolbar : TDataSkinObject;
boxlabel:TDataSkinBoxLabel;
StatusBar: TDataSkinObject;
Header: TDataSkinObject;
Menubar,MenuItem,MenuitemBG : TDataSkinObject;
SArrow,HBar,VBar,HSlider,VSlider:TDataSkinObject;
TrackHorz,TrackVert :TDataSkinObject;
TrackLeft,Trackright,Tracktop,Trackbottom:TDataSkinObject;
border:array[1..4] of TDataskinborder;
sectionlist:Tstringlist;
PresetColors:array[0..9] of integer;
BGBrush :HBRUSH;
MenuMsg:boolean;
bmpmenu:Timagelist;
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(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);
property OnNewForm :TOnNewForm 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 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;
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 _WStr(lpString: PWideChar; cchCount: Integer): WideString;
var GSkinData:TSkinData;
Win32PlatformIsUnicode:boolean;
DefaultUserCodePage: Cardinal;
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('TComboboxex=combobox');
f3rdControls.add('TRxSpeedButton=speedbutton');
f3rdControls.add('TControlBar=Panel');
f3rdControls.add('TTBDock=Panel');
f3rdControls.add('TTBToolbar=Panel');
f3rdControls.add('TAdvPageControl=nil');
// f3rdControls.add('TRzDBCheckBox=nil');
f3rdControls.add('TImageEnMView=scrollbar');
f3rdControls.add('TImageEnView=scrollbar');
f3rdControls.add('TAdvMemo=scrollbar');
f3rdControls.add('TDBAdvMemo=scrollbar');
f3rdControls.add('TRzButton=button');
f3rdControls.add('TRzBitbtn=bitbtn');
f3rdControls.add('TRzMenuButton=bitbtn');
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('TRzDBCheckBox=Checkbox');
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('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');
f3rdControls.add('TLMDLMDClock=Panel');
f3rdControls.add('TLMDTrackbar=panel');
f3rdControls.add('TLMDListCombobox=combobox');
f3rdControls.add('TLMDCheckListCombobox=combobox');
f3rdControls.add('TLMDHeaderListCombobox=combobox');
f3rdControls.add('TLMDImageCombobox=combobox');
f3rdControls.add('TLMDColorCombobox=combobox');
f3rdControls.add('TLMDFontCombobox=combobox');
f3rdControls.add('TLMDFontSizeCombobox=combobox');
f3rdControls.add('TLMDFontSizeCombobox=combobox');
f3rdControls.add('TLMDPrinterCombobox=combobox');
f3rdControls.add('TLMDDriveCombobox=combobox');
f3rdControls.add('TLMDCalculatorComboBox=combobox');
f3rdControls.add('TLMDTrackBarComboBox=combobox');
f3rdControls.add('TLMDCalendarComboBox=combobox');
f3rdControls.add('TLMDTreeComboBox=combobox');
f3rdControls.add('TLMDRADIOGROUP=radiogroup');
f3rdControls.add('TLMDCheckGroup=CheckGroup');
f3rdControls.add('TLMDDBRADIOGROUP=radiogroup');
f3rdControls.add('TLMDDBCheckGroup=CheckGroup');
f3rdControls.add('TLMDCalculatorEdit=edit');
f3rdControls.add('TLMDEDIT=Edit');
f3rdControls.add('TLMDMASKEDIT=Edit');
f3rdControls.add('TLMDBROWSEEDIT=Edit');
f3rdControls.add('TLMDEXTSPINEDIT=Edit');
f3rdControls.add('TLMDCALENDAREDIT=Edit');
f3rdControls.add('TLMDFILEOPENEDIT=Edit');
f3rdControls.add('TLMDFILESAVEEDIT=Edit');
f3rdControls.add('TLMDCOLOREDIT=Edit');
f3rdControls.add('TLMDDBEDIT=Edit');
f3rdControls.add('TLMDDBMASKEDIT=Edit');
f3rdControls.add('TLMDDBEXTSPINEDIT=Edit');
f3rdControls.add('TLMDDBSPINEDIT=Edit');
f3rdControls.add('TLMDDBEDITDBLookup=Edit');
f3rdControls.add('TLMDEDITDBLookup=Edit');
//combobox
f3rdControls.add('TDBLookupCombobox=Combobox');
f3rdControls.add('TWWDBCombobox=Combobox');
f3rdControls.add('TWWDBLookupCombo=Combobox');
f3rdControls.add('TWWDBCombobox=Combobox');
f3rdControls.add('TWWKeyCombo=Combobox') ;
f3rdControls.add('TWWTempKeyCombo=combobox');
f3rdControls.add('TWWDBDateTimePicker=Combobox');
f3rdControls.add('TWWRADIOGROUP=radiogroup');
f3rdControls.add('TWWDBEDIT=Edit');
f3rdControls.add('TcxButton=bitbtn');
f3rdControls.add('TcxDBCheckBox=checkbox');
f3rdControls.add('TcxDBRadioGroup=radiogroup');
f3rdControls.add('TcxRadioGroup=radiogroup');
f3rdControls.add('TcxCheckBox=checkbox');
{ f3rdControls.add('TDXDBPICKEDIT=Combobox');
f3rdControls.add('TDXDBCALCEDIT=Combobox');
f3rdControls.add('TDXDBIMAGEEDIT=Combobox');
f3rdControls.add('TDXDBPOPUPEDIT=Combobox');
f3rdControls.add('TDXDBEXTLOOKUPEDIT=Combobox');
f3rdControls.add('TDXDBLOOKUPEDIT=Combobox');
f3rdControls.add('TDXDBDATEEDIT=Combobox');
f3rdControls.add('TDXDATEEDIT=Combobox');
f3rdControls.add('TDXPICKEDIT=Combobox');
f3rdControls.add('TDXPOPUPEDIT=Combobox');
//edit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -