|
Вопрос # 1 941/ вопрос решён / |
|
Здравствуйте, эксперты! Как сделать так чтобы через определённый промежуток времени ( напремер 0,4 сек) текст в поле Label менялся ( например х1,х2,х3,х4 и тд.)
Зарание спасибо!
 |
Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 27 сентября 2008, 15:50
Состояние вопроса: решён, ответов: 4.
|
Ответ #1. Отвечает эксперт: Аксион
Здравствуйте, Ученый!
Можно использовать компонент taimer, в его обработчик впишите:
if n=4 then n:=0; //4 - так как всего 4 разных текста
n:=n+1;
if n=1 then label1.caption:='x1';
if n=2 then label1.caption:='x2';
if n=3 then label1.caption:='x3';
if n=4 then label1.caption:='x4';
(не забудьте объявить переменную n как integer)
И свойство interval измените на 400 (400 миллисекунд)
Решение не из лучших...но всё же решение....
 |
Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 27 сентября 2008, 16:15
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Шичко Игорь
Здравствуйте, Ученый!
Немного подправлю:
переменную nнужно описать как глобальную
написать обработчик активации формы
Код в приложении
Параметр Interval = 400 (объекта Timer1)
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls;
-
- type
- TForm1 = class(TForm)
- Timer1: TTimer;
- Edit1: TEdit;
- Label1: TLabel;
- procedure Timer1Timer(Sender: TObject);
- procedure FormActivate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
- n: integer;
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.Timer1Timer(Sender: TObject);
-
- begin
-
- if n=4 then n:=0;
- n:=n+1;
- if n=1 then label1.caption:='x1';
- if n=2 then label1.caption:='x2';
- if n=3 then label1.caption:='x3';
- if n=4 then label1.caption:='x4';
-
- end;
-
- procedure TForm1.FormActivate(Sender: TObject);
- begin
- Timer1.Enabled:= True;
- n:= 0;
- end;
-
- end.
-
 |
Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 27 сентября 2008, 18:18
Оценка за ответ: 5
Комментарий к оценке: Спасибо! Огромное!
|
Ответ #3. Отвечает эксперт: Николай Рубан
Здравствуйте, Ученый!
На мой взгляд предыдущие эксперты перемудрили, если требуется выводить текст исключительно такого образца: Цитата:
(например х1,х2,х3,х4 и тд.)
То код который прописываем в Timer1Timer(Sender: TObject); можно сократить до минимума - если использовать знания АТЧ (алгебры и теории чисел), тем самым избавиться от кучи операторов ветвления:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption:=Format('x%d',[i mod n+1]);
inc(i);
end;
Конечно же как уже было замечено необходимо описать все переменные:
...
const n=4;
var
Form1: TForm1;
i:integer=0;
...
Полный код ищите в приложении.
Good Luck!
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ExtCtrls, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Label1: TLabel;
- Timer1: TTimer;
- procedure Timer1Timer(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- const n=4;
- var
- Form1: TForm1;
- i:integer=0;
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- Label1.Caption:=Format('x%d',[i mod n+1]);
- inc(i);
- end;
-
- end.
-
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 27 сентября 2008, 19:39
Оценка за ответ: 5
|
Ответ #4. Отвечает эксперт: min@y™
procedure TForm1.Form1Create(Sender: TObject);
begin
Timer1.Interval:= 400;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Tag:= Tag + 1;
Label1.Caption:= 'x' + IntToStr(Tag);
Label1.Update();
end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 30 сентября 2008, 08:47
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 29 сентября 2008, 00:13; участников в обсуждении: 3.
|
Ученый (статус: 8-ой класс), 27 сентября 2008, 17:57 [#1]:
Слушай Блазер! не идёт! набрал всё как ты сказал! Ничё не меняется!
|
|
Аксион (статус: 4-ый класс), 27 сентября 2008, 18:17 [#2]:
.....
private
n:integer;
.....
- n надо объявить тут, а не через var в taimer'е
|
|
Arriba (статус: Посетитель), 29 сентября 2008, 00:10 [#3]:
В подобных вопросах я обычно поступал следующим образом:
var x:array[1..2] of string;
begin
x[1]:='1';
x[2]:='2';
Timer1.Tag:=Timer1.Tag+1;
Label1.Caption:=x[Timer1.Tag];
if Timer1.Tag=2 then
Timer1.Tag:=0;
end;
|
|
Arriba (статус: Посетитель), 29 сентября 2008, 00:13 [#4]:
Этот код пишется конечно непосредственно в событии таймера.
|
31 января 2011, 19:56: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|