Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.04.01;
Скачать: [xml.tar.bz2];

Вниз

Как вывести картинку "Please wait..." ?   Найти похожие ветки 

 
igorium ©   (2011-12-13 00:36) [0]

Всем привет.
Есть 3 картинки:
1) программа еще не работала
2) программа работает сейчас
3) программа выполнила работу и ждет реакции пользователя

Соответственно все 3 картинки одинакового размера и находятся в одном месте. В зависимости от ситуации одна картинка становится видимой, остальные - невидимыми.

При запуске программы замечательно показывается 1-я картинка.
После окончания всех подсчетов 3-я картинка отлично рисуется.
У меня проблема со средней картинкой.
Сразу после нажатия на кнопку RUN, по сути программа подвисает на несколько минут (время расчетов) и сразу выдает 3-ю картинку.

Если ставил смену картинок на событие onClick кнопки - у меня исчезала
сама кнопка на время работы программы.

Если ставил смену картинок на событие onMouseUp кнопки - у меня исчезала уже картинка на время работы программы.

Под "исчезновением" я понимаю замещение объекта белым пятном.

Пробовал использовать sleep - результат такой же. Только программа останавливалась на пару секунд.

Вообщем все перепробовал и ничего не работает :(
Изначально хотел делать гифку (через RxLib), сейчас был бы рад и обычному image.

Очень надеюсь на помощь.


 
KilkennyCat ©   (2011-12-13 00:44) [1]

Application.processMessages - вместо sleep


 
KilkennyCat ©   (2011-12-13 00:45) [2]

а ваще, если оно что-то там долго циклит и не реагирует и нет кнопки отмены - это очень нехорошо.


 
Германн ©   (2011-12-13 00:52) [3]

Либо KilkennyCat ©   (13.12.11 00:44) [1],
Либо доппоток, но нужно правильно определить что выполнять в доппотоке, что в основном.
Детали - после уточнения задачи.


 
Anatoly Podgoretsky ©   (2011-12-13 09:43) [4]

Какие потоки, когда он код не в состоянии привести.


 
sniknik ©   (2011-12-13 10:01) [5]

потоки нафиг, тут простого таймера для переключения достаточно.


 
igorium ©   (2011-12-13 10:37) [6]


> KilkennyCat ©   (13.12.11 00:44) [1]
> Application.processMessages - вместо sleep


Спасибо ОГРОМНОЕ.
Все работает.

PS Насчет кнопки отмена - подумаю. Спасибо за идею.


> Anatoly Podgoretsky ©   (13.12.11 09:43) [4]
> Какие потоки, когда он код не в состоянии привести.


Ну зачем так категорично?
У меня программа сканирует все файлы и подпапки от заданной, ищет все файлы Jpeg, каждый файл открывает...
Всего у меня ~17000 файлов данного типа...


 
Anatoly Podgoretsky ©   (2011-12-13 11:07) [7]

> igorium  (13.12.2011 10:37:06)  [6]

Ну вот и опять код не привел
Зато недовольный


 
igorium ©   (2011-12-13 11:13) [8]


> Anatoly Podgoretsky ©   (13.12.11 11:07) [7]
> > igorium  (13.12.2011 10:37:06)  [6]
>
> Ну вот и опять код не привел
> Зато недовольный


Почему недовольный - очень даже довольный - результат то получил какой надо.
Ну если код нужен, пожалста:

procedure TmyForm.FIND_JPEGS(StartDir: string);
var SearchRec: TSearchRec;
begin
 if (StartDir[Length(StartDir)] <> "\") then StartDir := StartDir + "\";
// Сначала находим и печатаем все файлы из главной папки
 if FindFirst(StartDir + "*.jpg", faAnyFile, SearchRec) = 0 then Repeat
  if(SearchRec.Attr and faDirectory) <> faDirectory then
   READ_FILE(StartDir + SearchRec.Name);
  Until FindNext(SearchRec) <> 0;
// Теперь находим все подпапки и продолжаем в них поиск
 if FindFirst(StartDir + "*.*", faAnyFile, SearchRec) = 0 then Repeat
  if((SearchRec.Attr and faDirectory) = faDirectory) and ((SearchRec.Name <> "..") and (SearchRec.Name <> "."))then
   FIND_JPEGS(StartDir + SearchRec.Name+ "\");
  Until FindNext(SearchRec) <> 0;
 FindClose(SearchRec);
end;



А процедура READ_FILE читает каждый файл, находит там данные и заносит в базу данных.
Или вам весь код надо на 1757 строк? :)


 
Anatoly Podgoretsky ©   (2011-12-13 11:24) [9]

Да уже не нужно, хороша ложка к обеду.


 
OW ©   (2011-12-13 12:20) [10]

CancelClick := false;
..
 application.procecmesage;
Until (FindNext(SearchRec) <> 0) or (CancelClick);
...

OnButtonCancelClick
 CancelClick := true;


 
igorium ©   (2011-12-13 15:08) [11]

OW Спасибо!


 
KilkennyCat ©   (2011-12-13 21:02) [12]


> OW ©   (13.12.11 12:20) [10]

не учи плохому, аппросмессадж в теле цикла - можно видеофильм вместо плизвэйта ставить.


 
igorium ©   (2011-12-14 08:42) [13]


> KilkennyCat ©   (13.12.11 21:02) [12]

> > OW ©   (13.12.11 12:20) [10]

> не учи плохому, аппросмессадж в теле цикла - можно видеофильм
> вместо плизвэйта ставить.


А что не так в этом примере?
У меня вроде все работает как надо?


 
OW ©   (2011-12-14 09:40) [14]


> KilkennyCat ©   (13.12.11 21:02) [12]

а что посоветовать? Потоками заняться?
Нормально для начала и так будет.
Имхо, пусть так пока сделает, а потом научится и потоки пускать, если нужно будет / станет интересно.


> igorium ©   (14.12.11 08:42) [13]

> А что не так в этом примере?
application.ProcessMessage; в теле цикла.
Каждый раз дает приложению обработать сообщения, которые оно не обрабатывает, пока занимается твоим кодом.
И твой код от этого выполняется медленнее и потенциально может еще что-то работать
Собственно смотрим
function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
 Handled: Boolean;
begin
 Result := False;
 if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
 begin
   Result := True;
   if Msg.Message <> WM_QUIT then
   begin
     Handled := False;
     if Assigned(FOnMessage) then FOnMessage(Msg, Handled);// тут например
     if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
       not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
     begin
       TranslateMessage(Msg);
       DispatchMessage(Msg);
     end;
   end
   else
     FTerminate := True;
 end;
end;

> У меня вроде все работает как надо?
ты сейчас кого спросил?
:)


 
KilkennyCat ©   (2011-12-14 10:15) [15]


>  OW ©   (14.12.11 09:40) [14]
> а что посоветовать? Потоками заняться?

ну да. я сам вначале предложил процмессадж, но увидев, что в программе 1757 строк кода уже, думаю, что время для потоков явно пришло.


 
Anatoly Podgoretsky ©   (2011-12-14 10:58) [16]

> KilkennyCat  (14.12.2011 10:15:15)  [15]

Он же умрет, так и не начав.
Если он не знает про ProcessMessages, то что он знает про потоки?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.017 c
1-1289586492
shebe91
2010-11-12 21:28
2012.04.01
Все возможные замены символов в пароле:


2-1323684737
igorium
2011-12-12 14:12
2012.04.01
Проблемы с Chart


2-1323785586
Liroi
2011-12-13 18:13
2012.04.01
Помогите исправить ошибку


15-1323157523
Pit
2011-12-06 11:45
2012.04.01
Delphi 7, приложение падает, если включена оптимизация


15-1322857803
Юрий
2011-12-03 00:30
2012.04.01
С днем рождения ! 3 декабря 2011 суббота





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский