Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.01;
Скачать: CL | DM;

Вниз

Как вывести картинку "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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.006 c
15-1322598602
Юрий
2011-11-30 00:30
2012.04.01
С днем рождения ! 30 ноября 2011 среда


2-1323630561
CheCoder
2011-12-11 23:09
2012.04.01
Delphi 7. Почему Image1.Canvas не печатается?


2-1323870171
Alex_C
2011-12-14 17:42
2012.04.01
Что лучше поле MyTablePole или MyTable.FieldByName( Pole )


15-1323090102
Kostafey
2011-12-05 17:01
2012.04.01
Построение визуальной модели данных по SQL (DDL)


3-1260010688
Xmen
2009-12-05 13:58
2012.04.01
не могу соединится с базой