要做一个程序,下部分需要有一些字幕在滚动,我用了一个panel,上边放一个label,然后通过timer来控制label的left,可是这样做出来效果不好,闪烁的厉害,尤其当字体比较大的时候,论坛里有人说可以用staticText来代替label就不闪烁了,可是我试了一下,仍然闪烁阿?是不是我哪里设置错了?有没有比较简单的办法来实现?高手帮忙解决,必要的话我可以把代码传给你,谢谢了
调试欢乐多
var
Form1: TForm1;
x,tt,l,h:integer;
pic:trect;
map:tbitmap;
implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
x:=image1.Height +20;
tt:=x+80;
form1.Repaint ;
image1.Canvas.Brush.Color :=clgreen;
pic:=rect(0,0,image1.width,image1.height);
image1.Canvas.FillRect(pic);
map:=tbitmap.Create ;
pic:=rect(0,0,300,300);
map.LoadFromFile ('c:\windows\安装程序.bmp');
//image1.Canvas.StretchDraw(pic,map);end;procedure TForm1.Timer1Timer(Sender: TObject);begin
x:=x-1;
tt:=tt-1;
if x<-160 then begin x:=image1.Height +20;
tt:=x+80 end;
image1.Canvas.Font.Size :=18;
image1.Canvas .font.Color :=$1200ffff;
image1.Canvas .textout(10,x,'是不在世上');
image1.Canvas.Font .color:=$120000ff;
image1.canvas.Font .size:=12;
image1.canvas.textout(20,x+50,'在大多数情况下');
l:=image1.Canvas.TextWidth('在大多数情况下');
h:=image1.canvas.textheight('在大多数情况下');
image1.canvas.Pen.color:=clgreen;
image1.canvas.MoveTo(20,h+x+50-2);
image1.Canvas.LineTo(20+l,h+x+50-2);
pic.TopLeft.x :=30;
pic.topleft.y:=tt;
pic.BottomRight.x :=pic.TopLeft.x+100;
pic.bottomright.y:=pic.topleft.y +80;
image1.canvas.StretchDraw(pic,map);
image1.Canvas.Pen.Color:=clgreen;
image1.Canvas.MoveTo(0,pic.topleft.y+80);
image1.canvas.lineto(pic.topleft.x+100,pic.topleft.y +80);
否则你怎么画都会有或多或少的闪烁的。
2楼的,你这个程序我也看了,主要是能不能用panel和label或者类似的来实现,因为还有很多别的地方,如果思路换的话要改很多地方,太麻烦了,不过先谢谢你
begin
if Label1.Left<=1 then
Label1.Left:=500;
Label1.Left:=Label1.Left-1;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.DoubleBuffered:=true;
end;
你新建一个工程,然后分别拖一个Panel,Timer在窗体上,Label在Panel上,把上面代码考过去试验看看。
你新建一个工程,然后分别拖一个Panel,Timer在窗体上,Label在Panel上,把上面代码考过去试验看看。
每次移动的像素多一些,比如Label1.Left:=Label1.Left-4,然后全屏看,还是闪阿
我用的是delphi7
有全部源代码,你想自己做可以参考。
我是在Panel上放一个Image, Panel的DoubleBuffered设为True;
我不采用移动Image.left的方式。
我直接TextOut出来。 下面是我的源代码。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Timer1: TTimer;
Panel1: TPanel;
Image1: TImage;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
iLeft:Integer;implementation{$R *.dfm}{ TForm1 }procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image1.Canvas.TextOut(iLeft,0,'我们是中国人');
Dec(iLeft);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
iLeft:=Image1.Width;
Image1.Transparent:=True;
Panel1.DoubleBuffered:=True;
end;end.