Другие языки программирования и технологии

Как сделать бегущую строку на делфи 7 ?

С использованием копирования и вставки без одного символа, очень не плавно и глючно работает. Как сделать без этого?
Что-то типа такого:

var
s: string = 'Бегущая строка ';

procedure TForm1.Timer1Timer(Sender: TObject);
begin
s := s + s[1];
Delete(s, 1, 1);
Caption := s;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 200;
end;
Сергей Долгополов
Сергей Долгополов
62 397
Лучший ответ
засунь label в panel и двигай его по таймеру
Владимир Балан
Владимир Балан
50 628
т. е. ты меняешь саму текстовую строку?
для вывода строки какой компонент используется?
Владимир Янович Нашел уже компонент ScrollText, но он тоже работает не плавно, может в форме нужно что то настроить? Не подскажите?
<...>
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TRanString = class
Wnd: TPanel;
Str1: TLabel;
Str2: TLabel;
Tmr: TTimer;
Spd: Cardinal;
Sft: Cardinal;
private
procedure MoveText(Sener: TObject);
public
constructor Create(Form: TForm; Rect: TRect; Text: String;
IntervalMS: Cardinal);
destructor Destoy;
end;

var
Form1: TForm1;
RS: TRanString;

implementation

{$R *.dfm}
{ TRanString }

constructor TRanString.Create(Form: TForm; Rect: TRect; Text: String;
IntervalMS: Cardinal);
var
Ln: Cardinal;
begin
Wnd := TPanel.Create(Form);
Wnd.BoundsRect := Rect;
Wnd.BevelInner := bvLowered;
Wnd.DoubleBuffered := TRUE;
Wnd.Parent := Form;

Str1 := TLabel.Create(Form);
Str1.Caption := Text;
Str1.Top := (Wnd.Height div 2) - (Str1.Height div 2);
Str1.Parent := Wnd;

Str2 := TLabel.Create(Form);
Str2.Caption := Text;
Str2.Top := Str1.Top;
Str2.Parent := Wnd;
if Str2.Width < Wnd.ClientWidth then
Sft := Wnd.ClientWidth
else
Sft := Str2.Width + 5;
Str2.Left := Sft;

Tmr := TTimer.Create(Form);
Tmr.Interval := IntervalMS;
Tmr.OnTimer := MoveText;
Tmr.Enabled := TRUE;;

Spd := IntervalMS;
end;

destructor TRanString.Destoy;
begin
Str1.Destroy;
Str2.Destroy;
Wnd.Destroy;
Tmr.Destroy;
end;

procedure TRanString.MoveText(Sener: TObject);
begin
Str1.Left := Str1.Left - 1;
Str2.Left := Str2.Left - 1;
if abs(Str1.Left) = Sft then
Str1.Left := Sft;
if abs(Str2.Left) = Sft then
Str2.Left := Sft;
end;

// ---------------------

procedure TForm1.FormCreate(Sender: TObject);
begin
RS := TRanString.Create(Form1, Bounds(10, 10, 200, 20),
'Тестовый текст! ', 50);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
RS.Destoy;
end;

end.

с тебя печенька)