Форум: "Основная";
Текущий архив: 2002.06.20;
Скачать: [xml.tar.bz2];
Внизпауза (ожидание нажатия кнопки) Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.025 c