📄 winskindata.pas
字号:
var i:integer;
s:string;
begin
i:=0;
s:=ini.readstring(format('%s%1d',[asection,i]),aname,'');
while s<>'' do begin
inc(i);
s:=ini.readstring(format('%s%1d',[asection,i]),aname,'');
end;
result:=i;
end;
procedure TSkinData.Uninstall;
begin
SkinManager.setaction(skin_Uninstall);
end;
procedure TSkinData.Install;
begin
SkinManager.setaction(skin_Active);
end;
procedure TSkinData.DoFormSkin(aname:string;var Doskin:boolean);
begin
if assigned(fOnformskin) then fOnformskin(self,aname,doskin)
// else if aname='TQRStandardPreview' then doskin:=false
else if aname='SysMonthCal32' then doskin:=false
// else if aname='TppPrintPreview' then doskin:=false
// else if aname='TdxfmStdPreview' then doskin:=false
else if (xcFastReport in SkinControls) and (pos('Tfr',aname)=1) then doskin:=false;
end;
procedure TSkinData.DoSkinChanged;
begin
if assigned(fOnSkinChanged) then
fOnSkinChanged(self);
end;
procedure TSkinData.AddNestForm(fParent,fNested:TWincontrol);
var i:integer;
sf :TWinSkinform;
spy:TWinSkinspy;
begin
if fNested=nil then exit;
for i:=0 to SkinManager.flist.count-1 do begin
sf:=TWinSkinform(SkinManager.flist[i]);
if sf.hwnd=fParent.handle then begin
spy := TWinSkinspy.Create(fNested);
spy.sf:=sf;
sf.InitControls(fparent);
break;
end;
end;
end;
procedure TSkinData.UpdateSkinControl(fParent:Tform;acontrol:Twincontrol=nil);
var i:integer;
sf :TWinSkinform;
begin
for i:=0 to SkinManager.flist.count-1 do begin
sf:=TWinSkinform(SkinManager.flist[i]);
if sf.hwnd=fParent.handle then begin
if acontrol=nil then sf.InitControls(fparent)
else sf.InitControls(acontrol);
break;
end;
end;
end;
procedure TSkinData.DeleteGraphicControl(fParent:Tform;acontrol:TGraphicControl);
var i,j:integer;
sf :TWinSkinform;
sc:Tskincontrol;
begin
for i:=0 to SkinManager.flist.count-1 do begin
sf:=TWinSkinform(SkinManager.flist[i]);
if sf.hwnd=fParent.handle then begin
for j:= 0 to sf.controllist.count-1 do begin
sc:= Tskincontrol(sf.controllist.items[j]);
if sc.GControl = acontrol then begin
sf.controllist.Delete(j);
sc.free;
break;
end;
end;
end;
end;
end;
procedure TSkinData.SkinForm(ahwnd:THandle);
begin
SkinManager.skinchildform:=true;
SkinManager.addform(ahwnd);
SkinManager.skinchildform:=false;
end;
procedure TSkinData.UpdateMenu(fParent:Tform);
var i:integer;
sf :TWinSkinform;
begin
for i:=0 to SkinManager.flist.count-1 do begin
sf:=TWinSkinform(SkinManager.flist[i]);
if sf.hwnd=fParent.handle then begin
sf.InitMenu(fParent,true,true);
break;
end;
end;
end;
procedure TSkinData.UpdateMainMenu(done:boolean);
var i:integer;
sf :TWinSkinform;
begin
menumsg:=done;
if not menumsg then exit;
for i:=0 to SkinManager.flist.count-1 do begin
sf:=TWinSkinform(SkinManager.flist[i]);
if (sf.menu<>nil) then begin
sf.menu.updatabtn;
//break;
end;
end;
end;
procedure TSkinData.InstallThread(aThreadID:integer);
begin
skinmanager.installthread(athreadid);
end;
procedure TSkinData.UnInstallThread(aThreadID:integer);
begin
SkinManager.UnInstallThread(aThreadID);
end;
procedure TSkinData.LoadFromFile(value:string);
begin
empty:=true;
fskinfile:=value;
if (csDesigning in ComponentState) then begin
if (value<>'') and (data.size>0) then data.clear;
Exit;
end;
if not fileexists(value) then exit;
data.clear;
data.loadfromfile(value);
LoadSkin;
// skinmanager.setaction(skin_change);
UpdateSkin;
// else showmessage('Skin file format error !');
end;
procedure TSkinData.LoadFromStream(Stream: TStream);
begin
empty:=true;
data.clear;
data.LoadFromStream(stream);
LoadSkin;
UpdateSkin;
// skinmanager.setaction(skin_change);
end;
procedure TSkinData.LoadFromCollection(astore:TSkinStore;aindex:integer);
var aitem:TSkinCollectionItem;
begin
if astore.Store.count<=aindex then exit;
empty:=true;
data.clear;
aitem:=TSkinCollectionItem(astore.Store.items[aindex]);
aitem.fdata.Position := 0;
data.LoadFromStream(aitem.fdata);
LoadSkin;
UpdateSkin;
// skinmanager.setaction(skin_change);
end;
function TSkinData.LoadSkin:boolean;
var fpath,fini:string;
PathBuffer : array [0..255] of char;
b:boolean;
begin
empty:=true;
if csDesigning in ComponentState then exit;
GetTempPath (256, PathBuffer);
fpath := StrPas(PathBuffer);
reader:=TSkinReader.create;
ms := TMemorystream.create;
b:=reader.loadfromstream(data);
if b then begin
reader.readini('.ini',ms,fini);
fini:=fpath+fini;
try
ms.savetofile(fini);
loadfromini(fini);
deletefile(fini);
finally
reader.free;
ms.free;
end;
end;
result:=b;
end;
procedure TSkinData.LoadFromIni(filename:string);
begin
ini := TIniFile.Create(FileName);
sectionlist:=Tstringlist.create;
ini.ReadSections(sectionlist);
//
SkinName := ini.ReadString('TitlebarSkin', 'SkinName', '');
//
Readbord;
readcolor;
ReadSysbutton;
Readbutton;
readtitle(Title,'Personality');
readProgress(Progress,'Progress');
readMenuBar(MenuBar,'Personality');
readobject(Box,'GroupBoxEdge');
readobject(Toolbar,'Toolbars');
readobject2(Tab,'Tabs','Border');
readobject(StatusBar,'StatusBarEdges');
// readobject(ComBox,'ComboButton');
readobject2(ComBox,'ComboButton','****');
if (combox<>nil) and ( not combox.Map.empty) then begin
combox.MaskMap.assign(combox.Map);
combox.MaskMap.PixelFormat:= pf24bit;
SpiegelnHorizontal(combox.MaskMap);
end;
readobject(ComBoxborder,'SunkEdge');
readobject(ExtraImages,'ExtraImages');
readobject(header,'Headerbar');
readObject(MenuItem,'MenuItem');
readObject(MenuItemBG,'MenuBackground');
readobject(SArrow,'Scrollbar');
readobject(HBar,'HorzScroll');
readobject(VBar,'VertScroll');
readobject(HSlider,'HorzScrollThumb');
readobject(VSlider,'VertScrollThumb');
readobject(TrackHorz,'Trackbar.ThumbHorz');
readobject(TrackVert,'Trackbar.ThumbVert');
readobject(TrackLeft,'Trackbar.ThumbLeft');
readobject(TrackRight,'Trackbar.ThumbRight');
readobject(TrackTop,'Trackbar.ThumbUp');
readobject(TrackBottom,'Trackbar.ThumbDown');
readobject2(HSpin,'UpDown.Horz','GlyphImage');
readobject2(VSpin,'UpDown.Vert','GlyphImage');
SetFrame;
if BGBrush<>0 then begin
deleteobject(BgBrush);
BGBrush:=0;
end;
BGBrush:=CreateSolidBrush(colors[csButtonFace]);
ini.Free;
sectionlist.free;
Empty := False;
// skinmanager.setaction(skin_change);
// SendSkinDataMessage(CN_SkinChanged);
end;
procedure TSkinData.SetFrame;
var i:integer;
w:integer;
begin
// ReadSysbutton;
// Readbutton;
button.frame:=5;
if button.radioframe=0 then begin
if button.radiomap.height>=16 then w:=16
else w:=13;
button.radioframe:= button.radiomap.width div w;
if button.radioframe<4 then button.radioframe:=4;
end;
if button.checkframe=0 then begin
if button.checkmap.height>=16 then w:=16
else w:=13;
button.checkframe:= button.checkmap.width div w;
if button.checkframe<4 then button.checkframe:=4;
end;
// for i:= 0 to length(sysbtn)-1 do
// sysbtn[i].frame:=5;
if title<>nil then Title.frame:=2;
if Progress<>nil then Progress.frame:=2;
if MenuBar<>nil then MenuBar.frame:=2;
if Box<>nil then Box.frame:=2;
if Toolbar<>nil then Toolbar.frame:=5;
if Tab<>nil then Tab.frame:=5;
if StatusBar<>nil then StatusBar.frame:=3;
if ComBox<>nil then ComBox.frame:=4;
if ComBoxborder<>nil then ComBoxborder.frame:=4;
if ExtraImages<>nil then ExtraImages.frame:=5;
if header<>nil then header.frame:=5;
if MenuItem<>nil then MenuItem.frame:=5;
if MenuItemBG<>nil then MenuItemBG.frame:=1;
if SArrow<>nil then SArrow.frame:=23;
if HBar<>nil then Hbar.frame:=4;
if VBar<>nil then Vbar.frame:=4;
if VSpin<>nil then VSpin.frame := 8;
if HSpin<>nil then HSpin.frame := 8;
if TrackHorz<>nil then TrackHorz.frame := 5;
if TrackVert<>nil then TrackVert.frame := 5;
if TrackLeft<>nil then TrackLeft.frame := 5;
if TrackRight<>nil then TrackRight.frame := 5;
if TrackTop<>nil then TrackTop.frame := 5;
if TrackBottom<>nil then TrackBottom.frame := 5;
if hslider<>nil then
HSlider.frame:=ini.readinteger('HorzScrollThumb','FrameCount',3);
if vslider<>nil then
VSlider.frame:=ini.readinteger('VertScrollThumb','FrameCount',3);
end;
function TSkinData.GetPrecolor(var acolor:Tcolor;n:integer):boolean;
begin
result:=false;
if (n>-1) and (n<length(colorpreset)) then begin
acolor:=colorpreset[n];
result:=true;
end;
end;
function TSkinData.getfilename(s:string):string;
var i:integer;
begin
i:=pos('.',s);
if i>0 then result:=copy(s,1,i-1)
else result:='';
end;
procedure TSkinData.DefineProperties(Filer: TFiler);
begin
inherited;
Filer.DefineBinaryProperty('SkinStream', ReadData, WriteData, True);
end;
procedure TSkinData.ReadData(Stream : TStream);
var ASize : longint;
begin
Stream.Read (ASize, sizeof (ASize));
if ASize > 0 then begin
data.SetSize (ASize);
Stream.Read (data.Memory^, ASize);
if not (csDesigning in ComponentState) then begin
LoadSkin ;
end;
end;
end;
procedure TSkinData.WriteData(Stream : TStream);
var ASize : longint;
begin
ASize := data.Size;
Stream.Write(ASize, sizeof (ASize));
if ASize > 0 then
Stream.Write (data.Memory^, ASize);
end;
function TSkinData.GetSkinStore: string;
begin
Result := '(none)';
if csDesigning in ComponentState then
begin
if (data.size>0) then
Result := '(Good)';
end;
end;
procedure TSkinData.SetSkinStore(const Value: string);
begin
end;
procedure TSkinData.Loaded;
begin
if (csDesigning in ComponentState) then exit;
if skinmanager=nil then
SkinManager:=TSkinManage.create;
skinmanager.addskindata(self);
if ftype = sfMainform then begin
skinmanager.installhook;
if factive then begin
if not empty then begin
skinmanager.setaction(skin_Active);
end else
factive:=false;
end;
end
else begin
skinmanager.active:=true;
inc(skinmanager.state);
if (owner is Tform ) then
skinmanager.addform(tform(owner).handle);
end;
end;
procedure TSkinData.SetActive( Value: boolean);
begin
if factive<>value then begin
factive:=value;
if (csDesigning in ComponentState) then exit;
if (csReading in ComponentState) then exit;
// if (skinformtype=sfMainform) or (skinformtype=sfDllForm) then begin
if (skinformtype=sfMainform) then begin
if value then begin
if not empty then begin
skinmanager.setaction(skin_Active);
skinmanager.updatedata:=self;
end;
end else begin
skinmanager.setaction(skin_uninstall);
skinmanager.updatedata:=self;
end;
end else if (skinformtype=sfOnlyThisForm) then begin
skinmanager.updatedata:=self;
if value then begin
if not empty then
skinmanager.setaction(skin_Active);
end else begin
skinmanager.setaction(skin_uninstall);
end;
end;
end;
end;
procedure TSkinData.UpdateSkin;
begin
if (csDesigning in ComponentState) then exit;
if (csReading in ComponentState) then exit;
if skinmanager=nil then loaded;
// if skinformtype<>sfMainform then exit;
skinmanager.updatedata:=self;
skinmanager.DeleteSysbtn;
skinmanager.setaction(skin_change);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -