皮肤的使用(100分)

L

lkf

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手,应用程序的皮肤是怎样实现的?
如winamp等等。有什么组件可用吗?
 
skinengine www.ksdev.com
 
别讲那些高深的,一般的情况,象winamp,qq,等,你将功能封装起来。
然后将特定的界面贴上所谓的skin图片。然后再根据不同的情况调用不同的功能即可。
 
转载一篇最简单的换肤的方法:

  现在软件的界面设计很流行“换肤”(SKIN),例如ICQ、Winamp、超级解霸等等。这种技术的应用可以最大程度的彰显用户的个性,所以一经推出就大受欢迎。其实这种技术实现起来很简单,下面就是我用Delphi 4.0换肤的例子。

  首先,在窗体上放一个Image控件,一个Button控件和一个OpenDialog控件。

  然后,修改属性。将窗体的Caption属性改为Test Skin Program;将Image控件的Align属性改为alClient,将Stretch属性改为True;将Button控件的Caption属性改为Skin。其余属性不变。

  最后,输入代码吧!

  unit mainform;

  interface

  uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, Buttons, ExtCtrls,inifiles, jpeg, Menus;

  //一定要将inifiles单元加入uses

  type

  TForm1 = class(TForm)

  Image1: TImage;

  OpenDialog1: TOpenDialog;

  Button1: TButton;

  procedure FormCreate(Sender: TObject);

  procedure Button1Click(Sender: TObject);

  private

  { Private declarations }

  public

  { Public declarations }

  end;

  var

  Form1: TForm1;

  implementation

  {$R*.DFM}

  procedure TForm1.FormCreate(Sender: TObject);

  Var

  SkinINI : Tinifile;

  SkinPicture : String;

  begin

  SkinINI := TiniFile.Create('c:/my documents/skin.ini');

  SkinPicture:=SkinINI.ReadString('Interface','skin','');

  //将“皮肤”的图片信息存储在SKIN.INI文件中。当然,你还可以将更多的信息存进该文件中。

  //例如:SKIN.INI

  //[interface]

  // skin = c:/my documents/mylove.jpg

  IF SkinPicture<>'' then

  Begin

  try

  Image1.Picture.LoadFromFile(SkinPicture);

  except

  end;

  End;

  SkinINI.Free;

  end;

  procedure TForm1.Button1Click(Sender: TObject);

  Var

  SkinINI : Tinifile;

  SkinPicture : String;

  Success : Boolean; //指示换肤是否成功

  begin

  SkinINI := TiniFile.Create('c:/my documents/skin.ini');

  SkinPicture:=SkinINI.ReadString('Interface','skin','');

  OpenDialog1.Filter:='All Image File(*.jpg;*.jpeg;*.bmp;*.ico)|*.jpg;*.jpeg;*.bmp;*.ico|'+

  'Bitmaps(*.bmp)|*.bmp|'+

  'Jpeg Image File(*.jpg;*.jpeg)|*.jpeg;*.jpg|'+

  'Icons(*.ico)|*.ico';

  Success:=True;

  IF OpenDialog1.Execute then

  Begin

  try

  Image1.Picture.LoadFromFile(OpenDialog1.Filename);

  except

  Application.MessageBox('This file is not load!','Error!',MB_OK);

  Success:=False;

  end;

  IF Success then SkinINI.WriteString('interface','skin',OpenDialog1.Filename);

  //若换肤成功,将图片信息存进skin.ini文件中

  End;

  SkinINI.Free;

  end;

  end.

  怎么样,换肤简单吧(什么东西都是“难的不会,会的不难”)!你还可以在此基础上继续向窗体上添加各种控件。因为这只是一个示例,所以就没有加那些。另外,严格得说,“换肤”指令应该在菜单中(即MainMenu控件中,其实也很简单)。但为了没有“赚稿酬”之嫌,所以就用一个Button应付了。(湖南刘炼)






 
主要是运用了插件技术


+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
插件概述

插件的本质是在不修改程序主体的情况下对软件功能进行加强,当插件的接口被公开时,任何公司或个人
都可以自己制作插件来解决一些操作上的不便或增加一些功能。比如我手头正在写的最新版本ENCounter,
允许其他的软件接驳进来,驻留的程序可以只是ENCounter一个,但是当联网成功时,ENCounter除了可以
记费外,还能呼叫其他的插件模块来执行诸如检查邮件等操作,这样比驻留一个ENCounter邮件检查软件
更有效。
使用插件的软件最成功的莫过于PhotoShop了。使用过PhotoShop的人对滤镜一定不陌生。即使是初涉图形
制作的生手,只要去获取一些好的滤镜,也能够轻易地作出特殊效果。另一套著名的使用插件机制的软件
是WinAmp,WinAmp早期的成功虽然在于其快速的解码引擎,但在MP3播放器中能够保持长久的霸主地位,
也正是由于内置了健全的Skin和PlugIn(插件)。细心的朋友一定注意到了,后期的WinAmp中增加的MIDI、
MOD、WAVE等音乐格式的播放功能完全是靠插件实现的。
插件还可以支持多人合作开发,只要有一个好的插件机制,不同的功能可以由不同的人来完成,而且由于
不同插件之间互不影响,方便程序的调试和纠错。
插件类型
从广义的范围来看,插件有以下三种类型:
1.类似批命令的简单插件。事实上这种插件的自由度非常低。使用这种方法的软件有Win Hacker等,运行
这种插件后,会一步步要求用户进行选择/输入,最后根据用户的输入来执行一系列事先定义好的操作。
这种插件一般是文本文件。功能比较单一,可扩展性极小。优点是插件做起来非常方便,即使是对程序设
计了解不多的人也可以制作。如WinAmp的Skin。
2.使用一种特殊的脚本语言来实现的插件(暂时称为脚本插件)。这种插件比较难写,需要软件开发者自己
制作一个程序解释内核。比如微软惹了很多麻烦的宏就是这种类型的。有一套著名的Office辅助工具就是
完全用Office内置的VBScript写成的。这种方法的优点在于无需使用其它工具来制作插件,软件本身就可
以实现,普遍出现于各种办公自动化软件中。
3.利用已有的程序开发环境来制作插件。例如PhotoShop等软件使用的方法。使用这种方法的软件在程序
主体中建立了多个自定义的接口,使插件能够自由访问程序中的各种资源。这种插件的优势在于自由度极
大,可以无限发挥插件开发者的创意,这种插件是狭义范围的插件,也是真正意义上的插件。而这种插件
机制的编写相对复杂,对于插件接口之间的协调比较困难,插件的开发也需要专业的程序员才能进行。
插件实例
网页作坊(HTML SHOP)是我国第一个使用插件机制的共享软件。以下我们将以HTML SHOP为例子,来深入
了解插件机制的开发:
在软件中添加插件机制,首先需要进行详细的应用分析,确定应该提供哪些资源给插件开发者使用。
HTML SHOP作为一个网页编辑器,对网页的编辑是建立在“计划”的基础上的,因此,我们必须提供给插件
开发者访问当前打开计划信息的能力,能够自由地读取和写入的能力。
为了让插件提供的功能能够被用户方便调用,必须将主菜单的控制权与插件开发者共享,而网页作坊的程
序界面模仿了经典软件开发环境Delphi 3.0,因此我们同时将工具条中的标签页组的权利提供给插件开发
者。这个应用分析部分是插件机制开发的重头,是最难把握的部分,如果提供出来的权利太大,写得拙劣
的插件发生错误时可能威胁到主程序,如果提供出来的权利太小,又限制了插件开发者的想象力。
在编程方面包括了两个部分,一部分是主体程序的插件处理机制,用来进行初始化每个插件的过程,并且
管理好每个插件接口,在插件访问时能够做出正确的反馈。另一部分是插件的接口函数定义,将所有的插
件接口函数进行封装,以便开发者自由调用。在HTML SHOP中,这部分的封装文件是HBPlugin.pas,当开
发者在程序中引用了该文件时,就可以直接调用其中的TOOLHOST对象,使用封装于该对象的插件接口函数。
而最重要的部分当然是插件和主程序之间的通讯了。在网页作坊中的插件其实是一个遵循了某些特定规则
的DLL,而主程序将所有插件接口在内存中的地址传递给插件,插件则根据这些地址来呼叫插件接口完成
所需功能、获取所需资源等。
 
没有很直接
 
我看XP效果挺不错的,换肤不如换窗口造型好!如 Mediaplayer8.0
 
多人接受答案了。
 
顶部