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

📄 winskindata.pas

📁 超级报表系统软件VclSkin.v2.60.4.29.完整源代码版.rar
💻 PAS
📖 第 1 页 / 共 3 页
字号:
                xcTab,xcStatusBar,xcSystemMenu];
  bmpmenu:=Timagelist.create(nil);
  bmpmenu.GetResource(rtBitmap,'VCLSKINMENU',16,[lrTransparent],clwhite);
  fversion := c_version;
//  bmpmenu.ResInstLoad(rtBitmap,'VCLSKINMENU',16,[lrTransparent],clwhite);
end;

destructor TSkinData.Destroy;
var i:integer;
begin
  bmpmenu.free;
  f3rdControls.free;
  if skinmanager<>nil then
    skinmanager.Removeskindata(self);
//  skinmanager=nil;
  data.free;
  sysicon.free;
  for i:= 1 to 4 do begin
     border[i].free;
  end;

  for i:= 0 to length(SysBtn)-1 do begin
     SysBtn[i].free;
  end;
  Button.free;
  Title.free;
  if BGBrush<>0 then begin
     deleteobject(BgBrush);
     BGBrush:=0;
  end;

  if box<>nil then Box.free;
  if toolbar<>nil then toolbar.free;
  if Tab<>nil then Tab.free;
  if StatusBar<>nil then statusbar.free;
  if ComBox<>nil then Combox.free;
  if ComBoxborder<>nil then ComBoxborder.free;
  if ExtraImages<>nil then ExtraImages.free;
  if Progress<>nil then Progress.free;
  if Header<>nil then Header.free;
  if MenuBar<>nil then MenuBar.free;
  if MenuItem<>nil then MenuItem.free;
  if MenuItemBG<>nil then MenuItemBG.free;
  if SArrow<>nil then SArrow.free;
  if HBar<>nil then HBar.free;
  if VBar<>nil then VBar.free;
  if HSlider<>nil then HSlider.free;
  if VSlider<>nil then VSlider.free;
  if Hspin<>nil then Hspin.free;
  if Vspin<>nil then Vspin.free;
  if TrackHorz<>nil then TrackHorz.free;
  if TrackVert<>nil then TrackVert.free;
  if TrackLeft<>nil then TrackLeft.free;
  if TrackRight<>nil then TrackRight.free;
  if TrackTop<>nil then TrackTop.free;
  if TrackBottom<>nil then TrackBottom.free;

{  if skinmanager.dlist.count=0 then begin
    skinmanager.free;
    skinmanager:=nil;
  end;}

  inherited Destroy;
end;

procedure TSkinData.SetControlList(Value: TStrings);
begin
  f3rdControls.Assign(Value);
end;

procedure TSkinData.ReadBord;
var s:string;
    i:integer;
begin
  for i:= 1 to 4 do begin
  if i<3 then begin
    border[i].r.top:=ini.Readinteger('Personality',border[i].IDName+'TopHeight',0);
    border[i].r.Bottom:=ini.Readinteger('Personality',border[i].IDName+'BotHeight',0);
    border[i].r.left:= 0;
    border[i].r.right:= 0;
  end else begin
    border[i].r.top:= 0;
    border[i].r.Bottom:=0;
    border[i].r.left:=ini.Readinteger('Personality',border[i].IDName+'TopHeight',0);
    border[i].r.right:=ini.Readinteger('Personality',border[i].IDName+'BotHeight',0);
  end;
  border[i].frame:=ini.Readinteger('Personality',border[i].IDName+'Frame',1);
  border[i].Tile:=ini.Readinteger('Personality',border[i].IDName+'Stretch',1);
  border[i].trans:=ini.readinteger('Personality',border[i].IDName+'Trans',1);
  readbmp(border[i].map,ini.ReadString('Personality',border[i].IDName, ''));
//  readbmp(border[i].maskmap,ini.ReadString('Personality', border[i].IDName+'Mask', ''));
  end;

end;

procedure TSkinData.Readbmp(bmp:Tbitmap;fname:string);
var s,s1:string;
begin
   s:= ExtractFileName(fname);
   s1:=ExtractFileExt(fname);
   if (s<>'') and (s1='.bmp') then begin
       reader.readfile(s,ms);
       if ms.size>0 then
         bmp.LoadFromstream(ms)
       else bmp.Assign(nil);
   end else bmp.Assign(nil);
end;

procedure TSkinData.ReadSysButton;
var i,n:integer;
    j:real;
    s:string;
    b:boolean;
begin
   for i:= 0 to high(SysBtn) do SysBtn[i].free;
   ini.ReadSections(sectionlist);
   for i:= sectionlist.count-1 downto 0 do begin
      s:=Uppercase(sectionlist.strings[i]);
      b:=false;
      if (s='BUTTONS') or (s='BUTTON.RADIO')
         or (s='BUTTON.CHECKBOX') then b:=true;
      if (pos('BUTTON',s)<>1) then b:=true;
      if b then sectionlist.delete(i);
   end;
   n:=sectionlist.count;
   setlength(SysBtn,n+3);
   for i:= 0 to sectionlist.count-1 do begin
      s:=Uppercase(sectionlist.strings[i]);
      SysBtn[i]:= TDataSkinSysButton.create(s);
      SysBtn[i].Action:=ini.readinteger(s,'Action',0);
      SysBtn[i].Align:=ini.readinteger(s,'Align',0);
      SysBtn[i].Xcoord:=ini.readinteger(s,'Xcoord',0);
      SysBtn[i].Ycoord:=ini.readinteger(s,'Ycoord',0);
      SysBtn[i].Visibility:=ini.readinteger(s,'Visibility',0);
      SysBtn[i].Visibility1:=ini.readinteger(s,'Visibility1',0);
      SysBtn[i].CombineOp:=ini.readinteger(s,'CombineOp',-1);
      SysBtn[i].frame:=ini.readinteger(s,'frame',0);
      readbmp(SysBtn[i].map,ini.ReadString(s, 'ButtonImage', ''));
      if sysbtn[i].frame=0 then begin
        sysbtn[i].frame:=6;
        if not sysbtn[i].map.empty then begin
           j:=sysbtn[i].map.width / sysbtn[i].map.height;
           if j>3.8 then
             sysbtn[i].frame:=6
           else
             sysbtn[i].frame:=3;
           if sysbtn[i].action<0 then
             sysbtn[i].frame:=6
        end;
       if sysbtn[i].action in [3,11] then
          sysbtn[i].map.assign(nil);
      end;
   end;
   for i:= n to n+2 do begin
      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 exit;
    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.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.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.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:TDataSkinborder;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);
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);
     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 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',''),clBtnShadow);
   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;

{//  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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -