📄 winskindata.pas
字号:
SysBtn[i]:= TDataSkinSysButton.create(s);
SysBtn[i].Action:=7+i-n;
SysBtn[i].Align:=100;
SysBtn[i].Visibility:=100;
SysBtn[i].Visibility1:=100;
SysBtn[i].frame:=4;
end;
CreateMdibtn(n);
end;
procedure TSkinData.CreateMdibtn(n:integer);
var bmp:Tbitmap;
i,w,h:integer;
r1,r2:Trect;
begin
bmp:=Tbitmap.create;
readbmp(bmp,ini.ReadString('MDICONTROLS', 'Image', ''));
if bmp.empty then begin
bmp.free;
exit;
end;
w:= bmp.width div 12;
h:= bmp.height ;
for i:= 0 to 2 do begin
SysBtn[n+i].map.width:= w*4;
SysBtn[n+i].map.height:= h;
sysbtn[n+i].Xcoord := (3-i)*(w+4);
r1:=rect(i*4*w,0,(i+1)*4*w,h);
r2:=rect(0,0,w*4,h);
SysBtn[n+i].map.canvas.copyrect(r2,bmp.canvas,r1);
end;
bmp.free;
end;
procedure TSkinData.CreateMinCaption;
var i,w,h:integer;
bmp:Tbitmap;
c1,c2:TColor;
c0,gradcol1,gradcol2:Tcolor;
r:Trect;
s,v:integer;
begin
if mincaption=nil then
mincaption:=TDataSkinObject.create('MinCaption');
bmp:=Tbitmap.create;
h:=29;w:=80;
bmp.Width:=w;
bmp.Height:=h;
c0 := GetCaptionColor();
gradCol1:= Blend(clblack,c0, 50) ;
r:=Rect(0,0,w,h);
bmp.Canvas.Brush.Color:=c0;
bmp.Canvas.Pen.Color:= gradCol1;
bmp.canvas.Rectangle(r);
//GradFill(bmp.canvas.handle,r,gradCol2,gradCol1);
mincaption.map.assign(bmp);
mincaption.frame:=1;
mincaption.r := Rect(3,3,3,3);
bmp.free;
end;
procedure TSkinData.ReadObject(var aobject:TDataSkinObject;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:=TDataSkinObject.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.frame:= ini.readinteger(aname,'Frame',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;
end;
procedure TSkinData.ReadObject2(var aobject:TDataSkinborder;aname,image2: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:=TDataSkinborder.create(aname);
readbmp(aobject.map,s);
s:=ini.readstring(aname,Image2,'');
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);
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;
end;
procedure TSkinData.ReadProgress(var aobject:TDataSkinObject;aname:string);
var s:string;
begin
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);
if aobject.tile>1 then aobject.tile:=1;
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);
if button.Tile>1 then button.Tile:=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',1);
aobject.r.left:=ini.readinteger(aname,'TileLeftMenu',1);
aobject.r.right:=ini.readinteger(aname,'TileRightMenu',1);
if aobject.Tile>1 then aobject.Tile:=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;
{procedure TSkinData.RebuildToolbar;
var bmp:Tbitmap;
w,i,h : integer;
r1,r2:Trect;
begin
if toolbar<>nil then exit;
if statusbar=nil then exit;
bmp :=Tbitmap.create;
w:=statusbar.map.width div statusbar.frame;
bmp.Width := w - statusbar.r.Left-statusbar.r.Right;
h:=statusbar.Map.Height;
bmp.Height := h-statusbar.r.Top;
r1:=Rect(statusbar.r.Left,statusbar.r.Top,w-statusbar.r.Right,bmp.Height);
r2:=Rect(0,0,bmp.Width,bmp.Height);
bmp.Canvas.CopyRect(r2,statusbar.Map.canvas,r1);
toolbar:=TDataSkinObject.create('Toolbar');
toolbar.Map.Assign(bmp);
toolbar.r.Bottom:=statusbar.r.Bottom;
toolbar.frame:=1;
bmp.free;
end;}
procedure TSkinData.RebuildToolbar;
var bmp:Tbitmap;
c0,gradcol1,gradcol2:Tcolor;
r:Trect;
s,v:integer;
begin
bmp :=Tbitmap.create;
bmp.Width := 10 ;
bmp.Height := 40;
c0 := GetCaptionColor();
gradCol1:= Blend(clgray,c0, 150) ;
gradCol2:= Blend(colors[csButtonFace],clwhite, 150) ;
s:= GetHSV(c0);
if s>110 then begin
v:= 50+25*(225-s) div 140;
gradCol1:= Blend(c0,clwhite,v);
end;
r:=Rect(0,0,bmp.Width,bmp.Height);
GradFill(bmp.canvas.handle,r,gradCol2,gradCol1);
if toolbar=nil then
toolbar:=TDataSkinObject.create('Toolbar');
toolbar.Map.Assign(bmp);
toolbar.frame:=1;
bmp.free;
end;
procedure TSkinData.CreateCaptionFont;
var
NonClientMetrics: TNonClientMetrics;
begin
If Assigned(CaptionFont) then FreeAndNIL(CaptionFont);
CaptionFont := TFont.Create;
NonClientMetrics.cbSize := SizeOf(NonClientMetrics);
if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then
CaptionFont.Handle := CreateFontIndirect(NonClientMetrics.lfCaptionFont);
end;
procedure TSkinData.CreateLogo;
var s:string;
r:Trect;
font:Tfont;
begin
s:='VCLSkin Demo';
font:=Tfont.Create;
font.Name:='Tahoma MS';
font.Size:=10;
font.Style:=[fsBold];
// logo.Transparent:=true;
// logo.TransparentColor:=clwhite;//clFuchsia;
logo.Canvas.Font:=font;//captionfont;
r:=Rect(0,0,50,30);
DrawTextA(logo.canvas.Handle,pchar(s),-1,r, DT_CALCRECT or DT_NOCLIP);
if (r.Right<150) and (r.Bottom<20) then begin
logo.Width:=r.Right+2;
logo.Height:=r.Bottom+2;
logo.canvas.Brush.color:= clwhite;//clFuchsia;
logo.Canvas.Rectangle(rect(0,0,r.Right+2,r.Bottom+2));
// logo.Canvas.FillRect(rect(0,0,logo.width,logo.Height));
SetBkMode(logo.Canvas.Handle, TRANSPARENT);
offsetrect(r,1,1);
DrawText(logo.canvas.Handle,pchar(s),-1,r, 0);
end;
font.free;
end;
procedure TSkinData.ReBuildComboxArrow;
var bmp:Tbitmap;
i,cw,w:integer;
r1,r2:Trect;
begin
if comboxarrow=nil then
comboxarrow:= TDataSkinObject.create('ComboxArrow');
if (Comboxborder=nil) then begin
if (combox<>nil) then begin
comboxarrow.Map.Assign(combox.Map);
ChangeTrans(comboxarrow.Map,colors[csButtonface]);
comboxarrow.frame := combox.frame;
end;
exit;
end;
if (combox.style<>2) then exit;
cw:=17;
bmp:=Tbitmap.create;
bmp.Height:=cw;
bmp.Width:= cw*ComBoxborder.frame;
w:= combox.map.width div ComBoxborder.frame;
for i:= 1 to ComBoxborder.frame do begin
r1:= Rect(i*w-2-cw,2,i*w-2,19);
r2:= rect((i-1)*cw,0,i*cw,cw);
bmp.Canvas.CopyRect(r2,combox.map.Canvas,r1);
end;
comboxarrow.frame:=ComBoxborder.frame;
comboxarrow.Map.Assign(bmp);
bmp.free;
end;
procedure TSkinData.ReBuildCombobox;
var temp,bmp:Tbitmap;
w1,i,h : integer;
r1,r2:Trect;
begin
if (Comboxborder=nil) or (combox=nil) then exit;
bmp :=Tbitmap.create;
temp :=Tbitmap.create;
temp.Height := 21;
temp.Width := 50;
bmp.height := temp.Height;
bmp.Width := temp.Width*ComBoxborder.frame;
bmp.PixelFormat := pf24Bit ;
temp.Canvas.Brush.color := clFuchsia;
bmp.Canvas.Brush.color := clFuchsia;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -