Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2011, 18:50   #1
nattaella
 
Регистрация: 08.01.2011
Сообщений: 8
По умолчанию таймер

При нажатии на кнопку BitBtn1 у меня одновременно должны начать выполняться процедура RunRight(0); и в LEdit4 показываться числа от 15 до 0 с интервалом в 1 сек. :


Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var p:integer;
begin
RunRight(0);
for i:=5 downto 1 do begin
LEdit4.Text:=inttostr(i);
sleep(1000);
Application.ProcessMessages;
LEdit4.Text:=inttostr(i-1);
end;
end;
Как сделать, чтоб они выполнялись одновременно? Может использовать потоки?



________
Код нужно оформлять по правилам.
Можно просто ручками написать перед кодом квадратная скобка CODE закрывающия скобка
а в конце открывающия квадратная скобка /CODE закрывающия скобка
т.е. получится [CODE] тут программа [/СODE]

или, на панели, где задаётся шрифт, цвет, есть кнопочка, на которой нарисована решётка (#)
выделите текст и нажмите на кнопку, теги проставит скрипт форума

Модератор.

Последний раз редактировалось Serge_Bliznykov; 22.06.2011 в 22:09. Причина: не знаю, как оформлять код. где вообще этот значок находится?(
nattaella вне форума Ответить с цитированием
Старый 22.06.2011, 21:59   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Вот небольшой пример с помощью потока не тормозит выполнение программы.
Должен выполнять процедуру RunRight(0) и менять значение в LEdit4
Попробуйте так:

Код:
//Объявляем в TForm1
 public
    procedure OnTimer(Sender: TObject);
  end;

  //Поток 
TTimer = class(TThread)
//Событие
FOnTimer:TNotifyEvent;
protected
procedure Execute; override;
//Функция события
procedure DoTimer; virtual;
public
constructor Create; virtual;
destructor Destroy; override;
published
property OnTimer: TNotifyEvent read FOnTimer write FOnTimer;
end;

var
  Form1: TForm1;
Timers: TTimer; //Имя потока

implementation

{$R *.dfm}

constructor TTimer.Create;
begin
inherited Create(True);
FreeOnTerminate := True; //Для уничтожения потока когда он остановлен
resume; //запускаем поток
end;

destructor TTimer.Destroy;
begin
Terminate;
inherited;
end;

procedure TTimer.Execute;
begin
//Крутим поток
while not Terminated do
begin
//Вызываем функцию
DoTimer;
sleep(5); //прерывание иначе будет грузить систему
end;
end;

procedure TTimer.DoTimer;
begin
//Вызываем событие
if Assigned(FOnTimer) then
FOnTimer(Self);
end;

procedure TForm1.OnTimer(Sender: TObject);
var
i:integer;
begin
//Ваш код в событии
for i:=5 downto 1 do begin
RunRight(0);
LEdit4.Text:=inttostr(i);
sleep(1000);
LEdit4.Text:=inttostr(i-1);
RunRight(0);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//Создаем и запускаем поток
Timers :=TTimer.Create;
Timers.OnTimer:=OnTimer; //перенаправить событие в TForm1 
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//Останавливаем поток
Timers.Terminate;
end;

Последний раз редактировалось Aliens_wolfs; 22.06.2011 в 22:25.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
таймер Tema_666 Общие вопросы Delphi 6 03.03.2011 09:20
Таймер Ins1De Общие вопросы C/C++ 2 26.05.2010 22:29
таймер в C# Munky Помощь студентам 2 15.04.2010 20:30
Таймер Михаил Юрьевич Общие вопросы Delphi 1 16.07.2008 08:46
Таймер в С# kommunist Общие вопросы .NET 3 02.06.2008 12:11