Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таймер, Пауза в работе програмы 
:(
    Опции темы
arashvg
Дата 7.5.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 19.6.2009

Репутация: нет
Всего: нет



Несколько лет не программировал, а сегодня нужно написать небольшую прогу, застрял на элементарном :( 

Задача следующая.
При нажатии на кнопку программа имитирует процесс поиска.

Нужно сделать что-то типа: Нажал на кнопку появилась надпись "Подождите идет поиск" (програ рандомно задает паузу от пол минуты до 2-х минут) и это время ничего не делает, по истечение времени появляется другое сообщение. 

Вот на этой задержке и застрял smile может кто напомнит как именно это сделать?
PM MAIL WWW   Вверх
~FoX~
Дата 7.5.2010, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Код

Sleep(Random(1000*30*90)+30000);

Так же с таймером...

Это сообщение отредактировал(а) ~FoX~ - 7.5.2010, 16:35


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
kami
Дата 7.5.2010, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Имхо, использовать Sleep некузяво. Бо окошко не обновляется и может стать "белым", а еще винда может сказать "приложение не отвечает".
Еще одно имхо, лучше сделать как-то так:
создаем форму, отображающую прогресс "поиска" (обзовем ее fmProgress).
На нее кладем таймер, прогрессбар, лейблы и остальное необходимое для красивого отображения поиска.
Таймер настраиваем на желательный интервал движения прогрессбара (пускай будет 1000 мс) и выставляем ему Enabled:=False.

Далее, в процедуре начала поиска пишем:
Код

if not Assigned(fmProgress) then
  fmProgress:=TfmProgress.Create(Self);
fmProgress.ShowModal;


В модуле fmProgress пишем:
Код

procedure TfmProgress.OnShow(Sender:TObject);
begin
  Timer1.Tag:=Random(90*1000)+30000; // интервал от тридцати секунд до 30 секунд+90 секунд (2 минуты)
  // это свойство в процессе работы будет уменьшаться до нуля.
  Timer1.Enabled:=True;// и запускаем таймер
end;

procedure TfmProgress.Timer1Timer(Sender:TObject);
begin
  Timer1.Tag:=Timer1.Tag-Timer1.Interval; //  уменьшаем наш счетчик 
  if Timer1.Tag=0 then // и когда счетчик станет =0
    begin
      ModalResult:=mrOK; // даем команду форме закрыться
      Timer1.Enabled:=False; // и деактивируем таймер
    end
  else
    begin
      ProgressBar1.Step; // или как он называется, "дефолтное" увеличение Position - Delphi не под рукой.
      if ProgressBar1.Position=ProgressBar1.Max then
        ProgressBar1.Position:=0; // реализуем "циклическую" работу прогрессбара.
    end;
end;

PM MAIL WWW   Вверх
profesiachuvak
Дата 8.5.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: 1
Всего: 4



Цитата(kami @  7.5.2010,  19:09 Найти цитируемый пост)
Имхо, использовать Sleep некузяво. Бо окошко не обновляется и может стать "белым", а еще винда может сказать "приложение не отвечает".


А почему некузяво ? Давайте сделаем кузяво:

Код

//Цикл - это задержка, после которой появится сообщение
  for i:=1 to 1000 do
    begin
      sleep(10);
      Application.ProcessMessages;
    end;
ShowMessage('Exit');
Close;


Ведь задержка здесь в принципе бесполезная штука, а с помощью sleep она становится очень даже полезной для производительности программы.

Добавлено через 1 минуту и 47 секунд
Ну random естесственно туда всунуть.


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.