大侠们,
    在程序中有一TImage控件读入了一张图片,这个图片比较大,我需要每过一定的时间就显示这个图片的一部分,这样形成一个动画效果,请问一下该怎么实现呀?分不够还可以再加的!请写出代码!

解决方案 »

  1.   

    用移动image的效果不是更简单?
      

  2.   

    移动image达不到预期的效果呀~~~
      

  3.   

    是不是要读数据库的图片的?
    要改一个东西的
    开始菜单的,borland delphi 的BDE Administrator 下面odbc下面将blod size 改大一点
      

  4.   

    小弟这里又遇到一个问题,在一个文本文件中存在一个或多个十六进制编码为“00 00 00 00 00 00”的编码,在Delphi中用TStrings的LoadFormFile就只能读取第一个这个十六进制编码以前的数据,这个十六进制编码和该文件以后的数据都没有读入!请问一下该怎么解决呀????请写出代码,问题点数另开贴送上!
      

  5.   

    用CopyRECT就搞定啦,先定义一个Image保存大图片,再定义 一个用来显示
      

  6.   

    TO:
      xzhifei(饭桶超人(抵制日货)) 帅哥,睡醒了还是请你帮个忙吧!先谢谢了!!!
      

  7.   

    bitblt &  sleep // ok ?
      

  8.   

    刚写了个.
    这个代码是模拟页切换(类似ddraw);可以实现无闪烁绘制图形;form为'屏幕',pdc为当前屏幕,bdc为缓冲2;初始化指定大小与窗体一样;在绘制的时候分别绘制这两个,可以看具体编写的过程;无论如何处理图形均是先绘制在pdc与bdc之上,而不是直接绘制窗体,再完成了绘制后直接draw到窗体上显示,这样不会发生闪烁现象,图象显示很平滑.你建个窗体,放个timer,放个image2(装个大图),把代码加进去运行看看.unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Image2: TImage;
        procedure FormDestroy(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        procedure DrawScreen(srcBmp: TBitmap; x, y, w, h: Integer;
          destx, desty: integer);
        procedure clearScreen(color: TColor);
        procedure Fill;
      end;var
      Form1             : TForm1;  pDc               : TBitmap;          //当前;
      bDc               : TBitmap;          //缓冲;
      bbb               : boolean;          //当前目标;  imageIndex        : integer;
    implementation{$R *.dfm}procedure TForm1.Fill;
    begin
      if bbb then
        Canvas.Draw(0, 0, pdc)
      else
        Canvas.Draw(0, 0, bdc);
      bbb := not bbb;
    end;procedure TForm1.DrawScreen(srcBmp: TBitmap; x, y, w, h: Integer;
      destx, desty: integer);
    begin
      if bbb then
        bitblt(pDc.Canvas.Handle, destx, desty, w, h, srcBmp.Canvas.Handle, x, y,
          srccopy)
      else
        bitblt(bDc.Canvas.Handle, destx, desty, w, h, srcBmp.Canvas.Handle, x, y,
          srccopy);
    end;procedure TForm1.clearScreen(color: TColor);
    begin
      if bbb then
      begin
        pDc.Canvas.Brush.Color := clBlack;
        pDc.Canvas.FillRect(pDc.Canvas.ClipRect);
      end
      else
      begin
        bDc.Canvas.Brush.Color := clBlack;
        bDc.Canvas.FillRect(bDc.Canvas.ClipRect);
      end;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if not self.Showing then
        exit;
      clearScreen(clblack);
      drawScreen(image2.Picture.Bitmap, 100, 100, 45 , 60, imageIndex, 0);
      inc(imageIndex, 1);
      if imageindex>=45 then imageindex:=0;
      fill;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      pdc := tbitmap.Create;
      bdc := tbitmap.Create;
      pdc.Width := clientwidth;
      pdc.Height := clientheight;
      pdc.PixelFormat := pf16bit;
      bdc.Width := clientwidth;
      bdc.Height := clientheight;
      bdc.PixelFormat := pf16bit;  imageIndex := 0;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      pdc.free;
      bdc.free;
    end;end.代码很简陋,就不写注解了
      

  9.   

    drawScreen(image2.Picture.Bitmap, 100, 100, 45 , 60, imageIndex, 0);调整这个的参数;分别是获取x/y位置的w/h大小的图;我给你发一个包也可以;留个email.
      

  10.   

    太谢谢S.F.(吃青春饭的) 了。我的E_Mail是:[email protected]
                                             [email protected]