有没有delphi7的控件,实现能存储两幅图标图片,当鼠标移过图片区域,图标由图标1换成图标2,并且无煽动切换。谢谢各位高手!

解决方案 »

  1.   

    用双缓冲就行吧,不用什么特别的控件,如果希望显示的图片格式比较多,可以用GraphicEx
      

  2.   

    unit IconEx;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TIconEx = class(TLabel)
      private
        FPicture1: TPicture;
        FPicture2: TPicture;
        procedure SetPicture1(Value: TPicture);
        procedure SetPicture2(Value: TPicture);
        procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        property Picture1: TPicture read FPicture1 write FPicture1;
        property Picture2: TPicture read FPicture2 write FPicture2;
      end;
    { TIconEx }procedure TIconEx.CMMouseEnter(var Message: TMessage);
    begin
      if csDesigning in ComponentState then Exit;
      if not Assigned(FPicture1) then Exit;
      self.Canvas.CopyRect(self.ClientRect, FPicture1.Bitmap.Canvas, FPicture1.Bitmap.Canvas.ClipRect);
    end;procedure TIconEx.CMMouseLeave(var Message: TMessage);
    begin
      if csDesigning in ComponentState then Exit;
      if not Assigned(FPicture2) then Exit;
      self.Canvas.CopyRect(self.ClientRect, FPicture2.Bitmap.Canvas, FPicture2.Bitmap.Canvas.ClipRect);
    end;constructor TIconEx.Create(AOwner: TComponent);
    begin
      inherited;
      FPicture1 := TPicture.Create;
      FPicture2 := TPicture.Create;
      Caption := '';
      AutoSize := False;
      icon.Width := 100;
      icon.Height := 100;
      if(AOwner is TWinControl) then
        Parent := TWinControl(AOwner);
      Color := clWhite;
    end;destructor TIconEx.Destroy;
    begin
      FPicture1.Free;
      FPicture2.Free;
      inherited;
    end;procedure TIconEx.SetPicture1(Value: TPicture);
    begin
        FPicture1.Assign(Value);
    end;procedure TIconEx.SetPicture2(Value: TPicture);
    begin
        FPicture2.Assign(Value);
    end;end.测试:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      icon: TIconEx;
    begin
      icon := TIconEx.Create(self);
      icon.Left := 10;
      icon.Top := 10;
      icon.Picture1.LoadFromFile('c:\\1.bmp');
      icon.Picture2.LoadFromFile('c:\\2.bmp');
    end;当把它加到控件面板上时出错,没细调是为什么,动态创建没问题。