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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2010, 21:16   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,898
По умолчанию Работа Gauge1 при распаковке

Как можно задействовать Gauge1 во время процесса распаковки (показ выполненой работы)?
Вложения
Тип файла: rar setup.rar (163.8 Кб, 13 просмотров)

Последний раз редактировалось Shouldercannon; 12.01.2010 в 22:19.
Shouldercannon вне форума Ответить с цитированием
Старый 13.01.2010, 12:05   #2
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,898
По умолчанию

Или прогресс бар задейсвовать. Сделать как в WinRAR при распаковке SFX архива.
Shouldercannon вне форума Ответить с цитированием
Старый 13.01.2010, 12:35   #3
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Можно в событие UnRarCallBack добавить отображение процесса

Код:
ProgressBar1.Position := P2; // Выставить позицию
Form1.Refresh; // Обновить форму (на всякий случай, этого можно и не делать)
Только не забудте перед началом процесса указать ProgressBar1.Max равным размеру распаковываемого файла.
Greek9000 вне форума Ответить с цитированием
Старый 13.01.2010, 12:36   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
// Обновить форму (на всякий случай, этого можно и не делать)
Код:
Gauge1.Refresh
- Займет меньше времени на перерисовку.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 13.01.2010, 17:47   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,898
По умолчанию

Код:
P2
- это Integer, если да то чему он равен. Размер файла 286 Мб
По ходу я торможу. Вот как сделал
Код:
function UnRarCallBack(msg: Cardinal; UserData, P1, P2: integer): integer; stdcall;
begin
  Result := 0;

  Form1.ProgressBar1.Max:=286;
  Form1.ProgressBar1.Position:=P2; // Выставить позицию
  Form1.ProgressBar1.Refresh; // Обновить форму (на всякий случай, этого можно и не делать)
end;
Дёргается при распаковке

Немного не по теме. Используя данный способ разархивации, как можно его прервать?

Последний раз редактировалось Shouldercannon; 13.01.2010 в 17:56.
Shouldercannon вне форума Ответить с цитированием
Старый 14.01.2010, 07:15   #6
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

строчку
Код:
 Form1.ProgressBar1.Max:=286;
надо вставить до начала выполнения процесса разархивирования, а в данном случае получается, что она выполняется каждый раз, когда происходит событие UnRarCallBack.
Да и к тому же 286 Мб - это 268*1024*1024 = 299892736 байт.
Это объясняет, почему "Дёргается при распаковке" - потому что в одном и том же вызове, например на 50% в ProgressBar приравниваются подряд два значения 286 и 149946368 (299892736 / 2), а при приравнивании Position большем чем Max этот самый Max становится равным Position. Отсюда и дёрганья.

Ответ не по теме: заведите отдельную логическую переменную, которую можно изменять в процессе распаковки (напр. по нажатию кн. "Стоп"), и сдесь же в UnRarCallBack проверяйте
Код:
if not MyCancelVariable then begin
  //... Код, который прерывает выполнение разархивации 
end;
Что конкретно написать в коде прерывания я Вам, естественно, не скажу, т.к. не знаком с используемой Вами библиотекой. Скорее всего внутри библиотеки есть какая-то доп. функция, не описанная Вами в проекте, которая позволяет посылать (или получать) пользовательские сообщения во время выполнения процесса распаковки.
Greek9000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с функциями при создании динамического массива в С++ серг Помощь студентам 2 14.12.2009 16:33
создание dll при старте приложения и удаление при завершении TyoshA Общие вопросы Delphi 7 13.07.2009 13:56
Работа программы при изменении Rom1k06 Microsoft Office Excel 8 18.01.2009 19:05
Курсовая работа БД при помоши Accsess в Delphi FoMurJIom Помощь студентам 1 08.12.2007 06:28