📄 winskindata.pas
字号:
if aobject<>nil then begin
aobject.free;
aobject:=nil;
end;
s:=ini.readstring(aname,'Bitmap','');
if s='' then exit;
aobject:=TDataSkinborder.create(aname);
readbmp(aobject.map,s);
s:=ini.readstring(aname,'Chunk','');
if s<>'' then readbmp(aobject.maskmap,s);
aobject.style:=ini.readinteger(aname,'Style',0);
aobject.r.left:=ini.readinteger(aname,'LeftWidth',0);
aobject.r.right:=ini.readinteger(aname,'RightWidth',0);
aobject.r.top:=ini.readinteger(aname,'TopHeight',0);
aobject.r.Bottom:=ini.readinteger(aname,'BottomHeight',0);
aobject.trans:=ini.readinteger(aname,'Trans',0);
aobject.tile:=ini.readinteger(aname,'Tile',0);
end;
procedure TSkinData.ReadBoxLabel(var aobject:TDataSkinBoxLabel;aname:string);
var s:string;
begin
if aobject<>nil then begin
aobject.free;
aobject:=nil;
end;
s:=ini.readstring(aname,'Image','');
if s='' then exit;
aobject:=TDataSkinBoxLabel.create(aname);
readbmp(aobject.map,s);
aobject.style:=ini.readinteger(aname,'Style',0);
aobject.r.left:=ini.readinteger(aname,'LeftWidth',0);
aobject.r.right:=ini.readinteger(aname,'RightWidth',0);
aobject.r.top:=ini.readinteger(aname,'TopHeight',0);
aobject.r.Bottom:=ini.readinteger(aname,'BottomHeight',0);
aobject.trans:=ini.readinteger(aname,'Trans',0);
aobject.tile:=ini.readinteger(aname,'Tile',0);
aobject.Normalcolor:=ini.readinteger(aname,'NormalColour',-1);
aobject.Overcolor:=ini.readinteger(aname,'MouseOverColour',-1);
aobject.Downcolor:=ini.readinteger(aname,'PressedColour',-1);
aobject.Normalcolor2:=getcolor(ini.readstring(aname,'NormalColour2',''),colors[csButtonText]);
aobject.Overcolor2:=getcolor(ini.readstring(aname,'MouseOverColour2',''),colors[csButtonText]);
aobject.Downcolor2:=getcolor(ini.readstring(aname,'PressedColour2',''),colors[csButtonText]);
if aobject.tile>1 then aobject.tile:=0;
aobject.Alignment:=ini.readinteger(aname,'BackgroundAlignment',0);
aobject.LeftShift:=ini.readinteger(aname,'BackgroundLeftShift',0);
aobject.RightShift:=ini.readinteger(aname,'BackgroundRightShift',0);
end;
procedure TSkinData.ReadButton;
var s,s1:string;
begin
s:='Buttons';
Button.r.left:=ini.readinteger(s,'LeftWidth',0);
Button.r.right:=ini.readinteger(s,'RightWidth',0);
Button.r.top:=ini.readinteger(s,'TopHeight',0);
Button.r.Bottom:=ini.readinteger(s,'BottomHeight',0);
Button.trans:=ini.readinteger(s,'Trans',0);
readbmp(Button.map,ini.readstring(s,'Bitmap',''));
Button.tile:=ini.readinteger(s,'Tile',0);
readbmp(Button.checkmap,ini.readstring(s,'CheckButton',''));
readbmp(Button.radiomap,ini.readstring(s,'RadioButton',''));
Button.Normalcolor:=ini.readinteger(s,'NormalColour',-1);
Button.Overcolor:=ini.readinteger(s,'MouseOverColour',-1);
Button.Downcolor:=ini.readinteger(s,'PressedColour',-1);
Button.RadioFrame:=ini.readinteger(s,'RadioButtonFrame',0);
Button.CheckFrame:=ini.readinteger(s,'CheckButtonFrame',0);
s1:=ini.readstring(s,'NormalColour2','');
if s1<>'' then Button.newnormal := true else Button.newnormal:=false;
s1:=ini.readstring(s,'MouseOverColour2','');
if s1<>'' then Button.newover := true else Button.newover:=false;
s1:=ini.readstring(s,'PressedColour2','');
if s1<>'' then Button.newdown := true else Button.newdown:=false;
Button.Normalcolor2:=getcolor(ini.readstring(s,'NormalColour2',''),colors[csButtonText]);
Button.Overcolor2:=getcolor(ini.readstring(s,'MouseOverColour2',''),colors[csButtonText]);
Button.Downcolor2:=getcolor(ini.readstring(s,'PressedColour2',''),colors[csButtonText]);
end;
procedure TSkinData.ReadMenuBar(var aobject:TDataSkinObject;aname:string);
var s:string;
begin
if aobject<>nil then begin
aobject.free;
aobject:=nil;
end;
s:=ini.readstring(aname,'menuBar','');
if s='' then exit;
aobject:=TDataSkinObject.create(aname);
readbmp(aobject.map,s);
aobject.r.top:=0;
aobject.r.bottom:=0;
aobject.Tile:=ini.readinteger(aname,'TileMenu',0);
aobject.r.left:=ini.readinteger(aname,'TileLeftMenu',1);
aobject.r.right:=ini.readinteger(aname,'TileRightMenu',1);
// aobject.r.top:=ini.readinteger(aname,'TopHeight',0);
// aobject.r.Bottom:=ini.readinteger(aname,'BottomHeight',0);
// aobject.Tile:=ini.readinteger(aname,'Tile',0);
end;
procedure TSkinData.ReadTitle(aobject:TDataSkinObject;aname:string);
var s:string;
begin
readbmp(aobject.map,ini.readstring(aname,'TextBack',''));
aobject.r.left:=ini.readinteger(aname,'TextShift',0);
aobject.r.top:=ini.readinteger(aname,'TextShiftVert',0);
aobject.r.right:=ini.readinteger(aname,'TextRightClip',0);
aobject.r.bottom:=0;
Title.aligment := ini.readinteger(aname,'TextAlignment',0);
Title.Background := ini.readinteger(aname,'Textbackground',0);
Title.FontHeight := ini.readinteger('Fonts','FontHeight',14);
Title.BackLeft := ini.readinteger(aname,'TXTBackleft',0);
Title.BackRight := ini.readinteger(aname,'TXTBackRight',0);
Title.activetext:= clnone;
Title.inactivetext:=clnone;
ReadRGB(aname,'ActiveText',Title.activetext);
ReadRGB(aname,'InActiveText',Title.inactivetext);
end;
function StrToWideStr(const S: AnsiString): WideString;
var
InputLength,
OutputLength: Integer;
begin
InputLength := Length(S);
OutputLength := MultiByteToWideChar(DefaultUserCodePage, 0, PAnsiChar(S), InputLength, nil, 0);
SetLength(Result, OutputLength);
MultiByteToWideChar(DefaultUserCodePage, 0, PAnsiChar(S), InputLength, PWideChar(Result), OutputLength);
end;
function _WStr(lpString: PWideChar; cchCount: Integer): WideString;
begin
if cchCount = -1 then
Result := lpString
else
Result := Copy(WideString(lpString), 1, cchCount);
end;
function Tnt_DrawTextW(hDC: HDC; wString: WideString;var lpRect: TRect; uFormat: UINT): Integer;
var lpString: PWideChar;
ncount:integer;
begin
lpstring:=PWideChar(wstring);
ncount:=length(wstring);
if Win32PlatformIsUnicode then
Result := DrawTextW(hDC, lpString, nCount, lpRect, uFormat)
else
Result := DrawTextA(hDC,
PAnsiChar(AnsiString(_WStr(lpString, nCount))), -1, lpRect, uFormat);
end;
function RGBToColor(R,G,B:Byte): TColor;
begin
Result:=B Shl 16 Or
G Shl 8 Or
R;
end;
function strcolor(s:string):Tcolor;
var i,j,l,n:integer;
a:array[1..3]of integer;
s2:string;
begin
result:=0;
if s='' then exit;
s:=trim(s);
l:=length(s);
for i:=1 to 3 do a[i]:=0;
j:=1;i:=1;s2:='';
while (i<=l) do begin
if s[i] in ['0'..'9'] then s2:=s2+s[i]
else begin
try
if s2<>'' then begin
a[j]:=strtoint(s2);
inc(j);s2:='';
end;
except
end;
//inc(j);s2:='';
end;
inc(i);
end;
try
if j=3 then a[3]:=strtoint(s2);
except
end;
result:=rgb(a[1],a[2],a[3]);
end;
function TSkinData.GetColor(const s1:string;acolor:Tcolor):Tcolor;
begin
result:=acolor;
if s1<>'' then result:=strcolor(s1);
end;
procedure TSkinData.ReadColor;
var s,s1:string;
n,i:integer;
b,r,g:byte;
begin
// TShemeColor=(csText,csTitleTextActive,csTitleTextNoActive,
// csButtonFace,csSelectText,csSelectBg,csTextDisable);
s:='Colours';
s1:=ini.readstring(s,'ButtonFace','');
colors[csText]:=getcolor(ini.readstring(s,'WindowText',''),clWindowText);
colors[csButtonFace]:=getcolor(ini.readstring(s,'ButtonFace',''),clBtnFace);
colors[csScrollbar]:=getcolor(ini.readstring(s,'Scrollbar',''),clscrollbar);
colors[csHilightText]:=getcolor(ini.readstring(s,'HilightText',''),clHighlightText);
colors[csHilight]:=getcolor(ini.readstring(s,'Hilight',''),clHighlight);
colors[csMenuBar]:=getcolor(ini.readstring(s,'Menubar',''),colors[csButtonFace]);
colors[csMenuBG]:=getcolor(ini.readstring(s,'Menu',''),clMenu);
colors[csMenuText]:=getcolor(ini.readstring(s,'MenuText',''),clMenuText);
colors[csButtonText]:=getcolor(ini.readstring(s,'ButtonText',''),clBtnText);
colors[csButtonHilight]:=getcolor(ini.readstring(s,'ButtonHilight',''),clBtnHighlight);
colors[csButtonlight]:=getcolor(ini.readstring(s,'Buttonlight',''),clBtnHighlight);
colors[csButtonShadow]:=getcolor(ini.readstring(s,'ButtonShadow',''),clBtnShadow);
colors[csButtonDkShadow]:=getcolor(ini.readstring(s,'ButtonDkShadow',''),cl3DDkShadow);
colors[csMenuBarText]:=getcolor(ini.readstring(s,'MenuBarText',''),clMenuText);
colors[csTitleTextActive]:=getcolor(ini.readstring(s,'TitleTextActive',''),clcaptionText);
colors[csTitleTextNoActive]:=getcolor(ini.readstring(s,'TitleTextNoActive',''),clinactivecaptionText);
ini.ReadSections(sectionlist);
for i:= sectionlist.count-1 downto 0 do begin
s:=Uppercase(sectionlist.strings[i]);
if (s='COLOURS') or (pos('COLOUR',s)<>1) then
sectionlist.delete(i);
end;
n:=sectionlist.count;
setlength(colorPreset,n);
for i:=0 to n-1 do begin
s:=Uppercase(sectionlist.strings[i]);
colorPreset[i]:=getcolor(ini.readstring(s,'color',''),clWindowText);
end;
for i:= 0 to high(PresetColors) do begin
PresetColors[i] := getcolor(ini.readstring('Customcolors','Color'+inttostr(i),''),clwhite);
end;
{// TShemeColor=(csText,csTitleTextActive,csTitleTextNoActive,
// ReadRGB('Personality','MenuText',colors[csMenuBarText]);
// ReadRGB('Personality','ActiveText',colors[csTitleTextActive]);
// ReadRGB('Personality','InactiveText',colors[csTitleTextNoActive]);
n:=getsectionnum('Colour','B');
setlength(colorPreset,n);
for i:=0 to n-1 do begin
r:=ini.readinteger(format('Colour%1d',[i]),'R',0);
g:=ini.readinteger(format('Colour%1d',[i]),'G',0);
b:=ini.readinteger(format('Colour%1d',[i]),'B',0);
colorPreset[i]:=rgbtocolor(r,g,b);
end;}
end;
Procedure TSkinData.ReadRGB(Section,aname:string;var value:Tcolor);
var a:array[1..3] of integer;
R : Array [1..3] of string;
i:integer;
begin
R[1]:='R';R[2]:='G';R[3]:='B';
for i:= 1 to 3 do begin
a[i]:=ini.readinteger(section,aname+r[i],-1);
end;
if (a[1]>=0) and (a[2]>=0) and (a[3]>=0) then
value:=rgb(a[1],a[2],a[3]);
// value:=RGBToColor(a[1],a[2],a[3]);
end;
function TSkinData.GetSectionNum(asection,aname:string):integer;
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);
sf.InitNestform(Tform(fNested));
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.EnableSkin(b:boolean);
begin
skinmanager.active:=b;
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -