Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.20;
Скачать: CL | DM;

Вниз

пауза (ожидание нажатия кнопки)   Найти похожие ветки 

 
Tosha_a   (2002-06-05 19:59) [0]

Добрый вечер,
На Делфи программирую недавно и возникла такая проблема: есть кнопка, при нажатии на которую идёт обработка данных. Мне нужно, чтобыв определённый момент эта обработка остановилась и ожидала нажатия на кнопку (напр. ДАЛЕЕ), а потом опят начала бы выполнятьсе с прерванного места.
Как это реальзовать? очень срочно.
Антон.


 
Новеньки в Делфи   (2002-06-05 20:19) [1]

...всё зависит от конкретного случая.

Моможно разбить всю задачю не несколько процедур и каждую вызывать после нажатия.

...так же можно запустить задачу в отдельный поток, и когда нужна пауза, "заморозить" этот поток, для продолжения работы потока, соовтествено "разморозить".

Может если расскажешь поконкретнее, что-то смогу предложить получше


 
Tosha_a   (2002-06-05 21:27) [2]

На процедуры разбить не удаётся.
Опиши поподробнее метод с потоками.


 
Новеньки в Делфи   (2002-06-05 23:12) [3]

На практике я так не делал... но всё равно попробуй.

Создаёшь new>other>Tread Object
Задаёшь имя для будующего класса, потомка от TThread (например TMyThread).

Появится новый модуль, в нём, в процедуру Execute вставляешь свои расчёты. Задаёшь глобальную переменную тип которой будет совпадать с твоим типом TThread (например var MyThread: TMyThread).

Дальше создаёшь поток из своей процедуры:

MyThread:= TMyThread.Create(false) // поток начинает работать, параметр false означает что поток не будет спать.

Так же свойство TMyThread.Suspended типа boolean отвечает за работу потока (true спит, false работает).

Попоробуй...


 
cyborg ©   (2002-06-05 23:24) [4]

У нопки есть переменная Tag, по умолчанию = 0 сделай так:


Procedure OnButtonClick(...)
Begin
Case Button.tag do или of :-) не помню
0 : Begin Button.Tag:=1;
Тут делаем что-то, как деланье закончилось
пишем на кнопке что-то вроде НАЖМИТЕ ДЛЯ ПРОДОЛЖЕНИЯ
End;
1 : Begin Button.tag:=2;
тут прордолжаем что-то делать
End;
...

5 : Begin
Button.Tag:=0;
Последняя стадия обработки,
после окончания можно вернуть первоначальную
надпись на кнопке
End;
End;
End;


 
Bond ©   (2002-06-06 12:01) [5]

Как я понимаю, необходимо, чтобы обработчик выполнил часть кода, потом "завис", ожидая, пока пользователь выполнит некоторые действия, потом при повторном нажатии кнопки выполнил оставшуюся часть кода.

Обработчик надо писать так:

Var Clobal : Integer //Глобальная переменная
...
...
...
procedure TForm1.Button1Click(Sender: TObject);
begin
case Global of
1 : {Некоторые действия};
2 : {Некоторые действия};
3 : {Некоторые действия};
end;
end;

Перед первым нажатием на кнопку переменной Global := 1
Выполнится часть кода, удовлетворяющая Global = 1
Перед повторным нажатием на кнопку Global := 2
Выполнится часть кода, удовлетворяющая Global = 2
Перед третьим нажатием - Global := 3..... и т.д.

Недостаток - необходимо объявлять глобальную переменную


 
Skyle ©   (2002-06-06 13:07) [6]

А не проще ли использовать ProcessMessages? %)))


 
Новеньки в Делфи   (2002-06-06 17:51) [7]

2 Bond как я понял разбить на процедуры, основноу задачу не подходит.

2Skyle а причём тут ProcessMessage


 
cyborg ©   (2002-06-06 19:40) [8]

Bond © а ты смотрел что я написал? :-)



Страницы: 1 вся ветка

Текущий архив: 2002.06.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
3-64964
SkyWalker
2002-05-28 11:40
2002.06.20
Дата в IB


4-65291
Ильясов Вадим
2002-04-21 19:34
2002.06.20
Работа с реестром из DOS


14-65210
Sam08
2002-05-17 15:18
2002.06.20
Эй Ну кто из вас наладил продажу своей программы в сети


1-65143
Валет
2002-06-07 14:12
2002.06.20
Получение длинного имя файла по короткому.


4-65283
ProNix
2002-04-20 21:32
2002.06.20
FileLock