在Delphi中实现动态字幕(100分)

  • 主题发起人 主题发起人 delphi_hzj
  • 开始时间 开始时间
D

delphi_hzj

Unregistered / Unconfirmed
GUEST, unregistred user!
在网上这个题目太多了,现摘如下:
 如果大家使用过《金山词霸》或《东方快车》的话,一定会对其“关于”窗口中的滚动字幕感兴趣,其实利用Delphi中的Timer控件可以很轻松地实现这一功能。
  一、设计思路
  首先在窗体上放置一个Panel控件,并在Panel控件中放置需要显示的文字,然后通过Timer控件,在一定的间隔时间内不断改变Panel控件的位置就可以实现滚动字幕的效果了。
  二、实现方法
  1.新建一个窗体,设置其属性如下:
  Name:frmAbout1
  AutoScroll:False
  2.在窗体上放置一个Panel控件,其默认名称为Panel1,设置其属性如下:
  BevelOuter:bvNone
  Caption:(设为空)
  调整Panel1的高度和宽度,使其成一竖长条形,其高度视需显示的内容多少而定(可以大于窗体的高度)。
  3.在Panel1上面放置Label控件以显示文字,当然你也可以在上面放置Image控件来显示图片,但图片的尺寸不可太大,否则会影响显示效果。
  4.在窗体上放置一个Timer控件,其默认名称为Timer1,将其Interval属性值设为50,并在其OnTimer事件中输入以下代码:
if Panel1.top>-Panel1.height then
Panel1.top:=Panel1.top-1
else
Panel1.top:=frmAbout1.height-35;
  {判断Panel1是否移动到了窗体的最上端,如果不是,就向上移动一个像素点的位置;如果是的话,就将Panel1移动到窗体的最下端,循环显示字幕}
  5.在窗体上放置一个Button控件,将其Caption属性设为“确定”,并在OnClick事件中输入以下代码:
  close;{关闭窗体}
  三、改进分析
  以上是一个简单的滚动字幕的实现过程,但还有一个地方需要进一步完善:如果窗体使用了图片作为背景的话,Panel控件会遮挡住部分背景图案。其实要解决这个问题,我们完全可以不使用Panel控件,而是直接将Label控件放置在窗体上,并将Label控件的Transparent(透明)属性值设为True,然后通过Timer控件直接控制这些Label控件的移动。限于篇幅,在这里笔者就不再具体叙述了。


我的问题是:
如果我用label来实现的话。是不是应这样写?
if label3.top>=label3.height then
label3.top:=label3.top-1
else
label3.top:=frmAbout1.height-35
可是系统提示frmAbout1出错
 
用rxlib里的一个控件就可以了,而且很好用,不用考虑居中问题
 
判断label是否在最上端 只需要判断它的top是否为 0啊~
 
你可以把label 放在panel 上,在timer控件中写:
if label3.top>=-label3.height then
label3.top:=label3.top-1
else
label3.top:=panel1.height;
用label不好,时间太快的话有闪烁,建议用statictext
 
用第三方控件 RXLIB 吧,里面有一个控件 SECRETPANEL ,可以很好的实现这个功能。
 
procedure tform1.drawtext(s:string;rect:trect);
var i:integer;
sep:real;
offrect:integer;
begin
sep:=(rect.Right -rect.Left)/length(s);
canvas.FillRect(rect);
sleep(200);
for i:=1 to length(s)do
begin
canvas.TextOut(rect.left+ round((i-1)*sep),rect.top+5,s);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var s:trect;
begin
s:=rect(100,100,200,200);
drawtext('iloveyou',s);
end;
这段代码相信能够给你一点启发!
 
问的和答的都很精彩哦!我可以试试了
 
天真的水平好像比我们高出一截
 
var
x,tt,l,h:integer;
pic:TRect;
map:TBitmap;
procedure TForm1.FormCreate(Sender: TObject);
begin
x:=image1.Height+10;
tt:=x+80;
form1.repaint;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x-1;
tt:=tt-1;
if x<-160 then
x:=image1.height+10;
tt:=x+170;
with image1.Canvasdo
begin
font.size:=24;
font.color:=clRed;
TextOut(20,x,'学籍管理系统 V1.0');
font.size:=14;
font.color:=clAqua;
TextOut(90,x+50,'程序设计: XXX');
font.size:=14;
font.color:=clAqua;
TextOut(90,x+80,'美术设计: XXX');
font.size:=14;
font.color:=clAqua;
TextOut(90,x+110,'调 试: XXX');
font.size:=14;
font.color:=clAqua;
TextOut(90,x+140,'数 据: XXX');
end;
end;
 
后退
顶部