Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Вставка прогресс бара в функцию

Ответить
Настройки темы
Вставка прогресс бара в функцию

Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


Имеется функция и в нее нужно вставить прогресс бар, и что бы действительно отображал процесс копирования
GUI построен так
Код: Выделить весь код
$progress = GUICtrlCreateProgress(10,300,260,50)
Код: Выделить весь код
Func Restore_Proc()
    DirCopy(GUICtrlRead($A1), GUICtrlRead($A2), 1)
    Run("Regedit.exe /s " & GUICtrlRead($A1) & "\key.reg")
EndFunc
Всю программу я не стал выкладывать, т.к. она объемная...

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 22:55, 03-06-2009

 

Новый участник


Сообщения: 36
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот похожая функция, бнемного облегченная, с одним прогрессбаром.
_FileCopyEx($Source, $Dest)

Одно плохо, процесс копирования нельзя отменить. Уважаемые знатоки, подскажите, как добавить клавишу отмены копирования.
С правкой тела функций разумеется.
Спасибо.


Func _FileCopyEx($sSource, $sDest)
If Not FileExists($sSource) Then Return SetError(1)
ProgressOn("Идет копирование","","",@DesktopWidth-320,@DesktopHeight-181,2)
Local $hCopyProgressRoutine = DllCallbackRegister("_CopyProgressRoutine", "int", _
"uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr")
DllCall("kernel32.dll", "int", "CopyFileExA", _
"str", $sSource, _
"str", $sDest, _
"ptr", DllCallbackGetPtr($hCopyProgressRoutine), _
"ptr", 0, _
"int", 0, _
"int", 0)
DllCallBackFree($hCopyProgressRoutine)
Sleep(1000)
ProgressOff()
EndFunc

Func _CopyProgressRoutine($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
Local $iPrecent = $TotalBytesTransferred/$TotalFileSize * 100
ProgressSet($iPrecent, "Выполнено " & Round($iPrecent, 1) & " %")
EndFunc

Отправлено: 22:57, 20-07-2009 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


11943499,
Куски кода заключайте в соот-вующие теги.

Цитата 11943499:
процесс копирования нельзя отменить »
Можно, если это конечно не тот же вопрос что был на руборде, тогда вы снова упускаете важные детали при постановке вопроса

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 23:35, 20-07-2009 | #22


Новый участник


Сообщения: 36
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Можно, если это конечно не тот же вопрос что был на руборде, тогда вы снова упускаете важные детали при постановке вопроса »
Постановка проста,
есть работающая функция копирования с прогрессбаром. Компильнул и пользуешься. Не хватает клавиши или кнопки отмены.
Использование горячей клавиши не идет, или запускающая ею функция не корректна для прерывания прогрессбара.
Умнее чем ProgressOff ( ) не накопал, нл оно не работает. Вот такие важные детали.

Отправлено: 00:54, 21-07-2009 | #23


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Цитата 11943499:
есть работающая функция копирования с прогрессбаром. Компильнул и пользуешься. Не хватает клавиши или кнопки отмены. »
мне это только кажется или на ру-борде этот вопрос в тот раз еще не решили?
опять же, идея все та же - нарисовать окно, в нем пргресс бар, прикрутить эту функцию и вставить кнопку отмена

Creat0R, а ты не делал пример на с отменой? что то было кажется, да найти не могу...

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 01:36, 21-07-2009 | #24


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата 11943499:
Постановка проста »
Ну посмотрим:

Код: Выделить весь код
#include <Misc.au3>

Global Const $PROGRESS_CONTINUE = 0
Global Const $PROGRESS_CANCEL   = 1
Global Const $PROGRESS_STOP     = 2
Global Const $PROGRESS_QUIET    = 3

Global $hDll = DllOpen("User32.dll")

_FileCopyEx("E:\Downloads\Some big file.avi", "C:\Some big file.avi")

Func _FileCopyEx($sSource, $sDest)
    If Not FileExists($sSource) Then Return SetError(1)
    ProgressOn("_FileCopyEx() Demo", "Копирование файла: " & StringRegExpReplace($sSource, "^.*\\", ""))

    Local $hCopyProgressRoutine = DllCallbackRegister("_CopyProgressRoutine", "int", _
        "uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr")

    DllCall("Kernel32.dll", "int", "CopyFileExA", _
        "str", $sSource, _
        "str", $sDest, _
        "ptr", DllCallbackGetPtr($hCopyProgressRoutine), _
        "ptr", 0, _
        "int", 0, _
        "int", 0)

    DllCallBackFree($hCopyProgressRoutine)

    Sleep(1000)
    ProgressOff()
EndFunc

Func _CopyProgressRoutine($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    Local $iPrecent = $TotalBytesTransferred/$TotalFileSize * 100
    ProgressSet($iPrecent, "Проценты: " & Round($iPrecent, 1) & " %")

    If _IsPressed("1B", $hDll) Then
        ProgressSet($iPrecent, "Проценты: " & Round($iPrecent, 1) & " % (Прервано пользователем)")
        Return $PROGRESS_CANCEL
    EndIf

    Return $PROGRESS_CONTINUE
EndFunc
Цитата 11943499:
Использование горячей клавиши не идет, или запускающая ею функция не корректна для прерывания прогрессбара. »
По HotKeySet да, оно не сработает, видимо это из за повторного использования механизма callbak (HotKeySet это тоже своего рода callback).

Цитата proxy:
ты не делал пример на с отменой? »
Только его направляющую часть

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:54, 21-07-2009 | #25


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Только его направляющую часть »
значит на досуге надо собраться нам и сделать ....а то чувствую это тема доооооооооооооооооолго тянется )

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 04:13, 21-07-2009 | #26


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата proxy:
значит на досуге надо собраться нам и сделать »
Что сделать? Я же выше привёл рабочий вариант. Кроме прочего, поискать можно и найти кучу подобных решении, у меня в базе скриптов как минимум штук 5 есть.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 04:36, 21-07-2009 | #27


Новый участник


Сообщения: 36
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Что сделать? Я же выше привёл рабочий вариант. »
Вариант рабочий, но на практике не очень. На ruborde я писал про копирование NTFS потоков, это было ошибочное заявление, там пробовал Hotkey-ем тормозить процесс, и вроде срабатывало на FAT32, но на самом деле та же история. Лучшее что происходит, так это зависание процесса копирования. Спасибо за проявленный интерес, когда гуру собираются вместе, как-то спокойно и светло на душе становится...

Отправлено: 08:19, 21-07-2009 | #28


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата 11943499:
Вариант рабочий, но на практике не очень. На ruborde я писал про копирование NTFS потоков, это было ошибочное заявление, там пробовал Hotkey-ем тормозить процесс, и вроде срабатывало на FAT32, но на самом деле та же история. »
Так в чём собственно непрактичность примера?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 08:47, 21-07-2009 | #29


Новый участник


Сообщения: 36
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Так в чём собственно непрактичность примера? »
да все хорошо, но не работает...
Процесс копирования виснет, а не закрывается.

Отправлено: 10:01, 21-07-2009 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Вставка прогресс бара в функцию

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] [PHP] Прогресс-бар (счетчик игроков) D_Master Вебмастеру 3 27-03-2009 18:41
[решено] Прогресс бар semiono AutoIt 17 24-03-2009 23:18
вставка jpg kozerogg Хочу все знать 2 04-10-2004 14:28
Подскажите функцию в C++ dimakus Программирование и базы данных 2 01-04-2004 14:57
Отключить функцию. Simich Непонятные проблемы с Железом 14 04-07-2003 16:14




 
Переход