| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |