Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 941

Раздел: Delphi » Прочее
/ вопрос решён /

Здравствуйте, эксперты! Как сделать так чтобы через определённый промежуток времени ( напремер 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)

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, ExtCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Timer1: TTimer;
  12. Edit1: TEdit;
  13. Label1: TLabel;
  14. procedure Timer1Timer(Sender: TObject);
  15. procedure FormActivate(Sender: TObject);
  16. private
  17. { Private declarations }
  18. public
  19. { Public declarations }
  20. end;
  21.  
  22. var
  23. Form1: TForm1;
  24. n: integer;
  25. implementation
  26.  
  27. {$R *.dfm}
  28.  
  29. procedure TForm1.Timer1Timer(Sender: TObject);
  30.  
  31. begin
  32.  
  33. if n=4 then n:=0;
  34. n:=n+1;
  35. if n=1 then label1.caption:='x1';
  36. if n=2 then label1.caption:='x2';
  37. if n=3 then label1.caption:='x3';
  38. if n=4 then label1.caption:='x4';
  39.  
  40. end;
  41.  
  42. procedure TForm1.FormActivate(Sender: TObject);
  43. begin
  44. Timer1.Enabled:= True;
  45. n:= 0;
  46. end;
  47.  
  48. end.
  49.  


Ответ отправил: Шичко Игорь (статус: 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!

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ExtCtrls, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Label1: TLabel;
  12. Timer1: TTimer;
  13. procedure Timer1Timer(Sender: TObject);
  14. private
  15. { Private declarations }
  16. public
  17. { Public declarations }
  18. end;
  19.  
  20. const n=4;
  21. var
  22. Form1: TForm1;
  23. i:integer=0;
  24. implementation
  25.  
  26. {$R *.dfm}
  27.  
  28. procedure TForm1.Timer1Timer(Sender: TObject);
  29. begin
  30. Label1.Caption:=Format('x%d',[i mod n+1]);
  31. inc(i);
  32. end;
  33.  
  34. end.
  35.  


Ответ отправил: Николай Рубан (статус: 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

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

Arriba (статус: Посетитель), 29 сентября 2008, 00:13 [#4]:

Этот код пишется конечно непосредственно в событии таймера.

31 января 2011, 19:56: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.03 сек.