📄 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,ImgList;
const
CN_SkinChanged = WM_USER + $3001;
CN_CaptionBtnClick = WM_USER + $3104;
CN_UPdateMainMenu = WM_USER + $3105;
NM_COOLSB_CUSTOMDRAW = 0-$aff;
c_version = '2.60.4.29';
c_skintag = 33333;
type
TWinContainer = (xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller);
TWinContainers = set of TWinContainer;
TSkinControlType = (xcMainMenu, xcPopupMenu, 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;
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;
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;
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 : TIniFile;
fMenuSideBar :Tcolor;
ms:TMemorystream;
factive:boolean;
fdisableTag:integer;
FContainers: TWinContainers;
FSkinControls: TSkinControlTypes;
ftype:TSkinFormType;
fOnFormSkin:TOnFormSkin;
fOnSkinChanged :TNotifyevent;
FOnSkinControl: TOnSkinControl;
FInDLL : boolean;
f3rdControls:TStrings;
fmenuauto : boolean;
fversion : String;
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 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 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;
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;
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);
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 fversion;
property MenuUpdate: boolean read fmenuauto write fmenuauto;
// 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;
var GSkinData:TSkinData;
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('TTBDock=Panel');
f3rdControls.add('TTBToolbar=Panel');
f3rdControls.add('TImageEnMView=scrollbar');
f3rdControls.add('TImageEnView=scrollbar');
f3rdControls.add('TRzButton=button');
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('TDBCheckboxEh=Checkbox');
f3rdControls.add('TDBCheckboxEh=Checkbox');
f3rdControls.add('TLMDCHECKBOX=Checkbox');
f3rdControls.add('TLMDDBCHECKBOX=Checkbox');
f3rdControls.add('TLMDRadiobutton=Radiobutton');
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=trackbar');
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('TLMDRADIOGROUP=radiogroup');
f3rdControls.add('TLMDCheckGroup=CheckGroup');
f3rdControls.add('TLMDDBRADIOGROUP=radiogroup');
f3rdControls.add('TLMDDBCheckGroup=CheckGroup');
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('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
f3rdControls.add('TDXDBCURRENCYEDIT=Edit');
f3rdControls.add('TDXDBEDIT=Edit');
f3rdControls.add('TDXDBMASKEDIT=Edit');
f3rdControls.add('TDXDBHYPERLINKEDIT=Edit');
f3rdControls.add('TDXEDIT=Edit');
f3rdControls.add('TDXMASKEDIT=Edit');
f3rdControls.add('TWWDBEDIT=Edit');
f3rdControls.add('TDXBUTTONEDIT=Edit');
f3rdControls.add('TDXCURRENCYEDIT=Edit');
f3rdControls.add('TDXHYPERLINKEDIT=Edit');
f3rdControls.add('TOVCPICTUREFIELD=Edit');
f3rdControls.add('TOVCDBPICTUREFIELD=Edit');
f3rdControls.add('TOVCSLIDEREDIT=Edit');
f3rdControls.add('TOVCDBSLIDEREDIT=Edit');
f3rdControls.add('TOVCSIMPLEFIELD=Edit');
f3rdControls.add('TOVCDBSIMPLEFIELD=Edit');
f3rdControls.add('TO32DBFLEXEDIT=Edit');
f3rdControls.add('TOVCNUMERICFIELD=Edit');
f3rdControls.add('TOVCDBNUMERICFIELD=Edit');
end;
destructor TSkinControlList.Destroy;
begin
fedit.free;
fcombobox.free;
fradiobutton.free;
fcheckbox.free;
inherited destroy;
end;
procedure TSkinControlList.SetEdit(Value: TStrings);
begin
FEdit.Assign(Value);
end;
procedure TSkinControlList.SetCheckbox(Value: TStrings);
begin
Fcheckbox.Assign(Value);
end;
procedure TSkinControlList.Setradiobutton(Value: TStrings);
begin
Fradiobutton.Assign(Value);
end;
procedure TSkinControlList.SetCombobox(Value: TStrings);
begin
FCombobox.Assign(Value);
end;
constructor TDataSkinObject.Create(AIDName: String);
begin
inherited create;
Map:=Tbitmap.create;
Idname:=aidname;
end;
destructor TDataSkinObject.Destroy;
begin
map.assign(nil);
Map.free;
inherited destroy;
end;
constructor TDataSkinBorder.Create(AIDName: String);
begin
inherited create(aidname);
MaskMap:=TBitMap.create;
Idname:=aidname;
end;
destructor TDataSkinBorder.Destroy;
begin
MaskMap.free;
inherited destroy;
end;
constructor TDataSkinButton.Create(AIDName: String);
begin
inherited create(aidname);
CheckMap :=Tbitmap.create;
RadioMap :=Tbitmap.create;
end;
destructor TDataSkinButton.Destroy;
begin
CheckMap.free;
RadioMap.free;
inherited destroy;
end;
constructor TSkinData.Create(AOwner: TComponent);
var i: integer;
begin
inherited Create(AOwner);
ftype := sfMainform;
data := TMemorystream.create;
Empty := True;
sysicon:=Tbitmap.create;
MenuMsg:=true;
findll := false;
f3rdControls:=TStringlist.create;
initcontrollist;
Button := TDataSkinButton.create('Buttons');
border[1]:=TDataskinborder.create('Left');
border[2]:=TDataskinborder.create('Right');
border[3]:=TDataskinborder.create('Top');
border[4]:=TDataskinborder.create('Bottom');
Title := TDataSkinTitle.create('Title');
fmenuauto := true;
// if gSkindata=nil then gskindata:=self;
fdisabletag:=99;
FContainers := [xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller];
FSkinControls := [xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo,
xcCheckBox, xcRadioButton,xcProgress,xcScrollbar,xcedit,
xcButton,xcedit, xcBitBtn, xcSpeedButton, xcPanel, xcGroupBox,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -