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

📄 converterunit.pas

📁 skin components for design of your applicastions
💻 PAS
📖 第 1 页 / 共 5 页
字号:
            B:=True;
            break;
           end;
         if B then break;
        end;
       if B then
        begin
         T.CreateAlpha;
         FillChar(T.AlphaScanline[0]^,BB.Width*BB.Height,0);
         for Y:=ARect.Top to ARect.Bottom-1 do
          begin
           PB2:=Pointer(T.AlphaScanline[Y-ARect.Top]);
           for X:=ARect.Left to ARect.Right-1 do
            begin
             if Bitmap.Canvas.Pixels[X,Y]=TranspColor then
              PB2^:=0 else PB2^:=255;
             Inc(PB2);
            end;
          end;
        end;
      end;
     T.SaveToFile(FileName);
    end;
  finally
   BB.Free;
  end;
 finally
  T.Free;
 end;
end;

procedure SaveBitmap(Bitmap:TBitmap;const FileName:String;IsTransp:Boolean;
           TranspColor:TColor;CanRedirect:Boolean=True);
begin
 SaveBitmapRect(Bitmap,Rect(0,0,Bitmap.Width,Bitmap.Height),FileName,IsTransp,TranspColor);
end;

procedure SaveBitmapAsColor(const FileName,Color:String);
var SB:TSXSavedBitmap;
begin
 SB:=TSXSavedBitmap.Create;
 SB.Path:=FileName;
 SB.Color:=Color;
 SavedBitmaps.Add(SB);
end;

function BitmapRectIsSolid(Bitmap:TBitmap;ARect:TRect;var Color:String):Boolean;
var BB:TBitmap;
     C:TColor;
   X,Y:Integer;  
begin
 BB:=TBitmap.Create;
 try
  BB.PixelFormat:=Bitmap.PixelFormat;
  BB.Width:=ARect.Right-ARect.Left;
  BB.Height:=ARect.Bottom-ARect.Top;
  BB.Canvas.Draw(-ARect.Left,-ARect.Top,Bitmap);
  if not BitmapIsOpaque(BB) then
   begin
    Result:=False;
    exit;
   end;
  C:=BB.Canvas.Pixels[0,0];
  for X:=0 to BB.Width-1 do
   for Y:=0 to BB.Height-1 do
    if BB.Canvas.Pixels[X,Y]<>C then
     begin
      Result:=False;
      exit;
     end;
  Color:=inttostr(C and $FF)+' '+inttostr((C shr 8) and $FF)+' '+inttostr((C shr 16) and $FF);
  Result:=True;
 finally
  BB.Free;
 end;
end;

procedure SaveBoxTileImages(Bitmap:TBitmap;Left,Right,Top,Bottom:Integer;
           const Path:String;IsTransp:Boolean;TranspColor:TColor;
           CanRedirect:Boolean=True);
var A:Integer;
    C:String;
begin
 if Left+Right>Bitmap.Width then
  begin
   A:=Left+Right-Bitmap.Width;
   Dec(Left,A div 2);
   Dec(Right,A-A div 2);
  end;
 if Top+Bottom>Bitmap.Height then
  begin
   A:=Top+Bottom-Bitmap.Height;
   Dec(Top,A div 2);
   Dec(Bottom,A-A div 2);
  end;
 if Left+Right=Bitmap.Width then
  begin
   if Left>Right then Dec(Left) else Dec(Right);
  end;
 if Top+Bottom=Bitmap.Height then
  begin
   if Top>Bottom then Dec(Top) else Dec(Bottom);
  end;
 if Top>0 then
  begin
   if Left>0 then
    SaveBitmapRect(Bitmap,Rect(0,0,Left,Top),StringReplace(Path,'*','topleft',[]),IsTransp,TranspColor,CanRedirect);
   if Bitmap.Width-Right-Left>0 then
    begin
     if CanRedirect and BitmapRectIsSolid(Bitmap,Rect(Left,0,Bitmap.Width-Right,Top),C) then
      SaveBitmapAsColor(StringReplace(Path,'*','top',[]),C) else
       SaveBitmapRect(Bitmap,Rect(Left,0,Bitmap.Width-Right,Top),StringReplace(Path,'*','top',[]),IsTransp,TranspColor,CanRedirect);
    end;
   if Right>0 then
    SaveBitmapRect(Bitmap,Rect(Bitmap.Width-Right,0,Bitmap.Width,Top),StringReplace(Path,'*','topright',[]),IsTransp,TranspColor,CanRedirect);
  end;
 //
 if Bitmap.Height-Bottom-Top>0 then
  begin
   if Left>0 then
    begin
     if CanRedirect and BitmapRectIsSolid(Bitmap,Rect(0,Top,Left,Bitmap.Height-Bottom),C) then
      SaveBitmapAsColor(StringReplace(Path,'*','left',[]),C) else
       SaveBitmapRect(Bitmap,Rect(0,Top,Left,Bitmap.Height-Bottom),StringReplace(Path,'*','left',[]),IsTransp,TranspColor,CanRedirect);
    end;
   if Bitmap.Width-Right-Left>0 then
    begin
     if CanRedirect and BitmapRectIsSolid(Bitmap,Rect(Left,Top,Bitmap.Width-Right,Bitmap.Height-Bottom),C) then
      SaveBitmapAsColor(StringReplace(Path,'*','center',[]),C) else
       SaveBitmapRect(Bitmap,Rect(Left,Top,Bitmap.Width-Right,Bitmap.Height-Bottom),StringReplace(Path,'*','center',[]),IsTransp,TranspColor,CanRedirect);
    end;
   if Right>0 then
    begin
     if CanRedirect and BitmapRectIsSolid(Bitmap,Rect(Bitmap.Width-Right,Top,Bitmap.Width,Bitmap.Height-Bottom),C) then
      SaveBitmapAsColor(StringReplace(Path,'*','right',[]),C) else
       SaveBitmapRect(Bitmap,Rect(Bitmap.Width-Right,Top,Bitmap.Width,Bitmap.Height-Bottom),StringReplace(Path,'*','right',[]),IsTransp,TranspColor,CanRedirect);
    end;
  end;
 //
 if Bottom>0 then
  begin
   if Left>0 then
    SaveBitmapRect(Bitmap,Rect(0,Bitmap.Height-Bottom,Left,Bitmap.Height),StringReplace(Path,'*','bottomleft',[]),IsTransp,TranspColor,CanRedirect);
   if Bitmap.Width-Right-Left>0 then
    begin
     if CanRedirect and BitmapRectIsSolid(Bitmap,Rect(Left,Bitmap.Height-Bottom,Bitmap.Width-Right,Bitmap.Height),C) then
      SaveBitmapAsColor(StringReplace(Path,'*','bottom',[]),C) else
       SaveBitmapRect(Bitmap,Rect(Left,Bitmap.Height-Bottom,Bitmap.Width-Right,Bitmap.Height),StringReplace(Path,'*','bottom',[]),IsTransp,TranspColor,CanRedirect);
    end;
   if Right>0 then
    SaveBitmapRect(Bitmap,Rect(Bitmap.Width-Right,Bitmap.Height-Bottom,Bitmap.Width,Bitmap.Height),StringReplace(Path,'*','bottomright',[]),IsTransp,TranspColor,CanRedirect);
  end;
end;

procedure TForm1.ProcessGeneral(const MyName:String;SkinIni,TmpIni:TIniFile);
var S:String;
begin
 SkinIni.WriteString('Strings','SkinName',MyName);
 S:=TmpIni.ReadString('SysMetrics','Btnface','');
 if S<>'' then
  begin
   SkinIni.WriteString('Background','Transparent','0');
   SkinIni.WriteString('Background','Element1','E1,SOLID_FILL');
   SkinIni.WriteString('Background','E1.FillColor',ConvertColor(S));
  end;
 //
 SkinIni.WriteString('StdIcon16','Element1','E1,IMAGE');
 SkinIni.WriteString('StdIcon16','E1.Path','_general.zip\stdicon16.png');
 SkinIni.WriteString('StdIcon32','Element1','E1,IMAGE');
 SkinIni.WriteString('StdIcon32','E1.Path','_general.zip\stdicon32.png');
 SkinIni.WriteString('StdIcon48','Element1','E1,IMAGE');
 SkinIni.WriteString('StdIcon48','E1.Path','_general.zip\stdicon48.png');
 SkinIni.WriteString('_Selective_StdIcon','Style1','W<=16,StdIcon16');
 SkinIni.WriteString('_Selective_StdIcon','Style2','W<=32,StdIcon32');
 SkinIni.WriteString('_Selective_StdIcon','Default','StdIcon48');
end;

procedure TForm1.ProcessLabel(const MyName:String;SkinIni,TmpIni:TIniFile);
var S1,S2:String;
begin
 S1:=TmpIni.ReadString('SysMetrics','GrayText','');
 S2:=TmpIni.ReadString('SysMetrics','HighlightText','');
 SkinIni.WriteString('_Label','R_FontColor',ConvertColor(S1));
 SkinIni.WriteString('_Label','R_HasTextShadow','1');
 SkinIni.WriteString('_Label','R_ShadowColor',ConvertColor(S2));
end;

procedure TForm1.ProcessButton(const MyName:String;SkinIni,TmpIni:TIniFile);
var    FName:String;
      Bitmap:TBitmap;
          B2:TBitmap;
          S1:String;
      Layout:String;
       Count:Integer;
      Sizing:String;
          R1:TRect;
    IsTransp:Boolean;
 TranspColor:TColor;
begin
 FName:=IniClassProp(TmpIni,'button.pushbutton','ImageFile','');
 if FName<>'' then
  begin
   Bitmap:=LoadBitmap(FName);
   if Bitmap=nil then
    begin
     Memo1.Lines.Add('BUTTON image not found!');
     exit;
    end;
   Layout:=IniClassProp(TmpIni,'button.pushbutton','ImageLayout','');
   Sizing:=LowerCase(IniClassProp(TmpIni,'button.pushbutton','SizingType',''));
   Count:=StrToIntDef(IniClassProp(TmpIni,'button.pushbutton','imageCount',''),0);
   IsTransp:=SameText(IniClassProp(TmpIni,'button.pushbutton','Transparent',''),'true');
   TranspColor:=GetTColor(IniClassProp(TmpIni,'button.pushbutton','TransparentColor','255 0 255'));
   R1:=ConvertRect(IniClassProp(TmpIni,'button.pushbutton','SizingMargins',''));
   if SameText(Layout,'vertical') and (Bitmap.Height div Count<=R1.Top+R1.Bottom) then
    R1.Bottom:=Bitmap.Height div Count-R1.Top-1;
   if Count>=1 then
    begin
     //Normal Unfocused
     B2:=GetSubBitmap(Bitmap,Layout,Count,0);
     SaveBoxTileImages(B2,R1.Left,R1.Right,R1.Top,R1.Bottom,DirPath+MyName+'\'+_button+'\nu_*.png',IsTransp,TranspColor);
     if BitmapIsOpaque(B2) then
      SkinIni.WriteString('Button_NU','Transparent','0') else
     if CheckBox6.Checked then
       SkinIni.WriteString('Button_NU','MouseCapture','ByTransparency');
     B2.Free;
     SkinIni.WriteString('Button_NU','Element1','E1,BOX_TILE');
     SaveRedirectedBoxTile('Button_NU','1',_button+'\nu_*.png',MyName,SkinIni);
     if Sizing='stretch' then
      SkinIni.WriteString('Button_NU','E1.ResizeMode','Stretch');
     SkinIni.WriteString('_Button','NU_Style','Button_NU');
    end;
   if Count>=2 then
    begin
     //Highlighted Unfocused
     B2:=GetSubBitmap(Bitmap,Layout,Count,1);
     SaveBoxTileImages(B2,R1.Left,R1.Right,R1.Top,R1.Bottom,DirPath+MyName+'\'+_button+'\hu_*.png',IsTransp,TranspColor);
     if BitmapIsOpaque(B2) then
      SkinIni.WriteString('Button_HU','Transparent','0') else
     if CheckBox6.Checked then
       SkinIni.WriteString('Button_HU','MouseCapture','ByTransparency');
     B2.Free;
     SkinIni.WriteString('Button_HU','Element1','E1,BOX_TILE');
     SaveRedirectedBoxTile('Button_HU','1',_button+'\hu_*.png',MyName,SkinIni);
     if Sizing='stretch' then
      SkinIni.WriteString('Button_HU','E1.ResizeMode','Stretch');
     SkinIni.WriteString('_Button','HU_Style','Button_HU');
    end;
   if Count>=3 then
    begin
     //Down Focused
     B2:=GetSubBitmap(Bitmap,Layout,Count,2);
     SaveBoxTileImages(B2,R1.Left,R1.Right,R1.Top,R1.Bottom,DirPath+MyName+'\'+_button+'\df_*.png',IsTransp,TranspColor);
     if BitmapIsOpaque(B2) then
      SkinIni.WriteString('Button_DF','Transparent','0') else
     if CheckBox6.Checked then
       SkinIni.WriteString('Button_DF','MouseCapture','ByTransparency');
     B2.Free;
     SkinIni.WriteString('Button_DF','Element1','E1,BOX_TILE');
     SaveRedirectedBoxTile('Button_DF','1',_button+'\df_*.png',MyName,SkinIni);
     if Sizing='stretch' then
      SkinIni.WriteString('Button_DF','E1.ResizeMode','Stretch');
     SkinIni.WriteString('_Button','DF_Style','Button_DF');
    end;
   if Count>=4 then
    begin
     //Read-only Unfocused
     B2:=GetSubBitmap(Bitmap,Layout,Count,3);
     SaveBoxTileImages(B2,R1.Left,R1.Right,R1.Top,R1.Bottom,DirPath+MyName+'\'+_button+'\ru_*.png',IsTransp,TranspColor);
     if BitmapIsOpaque(B2) then
      SkinIni.WriteString('Button_RU','Transparent','0') else
     if CheckBox6.Checked then
       SkinIni.WriteString('Button_RU','MouseCapture','ByTransparency');
     B2.Free;
     SkinIni.WriteString('Button_RU','Element1','E1,BOX_TILE');
     SaveRedirectedBoxTile('Button_RU','1',_button+'\ru_*.png',MyName,SkinIni);
     if Sizing='stretch' then
      SkinIni.WriteString('Button_RU','E1.ResizeMode','Stretch');
     SkinIni.WriteString('_Button','RU_Style','Button_RU');
    end;
   if Count>=5 then
    begin
     //Normal Focused
     B2:=GetSubBitmap(Bitmap,Layout,Count,4);
     SaveBoxTileImages(B2,R1.Left,R1.Right,R1.Top,R1.Bottom,DirPath+MyName+'\'+_button+'\nf_*.png',IsTransp,TranspColor);
     if BitmapIsOpaque(B2) then
      SkinIni.WriteString('Button_NF','Transparent','0') else
     if CheckBox6.Checked then
       SkinIni.WriteString('Button_NF','MouseCapture','ByTransparency');
     B2.Free;
     SkinIni.WriteString('Button_NF','Element1','E1,BOX_TILE');
     SaveRedirectedBoxTile('Button_NF','1',_button+'\nf_*.png',MyName,SkinIni);
     if Sizing='stretch' then
      SkinIni.WriteString('Button_NF','E1.ResizeMode','Stretch');
     SkinIni.WriteString('_Button','NF_Style','Button_NF');
    end;
   Bitmap.Free;
   //
   R1:=ConvertRect(IniClassProp(TmpIni,'button.pushbutton','ContentMargins',''));
   SkinIni.WriteString('_Button','NU_CaptionLeftOffset',inttostr(R1.Left));
   SkinIni.WriteString('_Button','NU_CaptionRightOffset',inttostr(R1.Right));
   SkinIni.WriteString('_Button','NU_CaptionTopOffset',inttostr(R1.Top));
   SkinIni.WriteString('_Button','NU_CaptionBottomOffset',inttostr(R1.Bottom));
   Inc(R1.Left);  Inc(R1.Top);
   Dec(R1.Right); Dec(R1.Bottom);
   SkinIni.WriteString('_Button','DF_CaptionLeftOffset',inttostr(R1.Left));
   SkinIni.WriteString('_Button','DF_CaptionRightOffset',inttostr(R1.Right));
   SkinIni.WriteString('_Button','DF_CaptionTopOffset',inttostr(R1.Top));
   SkinIni.WriteString('_Button','DF_CaptionBottomOffset',inttostr(R1.Bottom));
   //
   S1:=IniClassProp(TmpIni,'button.pushbutton','TextColor','');
   if S1<>'' then
    SkinIni.WriteString('_Button','NU_FontColor',ConvertColor(S1));
   //
   S1:=IniClassProp(TmpIni,'button.pushbutton(disabled)','TextColor','');
   if S1<>'' then
    SkinIni.WriteString('_Button','RU_FontColor',ConvertColor(S1));
   //
   S1:=IniClassProp(TmpIni,'button.pushbutton(hot)','TextColor','');
   if S1<>'' then
    SkinIni.WriteString('_Button','HU_FontColor',ConvertColor(S1));
   //
   S1:=IniClassProp(TmpIni,'button.pushbutton(defaulted)','TextColor','');
   if S1<>'' then
    SkinIni.WriteString('_Button','NF_FontColor',ConvertColor(S1));
   //
   SkinIni.WriteString('_Button','RU_DefGlyphFilter','Monochrome');
   SkinIni.WriteString('_Button','RU_DefGlyphFilterColor1','#60000000');
   SkinIni.WriteString('_Button','RU_DefGlyphFilterColor2','#60FFFFFF');
   SkinIni.WriteString('_Button','DropDownGlyphOffset','6');
  end else
   Memo1.Lines.Add('Can not process Button::ImageFile=unknown');
 //
 FName:=IniClassProp(TmpIni,'Toolbar.SplitButtonDropdown','GlyphImageFile','');
 Count:=StrToIntDef(IniClassProp(TmpIni,'Toolbar.SplitButtonDropdown','imageCount',''),0);
 IsTransp:=SameText(IniClassProp(TmpIni,'Toolbar.SplitButtonDropdown','Transparent',''),'true');
 TranspColor:=GetTColor(IniClassProp(TmpIni,'Toolbar.SplitButtonDropdown','TransparentColor','255 0 255'));
 Layout:=IniClassProp(TmpIni,'Toolbar.SplitButtonDropdown','imagelayout','');
 Bitmap:=LoadBitmap(FName);
 if Bitmap=nil then
  begin
   Memo1.Lines.Add('DROPDOWN image not found!');
   exit;
  end;
 if Count>=1 then
  begin
   //Normal
   B2:=GetSubBitmap(Bitmap,Layout,Count,0);
   SaveBitmap(B2,DirPath+MyName+'\'+_other+'\'+_dropdown+'_n.png',IsTransp,TranspColor);

⌨️ 快捷键说明

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