📄 bsskindata.pas
字号:
property cHighLight: TColor read FcHighLight write FcHighLight;
property cHighLightText: TColor read FcHighLightText write FcHighLightText;
property cWindow: TColor read FcWindow write FcWindow;
property cWindowText: TColor read FcWindowText write FcWindowText;
end;
TbsSkinData = class(TComponent)
protected
FSkinnableForm: Boolean;
FEnableSkinEffects: Boolean;
FCompressedStoredSkin: TbsCompressedStoredSkin;
FResourceStrData: TbsResourceStrData;
FSkinColors: TbsSkinColors;
procedure SetSkinnableForm(Value: Boolean);
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure SetCompressedStoredSkin(Value: TbsCompressedStoredSkin);
procedure SetResourceStrData(Value: TbsResourceStrData);
procedure WriteFormInfo(F: TCustomIniFile);
procedure ReadFormInfo(F: TCustomIniFile);
procedure WriteObjects(F: TCustomIniFile);
procedure ReadObjects(F: TCustomIniFile);
procedure WriteCtrls(F: TCustomIniFile);
procedure ReadCtrls(F: TCustomIniFile);
procedure WriteActivePictures(F: TCustomIniFile);
procedure ReadActivePictures(F: TCustomIniFile; Path: String);
procedure GetObjectTypeName(S: String; var AName, AType: String);
procedure SaveToCustomIniFile(F: TCustomIniFile);
//
public
//
ButtonsRect, CaptionRect: TRect;
ButtonsOffset: Integer;
CapButtonsInLeft: Boolean;
//
AutoRenderingInActiveImage: Boolean;
InActiveEffect: TbsInActiveEffect;
PopupWindow: TbsDataSkinPopupWindow;
HintWindow: TbsDataSkinHintWindow;
Empty: Boolean;
FPicture, FInActivePicture, FMask: TBitMap;
FActivePictures: TList;
FPictureName, FInActivePictureName, FMaskName: String;
FActivePicturesNames: TStrings;
ObjectList: TList;
CtrlList: TList;
LTPoint, RTPoint, LBPoint, RBPoint: TPoint;
BGPictureIndex: Integer;
MDIBGPictureIndex: Integer;
MainMenuPopupUp: Boolean;
MaskRectArea: TRect;
HitTestLTPoint,
HitTestRTPoint,
HitTestLBPoint,
HitTestRBPoint: TPoint;
ClRect: TRect;
BorderW: Integer;
FormMinWidth: Integer;
MDITabsTransparent: Boolean;
MainMenuBarTransparent: Boolean;
TopStretch, LeftStretch,
RightStretch, BottomStretch: Boolean;
StretchEffect: Boolean;
StretchType: TbsStretchType;
MDIBGStretchEffect: Boolean;
MDIBGStretchType: TbsStretchType;
SkinName: String;
SkinAuthor: String;
AuthorURL: String;
AuthorEmail: String;
SkinComments: String;
ChangeSkinDataProcess: Boolean;
procedure AddBitMap(FileName: String);
procedure DeleteBitMap(Index: Integer);
procedure SendSkinDataMessage(M: LongInt);
function GetIndex(AIDName: String): Integer;
function GetControlIndex(AIDName: String): Integer;
procedure ClearObjects;
procedure ClearAll;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure LoadFromFile(FileName: String);
procedure SaveToFile(FileName: String);
procedure LoadFromCompressedFile(FileName: String);
procedure SaveToCompressedFile(FileName: String);
procedure StoreToDisk(AFileName: String);
procedure LoadCompressedStoredSkin(AStoredSkin: TbsCompressedStoredSkin);
procedure ClearSkin;
property SkinColors: TbsSkinColors read FSkinColors;
published
property SkinnableForm: Boolean read FSkinnableForm write SetSkinnableForm;
property EnableSkinEffects: Boolean read
FEnableSkinEffects write FEnableSkinEffects;
property CompressedStoredSkin: TbsCompressedStoredSkin
read FCompressedStoredSkin write SetCompressedStoredSkin;
property ResourceStrData: TbsResourceStrData
read FResourceStrData write SetResourceStrData;
end;
function ReadInActiveEffect(IniFile: TCustomIniFile;
Section: String; Ident: String): TbsInActiveEffect;
procedure WriteInActiveEffect(IniFile: TCustomIniFile;
Section: String; Ident: String;
IE: TbsInActiveEffect);
procedure WriteMorphKind(IniFile: TCustomIniFile;
Section: String; Ident: String; MK: TbsMorphKind);
function ReadMorphKind(IniFile: TCustomIniFile;
Section: String; Ident: String): TbsMorphKind;
procedure WriteStretchType(IniFile: TCustomIniFile;
Section: String; Ident: String; ST: TbsStretchType);
function ReadStretchType(IniFile: TCustomIniFile;
Section: String; Ident: String): TbsStretchType;
// Internal messages
const
WM_BEFORECHANGESKINDATA = WM_USER + 201;
WM_CHANGESKINDATA = WM_USER + 202;
WM_AFTERCHANGESKINDATA = WM_USER + 203;
WM_CHANGERESSTRDATA = WM_USER + 250;
WM_CHECKPARENTBG = WM_USER + 260;
WM_CHANGEFORMSKINNABLE = WM_USER + 270;
implementation
Uses bsZLibCompress;
function CheckSkinFile(F: TCustomIniFile): Boolean;
begin
Result := F.SectionExists('VERSION') and F.SectionExists('PICTURES') and
F.SectionExists('FORMINFO') and F.SectionExists('SKINOBJECTS') and
F.SectionExists('SKINCONTROLS');
end;
procedure WriteInActiveEffect;
var
S: String;
begin
case IE of
ieBrightness: S := 'iebrightness';
ieDarkness: S := 'iedarkness';
ieGrayScale: S := 'iegrayscale';
ieNoise: S := 'ienoise';
ieSplitBlur: S := 'iesplitblur';
ieInvert: S := 'ieinvert';
end;
IniFile.WriteString(Section, Ident, S);
end;
function ReadInActiveEffect;
var
S: String;
begin
S := IniFile.ReadString(Section, Ident, 'iebrightness');
if S = 'iebrightness'
then Result := ieBrightness
else
if S = 'iedarkness'
then Result := ieDarkness
else
if S = 'iegrayscale'
then Result := ieGrayScale
else
if S = 'ienoise'
then Result := ieNoise
else
if S = 'iesplitblur'
then Result := ieSplitBlur
else
if S = 'ieinvert'
then Result := ieInvert
else
Result := ieGrayScale;
end;
function ReadMorphKind;
var
S: String;
begin
S := IniFile.ReadString(Section, Ident, 'mkdefault');
if S = 'mkdefault'
then Result := mkDefault
else
if S = 'mkgradient'
then Result := mkGradient
else
if S = 'mkleftgradient'
then Result := mkLeftGradient
else
if S = 'mkrightgradient'
then Result := mkRightGradient
else
if S = 'mkleftslide'
then Result := mkLeftSlide
else
if S = 'mkrightslide'
then Result := mkRightSlide
else
if S = 'mkpush'
then Result := mkPush
else Result := mkDefault;
end;
procedure WriteStretchType;
var
S: String;
begin
case ST of
bsstFull: S := 'stfull';
bsstVert: S := 'stvert';
bsstHorz: S := 'sthorz';
end;
IniFile.WriteString(Section, Ident, S);
end;
function ReadStretchType;
var
S: String;
begin
S := IniFile.ReadString(Section, Ident, 'stfull');
if S = 'stfull'
then
Result := bsstFull
else
if S = 'stvert'
then
Result := bsstVert
else
Result := bsstHorz;
end;
procedure WriteMorphKind;
var
S: String;
begin
case MK of
mkDefault: S := 'mkdefault';
mkGradient: S := 'mkgradient';
mkLeftGradient: S := 'mkleftgradient';
mkRightGradient: S := 'mkrightgradient';
mkLeftSlide: S := 'mkleftslide';
mkRightSlide: S := 'mkrightslide';
mkPush: S := 'mkpush';
end;
IniFile.WriteString(Section, Ident, S);
end;
constructor TbsDataSkinControl.Create;
begin
IDName := AIDName;
PictureIndex := -1;
MaskPictureIndex := -1;
SkinRect := Rect(0, 0, 0, 0);
end;
procedure TbsDataSkinControl.LoadFromFile;
begin
PictureIndex := IniFile.ReadInteger(IDName, 'pictureindex', -1);
MaskPictureIndex := IniFile.ReadInteger(IDName, 'maskpictureindex', -1);
SkinRect := ReadRect(IniFile, IDName, 'skinrect');
end;
procedure TbsDataSkinControl.SaveToFile;
begin
IniFile.EraseSection(IDName);
IniFile.WriteInteger(IDName, 'pictureindex', PictureIndex);
IniFile.WriteInteger(IDName, 'maskpictureindex', MaskPictureIndex);
WriteRect(IniFile, IDName, 'skinrect', SkinRect);
end;
constructor TbsDataSkinMainMenuBar.Create;
begin
inherited;
TrackMarkColor := 0;
TrackMarkActiveColor := 0;
StretchEffect := False;
ItemTransparent := False;
end;
procedure TbsDataSkinMainMenuBar.LoadFromFile;
begin
inherited;
ItemsRect := ReadRect(IniFile, IDName, 'itemsrect');
MenuBarItem := IniFile.ReadString(IDName, 'menubaritem', '');
CloseButton := IniFile.ReadString(IDName, 'closebutton', '');
MinButton := IniFile.ReadString(IDName, 'minbutton', '');
MaxButton := IniFile.ReadString(IDName, 'maxbutton', '');
SysMenuButton := IniFile.ReadString(IDName, 'sysmenubutton', '');
TrackMarkColor := IniFile.ReadInteger(IDName, 'trackmarkcolor', 0);
TrackMarkActiveColor := IniFile.ReadInteger(IDName, 'trackmarkactivecolor', 0);
StretchEffect := ReadBoolean(IniFile, IDName, 'stretcheffect');
ItemTransparent := ReadBoolean(IniFile, IDName, 'itemtransparent');
end;
procedure TbsDataSkinMainMenuBar.SaveToFile;
begin
inherited;
WriteRect(IniFile, IDName, 'itemsrect', ItemsRect);
IniFile.WriteString(IDName, 'menubaritem', MenuBarItem);
IniFile.WriteString(IDName, 'closebutton', CloseButton);
IniFile.WriteString(IDName, 'minbutton', MinButton);
IniFile.WriteString(IDName, 'maxbutton', MaxButton);
IniFile.WriteString(IDName, 'sysmenubutton', SysMenuButton);
IniFile.WriteInteger(IDName, 'trackmarkcolor', TrackMarkColor);
IniFile.WriteInteger(IDName, 'trackmarkactivecolor', TrackMarkActiveColor);
WriteBoolean(IniFile, IDName, 'stretcheffect', StretchEffect);
WriteBoolean(IniFile, IDName, 'itemtransparent', ItemTransparent);
end;
procedure TbsDataSkinUpDownControl.LoadFromFile(IniFile: TCustomIniFile);
begin
inherited;
UpButtonRect := ReadRect(IniFile, IDName, 'upbuttonrect');
ActiveUpButtonRect := ReadRect(IniFile, IDName, 'activeupbuttonrect');
DownUpButtonRect := ReadRect(IniFile, IDName, 'downupbuttonrect');
DownButtonRect := ReadRect(IniFile, IDName, 'downbuttonrect');
ActiveDownButtonRect := ReadRect(IniFile, IDName, 'activedownbuttonrect');
DownDownButtonRect := ReadRect(IniFile, IDName, 'downdownbuttonrect');
LTPoint := Point(0, 0);
RTPoint := Point(0, 0);
LBPoint := Point(0, 0);
RBPoint := Point(0, 0);
ClRect := NullRect;
end;
procedure TbsDataSkinUpDownControl.SaveToFile(IniFile: TCustomIniFile);
begin
LTPoint := Point(0, 0);
RTPoint := Point(0, 0);
LBPoint := Point(0, 0);
RBPoint := Point(0, 0);
ClRect := NullRect;
inherited;
WriteRect(IniFile, IDName, 'upbuttonrect', UpButtonRect);
WriteRect(IniFile, IDName, 'activeupbuttonrect', ActiveUpButtonRect);
WriteRect(IniFile, IDName, 'downupbuttonrect', DownUpButtonRect);
WriteRect(IniFile, IDName, 'downbuttonrect', DownButtonRect);
WriteRect(IniFile, IDName, 'activedownbuttonrect', ActiveDownButtonRect);
WriteRect(IniFile, IDName, 'downdownbuttonrect', DownDownButtonRect);
end;
constructor TbsDataSkinListBox.Create(AIDName: String);
begin
inherited;
FontName := 'Arial';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -