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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 04:27   #1
moscow
 
Регистрация: 20.12.2010
Сообщений: 8
По умолчанию Цикл и форма

Искал код с одним потоком и нашел на одном форуме, но с ним проблема и на нее никто не ответил там. Вот код:

Цитата:
1. Все норм, но когда передвигаю форму, цикл сразу ... весь заканчивается. Что не так?
Цитата:
procedure Chikl.Execute;
var
a:integer;
begin
try
for a:=1 to StrToInt (Form1.Edit1.Text) do begin
Form1.memo1.Lines.Add(IntToStr(a));
{sleep (1000)}
end;
finally
terminate;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
x:Chikl;
begin
try
Button1.Enabled:=false;

x:=Chikl.Create(true);
x.FreeOnTerminate:=true;
x.Priority:=tpNormal;
x.Resume;
while not x.Terminated do begin sleep(25);
application.ProcessMessages;
end;

finally
Button1.Enabled:=true;
end;
end;
Цитата:
2. Как сделать чтобы цикл по таймеру был из Edit?
moscow вне форума Ответить с цитированием
Старый 14.04.2011, 12:18   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Что не так?

с VCL нельзя работать не в контексте "главного" потока. Вот этот код (и любой другой, работающий с VCL) переносим из Execute() в отдельный метод класса Chikl, и вызываем этот метод через Synchronize():

Код:
for a:=1 to StrToInt (Form1.Edit1.Text) do begin
Form1.memo1.Lines.Add(IntToStr(a));
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 15.04.2011, 03:46   #3
moscow
 
Регистрация: 20.12.2010
Сообщений: 8
По умолчанию

veniside, спасибо за ответ. Ответ правда не для школьников.
Если не затруднит, пример привести. Школьник в этом деле еще, на пальчиках нужно объяснять.
moscow вне форума Ответить с цитированием
Старый 15.04.2011, 15:32   #4
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

как говориться "тупо для вашего примера", только не пойму зачем цикл в поток выносить...
Код:
type
  TChikl = class(TThread)
  private
    str : string;
    { private declarations }
    procedure Uptdate;
  protected
    procedure execute; override;
  public
    startI : integer;
  end;

procedure TChikl.Execute;
var
  a:integer;
begin
  try
    for a:=1 to startI do
    begin
      str := IntToStr(a);
      Synchronize(Uptdate);
      {sleep (1000)}
    end;
  finally
    terminate;
  end;
end;

procedure TChikl.Uptdate;
begin
   Form1.memo1.Lines.Add(a);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
x:TChikl;
begin
try
Button1.Enabled:=false;

x:=TChikl.Create(true);
x.FreeOnTerminate:=true;
x.Priority:=tpNormal;
x.startI := StrToInt (Form1.Edit1.Text);
x.Resume;
while not x.Terminated do begin sleep(25);
application.ProcessMessages;
end;

finally
Button1.Enabled:=true;
end;
end;
З.Ы. Написано "на коленке", так что скорее всего будут "зявки"
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 23.04.2011, 04:56   #5
moscow
 
Регистрация: 20.12.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Mifody Посмотреть сообщение
З.Ы. Написано "на коленке", так что скорее всего будут "зявки"
"Заявок" не будет, ответ сами дали, и не пишите больше "на коленке".
moscow вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форма tgm Microsoft Office Excel 6 21.01.2011 10:39
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34