📄 skinunt.pas
字号:
unit skinunt;
interface
uses
Windows,Sysutils,classes,menus,WinSkinData,structureunt;
type
Tskin=class
SkinData: TSkinData;
constructor Create;
destructor Destroy;override;
private
skinlist:array of pskininfo;
procedure searchskin;
function getskinnametoid(s:String):integer;
procedure skininclick(sender:tobject);
procedure show_cur_skin(skin_name:string);
public
procedure addskinlist(tmpmenu:TMenuItem);
end;
implementation
uses shareunit;
//------------------------------------------------------------------------------
// 载入skin 外观皮肤列表
//------------------------------------------------------------------------------
procedure Tskin.searchskin;
var path,s:string;
i,p:integer;
memos:tstringlist;
begin
path:=extractfilepath(application_name);
memos:=tstringlist.create;
try
findfile(path+'skins\',memos,false);
if memos.count>0 then
begin
for i:=1 to memos.count do
if lowercase(extractfileext(memos.Strings[i-1]))='.skn' then
begin
p:=high(skinlist)+1;
setlength(skinlist,p+1);
s:=extractfilename(memos.Strings[i-1]);
skinlist[p].skinname:=changefileext(s,'');
skinlist[p].skinfile:=memos.Strings[i-1];
end;
end;
finally
freeandnil(memos);
end;
end;
//------------------------------------------------------------------------------
// 返回skin所在的ID
//------------------------------------------------------------------------------
function Tskin.getskinnametoid(s:String):integer;
var i:integer;
begin
result:=0;
for i:=low(skinlist) to high(skinlist) do
if skinlist[i].skinname=s then
begin
result:=i+1;
break;
end;
end;
//------------------------------------------------------------------------------
//skin click
//------------------------------------------------------------------------------
procedure Tskin.skininclick(sender:tobject);
begin
tmenuitem(sender).checked:=true;
show_cur_skin(tmenuitem(sender).hint);
end;
//------------------------------------------------------------------------------
// 将skin 列表加入到指定 menu
//------------------------------------------------------------------------------
procedure Tskin.addskinlist(tmpmenu:TMenuItem);
var tmp:tmenuitem;
i:integer;
begin
if high(skinlist)>0 then
for i:=high(skinlist) downto low(skinlist) do
begin //添加插件菜单...
tmp:=tmenuitem.create(nil);
tmp.Hint:=skinlist[i].skinname;
tmp.caption:=skinlist[i].skinname;
tmp.RadioItem:=true;
tmp.GroupIndex:=1;
if tmp.Hint=skin_string then tmp.Checked:=true;
tmp.OnClick:=skininclick;
tmpmenu.add(tmp);
end;
end;
//------------------------------------------------------------------------------
// 显示 当前的 skin
//------------------------------------------------------------------------------
procedure Tskin.show_cur_skin(skin_name:string);
var k:integer;
begin
if skin_name='' then skin_name:='xp';
if high(skinlist)>0 then
begin
k:=getskinnametoid(skin_name);
if k>0 then
try
SkinData.skinfile:=skinlist[k-1].skinfile;
if not skindata.Active then skindata.Active:=true;
skin_string:=skin_name;
except
skindata.Active:=false;
skin_string:='';
end;
end;
end;
//------------------------------------------------------------------------------
// 创建 skin
//------------------------------------------------------------------------------
constructor Tskin.Create;
begin
searchskin;
skindata:=TSkinData.Create(nil);
SkinCaption:=TSkinCaption.Create(nil);
SkinCaption.Active:=true;
skindata.MenuUpdate:=false;
skindata.SkinControls:=[xcMainMenu,xcMenuItem,xcToolbar,xcControlbar,xcCombo,
xcCheckBox,xcRadioButton,xcProgress,xcScrollbar,xcEdit,xcButton,xcBitBtn,
xcSpin,xcpanel,xcGroupBox,xcStatusBar,xcTab,xcTrackBar,xcSystemMenu];
show_cur_skin(skin_string);
end;
//------------------------------------------------------------------------------
// 释放 skin
//------------------------------------------------------------------------------
destructor Tskin.Destroy;
begin
skinlist:=nil;
SkinCaption.free;
skindata.free;
inherited Destroy;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -