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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2014, 04:34   #1
милт
Форумчанин
 
Регистрация: 19.03.2012
Сообщений: 108
По умолчанию Преостоновить выполнение процедуры

Как приостановить выполнение процедуры так чтобы таймер не переставал отсчитывать время? Как например это делает ShowMessage, только чтобы само сообщение не появлялось в котором надо нажать OK и чтобы останавливал на заданное время.

Вот пример
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Sleep(3000);
// скрипт который после Sleep, будет выполнен после паузы в 3 секунды
// и таймер при этом тоже будет остановлен на 3 секунды
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 ShowMessage('ShowMessage');
// скрипт который после ShowMessage, будет выполнен после нажатия кнопки OK
// и таймер при этом не будет останавливаться
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
   Edit1.Text:='1';
 Timer1.Interval:=100;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Edit1.Text:=inttostr(strtoint(Edit1.Text)+1);
end;

Последний раз редактировалось Stilet; 01.09.2014 в 08:08.
милт вне форума Ответить с цитированием
Старый 01.09.2014, 05:13   #2
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Sleep(3000); тут и не трогают таймер.

процедура или функция ждёт три секунды а таймер работает
Не количеством плюсов измеряется репутация человека...!

Последний раз редактировалось Stilet; 01.09.2014 в 08:09.
Volkogriz вне форума Ответить с цитированием
Старый 01.09.2014, 08:12   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-т я ниче не понял...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.09.2014, 08:35   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var time:dword;
begin
  time:=GetTickCount;
  while ((GetTickCount-time)<3000) do
  begin
    Application.ProcessMessages;
  end;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 01.09.2014, 08:39   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А зачем sleep и прочее если таймер есть? Пусть он эти 3 секунды и отсчитывает и запускает нужное.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.09.2014, 08:46   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А потом жалуются, что не помогают, а только стебаются над ними. Вот как по такому описанию можно понять, что человеку надо?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 01.09.2014, 10:57   #7
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Автор, ShowMessage создает отдельную форму и выполняет её в отдельном потоке. Делается это так:
1. Создается экземпляр диалоговой формы.
2. Создается на нем надпись и кнопка.
3. Надписи присваевается текст из параметра функции, а кнопке "ОК".
4. Выжидается момент, когда кнопка будет нажата пользователем.
5. При нажатие этой кнопки уничтожается форма вместе с компонентами.
Возможно она выполняется по MessageBox или подобной функции. Так или иначе это очередная загадка от Microsoft.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 01.09.2014, 10:59   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

ShowMessage и Microsoft никак не связаны. ShowMessage это VCL.
FaTaL вне форума Ответить с цитированием
Старый 01.09.2014, 11:51   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

ShowMessage (== MessageDlg) это VCL форма, нету там никакого Microsoft. Исходники VCL есть, можете посмотреть что и как оно делает (Dialogs.pas).
И ведет себя точно так же, как и любая другая модальная форма (открытая через ShowModal), которой он и является.

А стандартный MessageBox из WinApi создается через MessageBox (из юнита Windows) или Application.MessageBox.

Цитата:
Так или иначе это очередная загадка от Microsoft.
Очередная? А еще какие были? Может они и не загадки вовсе.

А насчет вопроса авторы темы: непонятно чего он хочет, но скорее всего надо не пытаться сделать какой-то странный костыль с таймерами, а почитать про потоки и использовать их.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 01.09.2014 в 12:11.
Alex11223 вне форума Ответить с цитированием
Старый 01.09.2014, 12:36   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Автор, ShowMessage создает отдельную форму и выполняет её в отдельном потоке.
Шта? Нет там никаких доп. потоков Для доп. потока надо свой диспетчер строчить чтоб маршрутизровал оконные сообщения в доп.поток с формой, а то окно из потока - мертвый груз.

Цитата:
процедура или функция ждёт три секунды а таймер работает
неа с этим облом.sleep усыпляет поток, в котором он вызван. Если в том же потоке есть и таймер, то он тоже работать не будет т.к. цикл оконных сообщений остановлен на время Sleep.
На счет мультимедийных таймеров не смотрел.

Цитата:
Как приостановить выполнение процедуры так чтобы таймер не переставал отсчитывать время?
Вынести процедуру в отдельный поток. Других вариантов асихнхронной работы не бывает(спит и ждет одновременно), наверное.

Последний раз редактировалось Человек_Борща; 01.09.2014 в 12:41.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
приостановить выполнение процедуры YoraG Общие вопросы Delphi 2 08.03.2014 20:10
Выполнение процедуры Xo66um Общие вопросы Delphi 5 08.01.2014 18:52
Выполнение хранимой процедуры MSSQL Ronnie PHP 5 16.08.2013 15:29
завршить выполнение процедуры welcomeTo Помощь студентам 1 07.03.2011 16:22
закончить выполнение процедуры из тела другой процедуры Alaysor Общие вопросы Delphi 14 23.01.2011 05:26