Delphi中的效果选框标签

时间:2016-01-03 15:17:40

标签: delphi

我正在为标签上的选框效果执行功能,标签交给它,我放置长文本并禁用“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;

示例:

enter image description here

enter image description here

问题是它开始和结束都很糟糕,开始低于正常并且结束不完整,因为它显示了一半并重新启动而没有显示其他部分

有什么问题?

1 个答案:

答案 0 :(得分:4)

您永远不应该通过移动VCL控件来创建动画。而是在表单的OnPaint处理程序或自定义控件中手动(使用GDI)绘制动画。如果我是你,我会创建TMarqueeLabel的{​​{1}}后代。

无论如何,你的逻辑很奇怪。 TCustomControl相当于Label1.Top <= 0 - Label1.Top。也许你的意思是

Label1.Top <= 0

要弄清楚为什么这是理想的逻辑,这是一个简单的练习。 (当整个文本消失在屏幕顶部之外时,这将重新启动动画,新动画将以完全隐藏在屏幕下方的文本开始。我假设这是你想要的。)