做一个按钮控件,要求从TImage继承,鼠标移上去后加载焦点图片,鼠标离开后显示默认图片;,允许在设计期静态加载,也允许在运行期动态加载。

解决方案 »

  1.   

    直接利用image加mousein/out事件不行吗?
      

  2.   

    Component->New Component
    Ancestor Type: Timage
    其他的自己填,生成一个pas文件,然后加入下面的代码声明:  private
        procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    实现procedure timage1Button.CMMouseEnter(var Message: TMessage);
    begin
      self.Picture.LoadFromFile('C:\WINDOWS\Rhododendron.bmp');
    end;procedure timage1Button.CMMouseLeave(var Message: TMessage);
    begin
      self.Picture.LoadFromFile('C:\WINDOWS\Santa Fe Stucco.bmp');
    end;
    保存,然后选菜单Component->Install Component
    Unit file name里选择你刚才创建的pas文件,点OK,安装控件
      

  3.   

    有很多现成插件啊,RZIMAGEBUTTON 等等。其实你的要求很简单的
      

  4.   

    就是一个支持"多态"(非OO的多态)的图片按钮吧,
    这种东西完全没必要自己做一个,现成的好多.
    raize,sui,tms...这些组件包中都有类似的图片按钮.
      

  5.   

    如果想学习还是自己做好了,比较简单继承一下TImage 再写一下鼠标事件最重要的
    procedure Register;
    begin
      RegisterComponents('My', [TmyButton]);
    end;
    注册一下
      

  6.   

    什么叫按钮,能click不就行了
    非得长成灰不溜球那样才叫?
      

  7.   

    但是下一步实现透明怎么实现?
     //创建位图对象类
      BitmapPic :=  TBitmap.Create();
      //设置透明效果
      BitmapPic.Transparent:=True ;
      BitmapPic.TransparentColor:=$FFFFFF;
      BitmapPic.LoadFromFile('D:\picture\smiles-1.bmp');
        // 1//self.Picture.LoadFromFile()//('D:\picture\smiles-1.bmp');
       // 2//self.Picture.Bitmap:=  BitmapPic;
       //3// self.Canvas.Draw(0,0,BitmapPic);
    我用2、3都实现不了..
      

  8.   

    要做透明效果就没那么简单了,一般有两种途径:1.自己重绘按钮,把指定为透明的区域绘制成它的背景图像.
    2.剪裁区域,就是把按钮剪切成图像指定的区域(除去指定为透明的区域),要用到SetWindowRgn.区域被剪裁后,系统在绘制这个按钮时就能表现出透明效果.要做到这些,需要熟悉绘图算法才行的.
    如果楼主就是要研究这方面控件的技术的话,支持楼主去学习.
    但如果只是在某个项目里需要用到这样一个控件的话,还是建议拿现成的来用.
      

  9.   

    绘制透明位图方面可以参考下面,虽然是VC代码,但主要是调用API实现的,很好移植到Delphi.
    http://www.vckbase.com/document/viewdoc/?id=532
    http://www.vckbase.com/document/viewdoc/?id=1861
      

  10.   


    有的话发我个,[email protected]                                     
    thank you