Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-64935
bigmel
2002-05-27 11:57
2002.06.20
Подскажите, как в DbGrid обращаться к конкретным рядам?


14-65208
Miwa
2002-04-19 15:55
2002.06.20
Глюк в Delphi.MAstak.ru Forum Client?


3-64987
Alik Chu
2002-05-27 14:13
2002.06.20
Навигация по dbgrid у при multiselect е


4-65276
serge1234
2002-04-18 10:55
2002.06.20
Использование FormatMessage


1-65097
mihrutka
2002-06-06 13:44
2002.06.20
сохранить файл из word с параметрами...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский