Другие языки программирования и технологии
Как сделать бегущую строку на делфи 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;
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;
засунь label в panel и двигай его по таймеру
т. е. ты меняешь саму текстовую строку?
для вывода строки какой компонент используется?
для вывода строки какой компонент используется?
Владимир Янович
Нашел уже компонент 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.
с тебя печенька)
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.
с тебя печенька)
Похожие вопросы
- Как сделать бегущую строку без флеша как на этом сайте...
- как сделать русскую бегущую строку в файле php?
- Помогите написать очень простую прогу по программированию в Делфи 7
- Калькулятор в делфи 7
- Множество. ЯП делфи 7
- как вставить на сайте бегущую строку. не могу на народе.ру вставить
- Какая есть программа для обработки видео (обрезка, вставка титров, бегущей строки и т. п.)
- вам приходится работать с командной строкой в виндовс 7, она вообще нужна? чего то не могу понять для чего она, да и
- Как сделать аватарку в adobe photoshop 7.0?
- Дана матрица размером NxM. Упорядочить ее строки по неубыванию их наибольших элементов. в делфи помогите плиз срочно