⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winskindata.pas

📁 这是VCLSKIN v4.22 的所有的源代码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      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 + -