我正在为标签上的选框效果执行功能,标签交给它,我放置长文本并禁用“AutoSize”属性。 选框效果是自下而上的,我的代码是:
procedure TForm1.Form_EffectsClick(Sender: TObject);
begin
Label1.Caption := 'This is right scrolling text' + sLineBreak +
'This is right scrolling text' + sLineBreak + 'This is right scrolling text'
+ sLineBreak + 'This is right scrolling text' + sLineBreak +
'This is right scrolling text' + sLineBreak + 'This is right scrolling text'
+ sLineBreak + 'This is right scrolling text' + sLineBreak +
'This is right scrolling text' + sLineBreak + 'This is right scrolling text'
+ sLineBreak + 'This is right scrolling text' + sLineBreak +
'This is right scrolling text' + sLineBreak + 'This is right scrolling text'
+ sLineBreak + 'This is right scrolling text' + sLineBreak +
'This is right scrolling text' + sLineBreak;
test.Enabled := true;
end;
procedure TForm1.testTimer(Sender: TObject);
begin
Label1.Top := Label1.Top - 10;
if Label1.Top <= 0 - Label1.Top then
begin
Label1.Top := Label1.Height;
end;
end;
示例:
问题是它开始和结束都很糟糕,开始低于正常并且结束不完整,因为它显示了一半并重新启动而没有显示其他部分
有什么问题?
答案 0 :(得分:4)
您永远不应该通过移动VCL控件来创建动画。而是在表单的OnPaint
处理程序或自定义控件中手动(使用GDI)绘制动画。如果我是你,我会创建TMarqueeLabel
的{{1}}后代。
无论如何,你的逻辑很奇怪。 TCustomControl
相当于Label1.Top <= 0 - Label1.Top
。也许你的意思是
Label1.Top <= 0
要弄清楚为什么这是理想的逻辑,这是一个简单的练习。 (当整个文本消失在屏幕顶部之外时,这将重新启动动画,新动画将以完全隐藏在屏幕下方的文本开始。我假设这是你想要的。)