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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 12:32   #1
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию Делфи. Полоса загрузки.

Всем привет. Есть программа которая осуществляет поиск по словарю, до выполнения какого то условия(там много циклов, суть не важна) словарь находится в Мемо. Поиск продолжается около 15 секунд, и в этот момент все как бы подвисает.
Такой вопрос: можно ли сделать полосу загрузки(это образно. Хотя бы какой нибудь текст меняющийся), пока идет этот поиск?

Я пробовал таймером, не получилось, он как будто пока программа висит не работает, ну или я неправильно что то сделал. Подскажите пожалуйста, как можно решить эту проблему?
Mr_freeman вне форума Ответить с цитированием
Старый 29.03.2012, 12:51   #2
BlackFishSQL
Форумчанин
 
Аватар для BlackFishSQL
 
Регистрация: 02.04.2011
Сообщений: 136
По умолчанию

Копайте в сторону компонента TProgressBar вкладка Additional!

Простой пример с заранее известным приращиванием!
Код:
......
Begin
 for i:=1 to 20 do 
  begin
   // здесь ваши расчёты
   // после ваших расчетов отображаем текущее состояние
   ProgressBar1.Position:=ProgressBar1.Position+4;
   sleep(100); // задержка в секунду
  end; 
 ProgressBar1.Position:=0;
end;
Пример не очень удобен! Можете упростить: свойство max=20 к примеру и в строке ProgressBar1.Position::=i;

Вообщем как-то так наверно!)

Последний раз редактировалось BlackFishSQL; 29.03.2012 в 13:01.
BlackFishSQL вне форума Ответить с цитированием
Старый 29.03.2012, 12:55   #3
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

После увеличения полосы загрузки вызывай Application.ProcessMessages, чтобы отобразить рузультат.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 29.03.2012, 13:11   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Krok27
вызывай Application.ProcessMessages
+1005000



оффтоп

Цитата:
словарь находится в Мемо. Поиск продолжается около 15 секунд,
кстати, а почему так долго то?! Может имеет смысл перегрузить данные из визуального TMemo в невизуальный TStringList и оперировать с ним? Должно быть многократное увеличение скорости работы.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.03.2012, 13:48   #5
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Приращение неизвестно...но я попробую разобраться с этими компонентами..
Ищет долго потому что словарь большой, и он прогоняется в последнем цикле из трех вложенных друг в друга.
Суть программы дешифровать текст, закодированный по алгоритму цезаря, при расшифровке нужно использовать словарь.
Mr_freeman вне форума Ответить с цитированием
Старый 29.03.2012, 14:33   #6
luffi
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 14
По умолчанию

на текст в коде не оращай внимания, вот я так делал когдато
Код:
procedure TForm2.Timer2Timer(Sender: TObject);
begin
//----------------------------------------
sGauge1.Progress:=sGauge1.Progress+1;
//--------------
if LanguageLabel.Caption='Óêðà¿íñüêà (Óêðà¿íà) - UA' then
begin
if sGauge1.Progress=15 then sLabel1.Caption:='Ïîøóê ìîäóë³â ïðîãðàìè...';
if sGauge1.Progress=30 then sLabel1.Caption:='Çàïóñê ìîäóë³â ïðîãðàìè...';
if sGauge1.Progress=50 then sLabel1.Caption:='Ïîøóê áàçè äàíèõ...';
if sGauge1.Progress=65 then sLabel1.Caption:='Çàïîâíåííÿ áàçè...';
end;

if LanguageLabel.Caption='Ðóññêèé (Ðîññèÿ) - RUS' then
begin
if sGauge1.Progress=15 then sLabel1.Caption:='Ïîèñê ìîäóëåé ïðîãðàììû...';
if sGauge1.Progress=30 then sLabel1.Caption:='Çàïóñê ìîäóëåé ïðîãðàììû...';
if sGauge1.Progress=50 then sLabel1.Caption:='Ïîèñê áàçû äàíûõ...';
if sGauge1.Progress=65 then sLabel1.Caption:='Çàïîëåíèå áàçû...';
end;

if LanguageLabel.Caption='English (USA) - EN' then
begin
if sGauge1.Progress=15 then sLabel1.Caption:='Search modules...';
if sGauge1.Progress=30 then sLabel1.Caption:='Run the program modules...';
if sGauge1.Progress=50 then sLabel1.Caption:='Search database...';
if sGauge1.Progress=65 then sLabel1.Caption:='Complete database...';
end;
//-----------------
if(sGauge1.Progress>=100) then
   begin
     Timer2.Enabled:=False;
     sPanel1.Visible:=false;
     Height:=290;
     Width:=267;
     Form2.Position:=poScreenCenter;
     end;
//----------------------------------------
end;
luffi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вертикальная полоса phantom22 Microsoft Office Word 6 15.02.2013 16:47
Полоса прокрутки Gamst HTML и CSS 2 06.06.2010 20:24
Полоса на ЖК мониторе Скандербег Компьютерное железо 0 23.08.2009 22:45
Цветная полоса??? ZuBy Мультимедиа в Delphi 7 04.08.2009 19:16
Черная полоса nitrous Компьютерное железо 1 18.05.2009 19:42