📄 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_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 + -