先放一个panel在panel上边放image然后image 的图片显示所要滚动的图片 然后i:=panel.Width; if image.Left>i then image.Left:=-400 else image.Left:= image.Left+2 ; 只是我的一种变通的方法,仅供参考
用一个IMAGE控件,用它的画布canvas属性来移动文字,效果相当好
先放一个panel在panel上边放image然后image 的图片显示所要滚动的图片 然后time控件的过程如下,刚才太着急,忘了解释了,见笑,image的canvas我还没用过,不知道效果,以后再试,小弟初学,请多关照。 procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; begin i:=panel.Width; if image.Left>i then image.Left:=-400 else image.Left:= image.Left+2 ;end;
i := length(WildString(label1.Caption));
label1.Caption := copy(WildString(label1.Caption),2,i-1);//每次都去掉第一个字符
time1.Interval := 500TIMER 的事件中:
if label1.Left>0-label1.Width then
label1.Left := label1.Left-5
else
label1.Left := Left;
TIMER 的事件中:
if label1.Left>0-label1.Width then
label1.Left := label1.Left-5
else
label1.Left := width;//滚动窗口的宽度
to bluetooth_2001: 第三方的也可以试试啊~~ 在哪里有得D呢?~~
to chenjiong: 这个Raize在哪里有得D呢?~~
大家好,狂人的问题在公司高手的指引下,终于有了眉目~~~ 就是: 利用canvas.textout,计算label和所要显示的字体的长度,利用计时器在相应的位置画出来,大家觉得这样的方法如何呢??
1、扩展TCustomLabel类,使用计时器,在Paint重载事件中设置OffsetFrame偏移;另外输出文字用DrawText更好一点。此法效果最好——我以前扩展了一个Label类,同时带热下划线、颜色渐变、任意距离角度阴影、水平运动、垂直运动等功能还能够有较好的perform,当然,可能因为我用的是1.4G的看不出来。2、若求简单,可以在你原来的方法上做如下改动——汉字的组成字符的ASCII码均为160以上,就是说 Ord(Str[i])>160 的时候可以当汉字处理,一次减两个字符,否则减一个。这样效果凑合。3、如果利用控件的嵌套范围,修改控件相对坐标来剪切达到目的,则效果可能很差——闪的厉害!
哦!好象是Ord(Str[i])>=160!查查吧!
先放一个panel在panel上边放image然后image 的图片显示所要滚动的图片
然后i:=panel.Width;
if image.Left>i then image.Left:=-400
else image.Left:= image.Left+2 ;
只是我的一种变通的方法,仅供参考
然后time控件的过程如下,刚才太着急,忘了解释了,见笑,image的canvas我还没用过,不知道效果,以后再试,小弟初学,请多关照。
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
i:=panel.Width;
if image.Left>i then image.Left:=-400
else image.Left:= image.Left+2 ;end;
经过调试,觉得还是用画布的好, 用widestring这样的移动,效果不好,闪得厉害,而且给人的感觉很生硬~~~~~~
当然移动一行无所谓,
哎呀,好久没来Delphi了,今天来看看。
哎呀,好久没来Delphi了,今天来看看