📄 converterunit.pas
字号:
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 + -