为了在鼠标移上与移落时,Timage中的图片响应不同的图片,想在Timage里再封装多一个Picture?如何做呢?或者有其它的方法也可以的

解决方案 »

  1.   

    看看delphi 的 vcl源碼  TImage = class(TGraphicControl)
      private
        FPicture: TPicture;就會發覺不難
      

  2.   

    aiirii(ari-爱的眼睛) 
    我试过了,不行,运行的时候出错。
    是不是TImage里不能放两个相同Picture属性的值?
      

  3.   

    type
      MyImage = class(TImage)
      private
        FPicture1: TPicture;
        procedure SetPicture(const Value: TPicture);
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        property Picture1: TPicture read FPicture1 write SetPicture;
      end;{ MyImage }constructor MyImage.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FPicture1 := TPicture.Create;end;destructor MyImage.Destroy;
    begin
      FPicture1.Free;
      inherited Destroy;
    end;procedure MyImage.SetPicture(const Value: TPicture);
    begin
      FPicture1.Assign(Value);
    end;
      

  4.   

    TO:
    xzhifei(星级饭桶·飞) 
    是可以加上去,不过我对FPicture1加图片时就出错下面的错误了:
    Access violation at address 40005669 in module 'rtl60.bpl'. read fo address 00000000
      

  5.   

    没有发现错误啊,你再试试下面:
    unit MyImages;interfaceuses
      SysUtils, Classes, Controls, ExtCtrls,Graphics;type
      TMyImage = class(TImage)
      private
        { Private declarations }
        FPicture1: TPicture;
        procedure SetPicture(const Value: TPicture);
      protected
        { Protected declarations }
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        { Published declarations }
        property Picture1: TPicture read FPicture1 write SetPicture;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Standard', [TMyImage]);
    end;{ TMyImage }constructor TMyImage.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FPicture1 := TPicture.Create;end;destructor TMyImage.Destroy;
    begin
      FPicture1.Free;
      inherited Destroy;
    end;procedure TMyImage.SetPicture(const Value: TPicture);
    begin
      FPicture1.Assign(Value);end;end.
      

  6.   

    我把你要的功能都写出来了,你试试吧:
    unit MyImages;interfaceuses
      SysUtils, Classes, Controls, Messages, ExtCtrls, Graphics;type
      TMyImage = class(TImage)
      private
        { Private declarations }
        FPicture1: TPicture;
        TempPicture: TPicture; //保存原有的图像资源
        procedure SetPicture(const Value: TPicture);
        procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
      protected
        { Protected declarations }
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        { Published declarations }
        property Picture1: TPicture read FPicture1 write SetPicture;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Standard', [TMyImage]);
    end;{ TMyImage }procedure TMyImage.CMMouseEnter(var Message: TMessage);
    begin
      if Not (csDesigning in ComponentState) then
      begin
        TempPicture.Assign(Picture);
        Picture.Assign(Picture1);
      end;
    end;procedure TMyImage.CMMouseLeave(var Message: TMessage);
    begin
      if Not (csDesigning in ComponentState) then
        Picture.Assign(TempPicture);
    end;constructor TMyImage.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FPicture1 := TPicture.Create;
      TempPicture := TPicture.Create;end;destructor TMyImage.Destroy;
    begin
      FPicture1.Free;
      TempPicture.Free;
      inherited Destroy;
    end;procedure TMyImage.SetPicture(const Value: TPicture);
    begin
      FPicture1.Assign(Value);end;end.
      

  7.   

    TO:xzhifei(星级饭桶·飞):
    可以了。多谢!