有一个Image1,自动让它从0,0移动到100,100
我循环让它Image1.top+1,但移动时闪烁并且图片周边变虚
请问,怎么解决这个问题,万分感谢
我循环让它Image1.top+1,但移动时闪烁并且图片周边变虚
请问,怎么解决这个问题,万分感谢
解决方案 »
- 关于cxGrid1TableView1
- 【求助】哪位兄弟有没有开发过能服务ISAPI的web服务器?该如何实现(给个思路或用什么控件~~??)
- 我想在程序里面显示一些Windows自带的系统功能,比如ODBC选择数据源的功能,请问如何实现?
- 怎么办?过来人给点意见!来者有分!
- 急急急,我建立了一个xml文件,如何把该文件的内容转成utf-8编码
- 大家都用什么输入法输入汉字,
- 关于一个窗体从屏幕中间由小至大的显示..............
- 一个简单的问题,求教
- 如何在 form.onshow 之后自动自行一段代码?
- IntrBase datatype err?
- 急--急--急 问 delphi 中的 database 控件与 interbase 进行远程连接的问题
- delphi中关于类的指针的问题
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
Bit: TBitMap;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Self.Timer1.Enabled := False;
Self.Timer1.Interval := 100;
Self.Image1.AutoSize := True;
Self.Image1.Visible := False;
Self.Bit := TBitMap.Create;
Bit.Width := Self.Width;
Bit.Height := Self.Height;
Bit.Canvas.Brush.Style := bsSolid;
Bit.Canvas.Brush.Color := Self.Color;
//清除原有的图片
Bit.Canvas.FillRect(Rect(0, 0, Bit.Width, Bit.Height));
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Self.Timer1.Enabled := Not Self.Timer1.Enabled;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Self.Timer1.Tag > Self.Height then
Self.Timer1.Tag := 0
else
Self.Timer1.Tag := Self.Timer1.Tag + 1; //清除原有的图片
Bit.Canvas.FillRect(Rect(0, 0, Bit.Width, Bit.Height));
BitBlt(Bit.Canvas.Handle, 0, Self.Timer1.Tag, Self.Image1.Width, Self.Image1.Height,
Self.Image1.Canvas.Handle, 0, 0, SRCCOPY);
//复制新的图片到新的位置
BitBlt(Self.Canvas.Handle, 0, 0, Self.Bit.Width, Self.Bit.Height,
Bit.Canvas.Handle, 0, 0, SRCCOPY);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Self.Bit.Free;
end;procedure TForm1.FormPaint(Sender: TObject);
begin
BitBlt(Self.Canvas.Handle, 0, 0, Self.Bit.Width, Self.Bit.Height,
Bit.Canvas.Handle, 0, 0, SRCCOPY);
end;end.
自己手动绘制,
DOUBLE BUFFER效果不会好多少.跟系统的刷新结合后,工作的不是很好
【VB声明】
Private Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long【说明】
将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容 【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError 【备注】
在NT环境下,如在一次世界传输中要求在源设备场景中进行剪切或旋转处理,这个函数的执行会失败
如目标和源DC的映射关系要求矩形中像素的大小必须在传输过程中改变,那么这个函数会根据需要自动伸缩、旋转、折叠、或切断,以便完成最终的传输过程【参数表】
hDestDC -------- Long,目标设备场景 x,y ------------ Long,对目标DC中目标矩形左上角位置进行描述的那个点。用目标DC的逻辑坐标表示 nWidth,nHeight - Long,欲传输图象的宽度和高度 hSrcDC --------- Long,源设备场景。如光栅运算未指定源,则应设为0 xSrc,ySrc ------ Long,对源DC中源矩形左上角位置进行描述的那个点。用源DC的逻辑坐标表示 dwRop ---------- Long,传输过程要执行的光栅运算
不然的话调用DDRAW应该可以达到最佳效果.
TGraphiControl & TWinControl