俺写了个可以给你的应用程序(基于VCL的)加上漂亮皮肤的Dll,不需要任何其它控件或包,接口也很简单,不过vcl/vclx/rtl三个包要带包编译才成。
哪位需要?
接口如下:
//激活Skin
procedure EnableSkin();stdcall;
//取消Skin
procedure DisableSkin();stdcall;
//设置皮肤的索引(目前支持0--4)
procedure SetSkinIndex(AIndex: Integer);stdcall;
//设置皮肤文件的路径(VCLSkin的皮肤文件)
procedure SetSkinFileName(AFilename: String);stdcall;
//初始化皮肤模块
function InitializeSkin(): boolean;stdcall;
//Un初始化皮肤模块
function FinalizeSkin(): boolean;stdcall;
下面是C++Builder调用的例子:
typedef void __stdcall(*TEnableSkin)();
typedef void __stdcall(*TDisableSkin)();
typedef void __stdcall(*TSetSkinIndex)(int AIndex);
typedef void __stdcall(*TSetSkinFileName)(AnsiString AFileName);
typedef bool __stdcall(*TInitializeSkin)();
typedef bool __stdcall(*TFinalizeSkin)();
void* SkinDllHandle = NULL;
TEnableSkin EnableSkin;
TDisableSkin DisableSkin;
TSetSkinIndex SetSkinIndex;
TSetSkinFileName SetSkinFileName;
TInitializeSkin InitializeSkin;
TFinalizeSkin FinalizeSkin;
程序启动时:
SkinDllHandle = LoadLibrary("D:\\Skin.dll");
if(SkinDllHandle != NULL)
{
EnableSkin = (TEnableSkin)GetProcAddress(SkinDllHandle, "EnableSkin");
DisableSkin = (TDisableSkin)GetProcAddress(SkinDllHandle, "DisableSkin");
SetSkinIndex = (TSetSkinIndex)GetProcAddress(SkinDllHandle, "SetSkinIndex");
SetSkinFileName = (TSetSkinFileName)GetProcAddress(SkinDllHandle, "SetSkinFileName");
InitializeSkin = (TInitializeSkin)GetProcAddress(SkinDllHandle, "InitializeSkin");
FinalizeSkin = (TFinalizeSkin)GetProcAddress(SkinDllHandle, "FinalizeSkin");
InitializeSkin();
SetSkinIndex(3);
EnableSkin();
}
程序退出时:
if(SkinDllHandle != NULL)
{
FinalizeSkin();
FreeLibrary(FinalizeSkin);
}
http://wangzw.wordpress.com/
个性化台历、日历制作
http://shop33697570.taobao.com/
