要做一个图片控件 能实现图片切换的  但没这方面的代码做参考   求一个类似的自定义控件(要求是图片类的控件)代码  

解决方案 »

  1.   

    在Image1Click里调不同图片不可以吗
      

  2.   

    我以前做报警系统的时候
    也遇到过这样的问题 
    红灯,绿灯,黄灯
    我就用了3个TImage ,里面分别放了红,绿,黄的三张图片
    然后根据条件设置他们的Visible的值
    这样实现也挺方便的
      

  3.   

    不知道你的意图。我写了个图片控件,从TImage继承的,支持添加多文件自动播放。 
    设置几个属性就行:
    Interval 播放间隔,单位秒;
    AutoPlay 是否自动播放
    Files 要播放的文件列表
    控件代码:unit HotImage;interface
      uses Windows , Classes, ImgList , SysUtils, Graphics, Controls, Forms,
      jpeg,ExtCtrls;type
      TOnGetImageIndex = procedure(Sender: TObject; const CurrIndex: Integer; var NewIndex: integer) of object;
      THotImage = class(TImage)
        private
          FInRefresh: boolean;
          FIndex: integer;  //当前播放的图片Index
          FLastErr: string;
          FImgFiles: TStrings; 
          FOnGetImageIndex : TOnGetImageIndex;
          FTimer: TTimer;
          procedure setAutoPlay(const value: Boolean);
          procedure setInterval(const value: integer);
          function getInterval: integer;
          procedure setImageIndex(const Index: integer);
          function getAutoPlay : Boolean;
          procedure setImgFiles(const Value: TStrings);
        protected
        public                
          procedure OnChangeImage(Sender: TObject);
          procedure RefreshImage;
          constructor Create(AOwner: TComponent); override;
          destructor Destroy; override;
          function GetLastErr: string;
          //向图片文件列表中加入文件  ;参数DisplayThis指定加入后是否立即显示这张
          function AddFile(const FileName: string; const DisplayThis: Boolean = false):boolean;
          //function InsertFile(const FileName: string; const Index: integer): boolean;
          procedure DeleteFile(const Index: Integer);
          procedure display(const Index: Integer);
        published
          //是否自动播放
          property AutoPlay: boolean read getAutoPlay write setAutoPlay default false;
          //自动播放时切换间隔秒数
          property Interval: integer read getInterval write setInterval default 3;
          //图片文件路径列表。支持设计时加入
          property Files: TStrings read FImgFiles write setImgFiles;
          //当前显示的图片索引
          property index: integer read FIndex write setImageIndex default -1;
          //自动播放时默认按顺序循环。 实现该事件可以指定播放的图片索引。
          property OnGetImageIndex: TOnGetImageIndex read FOnGetImageIndex write FOnGetImageIndex; //默认时从第一张至最后一张循环切换。但用户可在此事件中指定要切换到那张
      end;  procedure Register;
    implementationprocedure Register;
    begin
      RegisterComponents('Hotzhu', [THotImage]);
    end;{ THotImage }function isImageFile(const fileName: string): boolean;
    begin
      result := True //要判断的话,自己实现
    end;function THotImage.AddFile(const FileName: string; const DisplayThis: Boolean = false): boolean;
    var IndexOfAdded: Integer;
    begin
      Result := false;
      if not FileExists(FileName) then
      begin
        FLastErr := '文件不存在';
        exit;
      end;
      if not isImageFile(FileName) then
      begin
        FLastErr := '文件不是图片';
        exit;
      end;
      IndexOfAdded := FImgFiles.Add(FileName);
      if DisplayThis and (IndexOfAdded >= 0) then
        index := IndexOfAdded;
    end;constructor THotImage.Create(AOwner: TComponent);
    begin
      inherited;
      FImgFiles := TStringList.Create;
      FIndex:= -1;
      FLastErr:= '';
      FTimer:= TTimer.Create(nil);
      FTimer.Enabled := false;
      FTimer.Interval := 3000;
      FTimer.OnTimer := OnChangeImage;
      FInRefresh := false;   //是否为刷新显示。为false时自动播放将取下一张。为true时Index不变
    end;procedure THotImage.DeleteFile(const Index: Integer);
    begin
      try
        FImgFiles.Delete(index);
        if FIndex >= index then
          self.Index := Index - 1;
      except
        on E: Exception do
          FLastErr := e.message;
      end;
    end;destructor THotImage.Destroy;
    begin
      FTimer.Free;
      FImgFiles.Free;
      inherited;
    end;procedure THotImage.display(const Index: Integer);
    begin
      if Index = -1 then
        Picture.Assign(nil)
      else if (FImgFiles.Count > 0) and (Index < FImgFiles.Count) then
      begin
        FIndex := Index;
        FInRefresh := true;
        RefreshImage;
      end;
    end;
    procedure THotImage.RefreshImage;
    begin
      if FTimer.Enabled then
      begin
          FTimer.Enabled := False;
          FTimer.Enabled := true;
      end
      else begin
        if Findex < 0 then
          Picture.Assign(nil)
        else
          Picture.LoadFromFile(FImgFiles[Findex]);
      end;
    end;function THotImage.GetLastErr: string;
    begin
      result := FLastErr;
    end;procedure THotImage.setAutoPlay(const value: Boolean);
    begin
      FTimer.Enabled :=  value;
    end;
    function THotImage.getAutoPlay : Boolean;
    begin
      result := FTimer.Enabled  ;
    end;function THotImage.getInterval: integer;
    begin
      result := FTimer.Interval div 1000;
    end;procedure THotImage.setImageIndex(const Index: integer);
    begin
      if Index < FImgFiles.Count then
      begin
        FIndex := Index;
        RefreshImage;
      end;
    end;procedure THotImage.setImgFiles(const Value: TStrings);
    begin
      FInRefresh := true;
      FIndex := -1;
      try
        FImgFiles.Assign(Value);
      finally 
        FInRefresh := false;
      end;
    end;procedure THotImage.setInterval(const value: integer);
    begin
      FTimer.Interval := value * 1000;
    end;procedure THotImage.OnChangeImage(Sender: TObject);
    var NewIndex: integer;
    begin
      FTimer.Enabled :=False;
      try
        if not FInRefresh then
        begin
          if Assigned(FOnGetImageIndex) then
          begin
            if FImgFiles.Count > 0 then
              NewIndex := (FIndex + 1) mod FImgFiles.Count;
            FOnGetImageIndex(Self, FIndex, NewIndex);
            if (NewIndex < FImgFiles.Count) then
              FIndex := NewIndex;
          end
          else if FImgFiles.Count > 0 then
            FIndex := (FIndex + 1) mod FImgFiles.Count
          else
            FIndex := -1;
        end
        else
          FInRefresh := False;
          
        if FIndex = -1 then
          Picture.Assign(nil)
        else
          Picture.LoadFromFile(FImgFiles[Findex]);
      finally
          FTimer.Enabled :=true;
      end;
    end;end.
      

  4.   

    我不知道我说的是不是楼主想要的要是我我会这样,arayImage:array of TImage;加载好所有你想要的,
    再当你要显示哪个就用哪个呀