![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
В программе на Дельфи загружаю изображение так:
Код:
Image1.Picture.LoadFromFile('C:\kartinka.jpg');Загружаю большое изображение и необходимо во время загрузки показывать на каком этапе находится процесс загрузки. Проблема в том, что во время загрузки изображения программа просто замораживается на это время и ничего кроме загрузки не выполняет. Как решить эту задачу и при помощи ProgressBar показать процесс загрузки? Надеюсь на вашу помощь. |
|
#2
|
||||
|
||||
|
Я думаю, что это с обычным TImage не возможно... надо или писать свой компонент, с выводом загрузки, или просто показывать в этот момент форму-заставку, типо "Пожалуйста, подождите...", и когда картинка полностью загрузиться (а это можно узнать, например из условия if(Image1 <> nil), просто убирать форму-заставку...
|
|
#3
|
||||
|
||||
|
ну можно на момент загрузки гонять из стороны в сторону на прогресс баре полоску а когда загрузится убираем и пишем мол загружено
|
|
#4
|
||||
|
||||
|
Все это от Лукавого. Все что нужно - давно придумано. А нужно просто менять курсор на "песочные часы" и не запариваться.
|
|
#5
|
|||
|
|||
|
Цитата:
Этот вариант к сожалению не подходит... А по поводу гонять полоску прогресс бара - меня бы устроило, просто проблема в том, что программа просто «подвисает» на время загрузки большой картинки, а потом продолжает работу. Поэтому прогресс бар просто не реагирует в этот момент ни на что. Какие-нибудь идеи есть как решить эту задачу? |
|
#6
|
||||
|
||||
|
Я уже ж говорил, надо прогрес бар просто поставить на другую форму, и тогда он реагировать будет...
Цитата:
|
|
#7
|
|||
|
|||
|
Событие OnProgress
|
|
#8
|
|||
|
|||
|
Цитата:
Цитата:
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
procedure TForm1.Image1Progress(Sender: TObject; Stage: TProgressStage;
PercentDone: Byte; RedrawNow: Boolean; const R: TRect; const Msg: string);
begin
ProgressBar1.Position:=PercentDone;
label1.Caption:=IntToStr(PercentDone)+'%';
Application.ProcessMessages;
end; |
|
#9
|
|||
|
|||
|
Обрабатывайте заполнение прогрессбара с использованием Application.ProcessMessages. Тогда он будет работать! У Вас ведь приложение в одном потоке работает
|