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

📄 winskindata.pas

📁 超级报表系统软件VclSkin.v2.60.4.29.完整源代码版.rar
💻 PAS
📖 第 1 页 / 共 3 页
字号:
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 + -