大侠们,
在程序中有一TImage控件读入了一张图片,这个图片比较大,我需要每过一定的时间就显示这个图片的一部分,这样形成一个动画效果,请问一下该怎么实现呀?分不够还可以再加的!请写出代码!
在程序中有一TImage控件读入了一张图片,这个图片比较大,我需要每过一定的时间就显示这个图片的一部分,这样形成一个动画效果,请问一下该怎么实现呀?分不够还可以再加的!请写出代码!
解决方案 »
- 求delphi2007下组件
- 应用程序导致数据库查询变慢
- 是不是DELPHI IDE没有卖呀。。自己又搞了个Turbo Delphi!!!
- DBGridEh如何得到单元格的left,Top,Width,Height值
- 请问,如何通过unit中的代码,来实现form上的对象啊??现在文件坏了,form打不开,只有代码了,怎么能恢复form上的对象呢??要多少分给
- 求一个三方界面控件!如提供,100分就是他的!
- 工程硕士数学考什么?
- CSDN真是徒有虚名阿,问了那么多问题,竟然每人知道,哎!
- 关于SkinEngine3.2.2字体的问题
- 很菜的问题-有关线程!
- 如果把DELPHI 3, 4, 5+sql 6.5的程序移植到delphi 7+sql server 2000,可以嗎???
- FastReport如何安装?
要改一个东西的
开始菜单的,borland delphi 的BDE Administrator 下面odbc下面将blod size 改大一点
xzhifei(饭桶超人(抵制日货)) 帅哥,睡醒了还是请你帮个忙吧!先谢谢了!!!
这个代码是模拟页切换(类似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.代码很简陋,就不写注解了
[email protected]