Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[UDF] CopyWithProgress.au3 by Phoenix_PL


Rekomendowane odpowiedzi

Opublikowano

Witam

 

Parę tygodni temu napisałem dość przydatną bibliotekę, korzystając z paru przykładów pewnego użytkownika (thanks 4 you, Steve Podhajecki).

 

Tak więc, nacieszcie oczy:

 

 

#cs
Przy tworzeniu kodu uzyto kodu stworzonego przez Steve'a Podhajecki'ego (_CopyWithProg)
#############################################################################################
#Funkcja:.................._CopyWithProgress #
#Przeznaczenie:............Kopiowanie plików z obsługą ProgressBara #
#Parametry: #
#$hProgress - Zmienna odpowiadająca za progressbar w programie #
#$pSource - Plik do skopiowania #
#$pDestiny - Miejsce do którego plik ma być skopiowany #
#Autor:....................Phoenix_PL #
#Stworzono dla:............http://autoit.MPCForum.pl oraz http://www.mpcforum.pl/ #
#############################################################################################
#ce

Func _CopyWithProgress($hProgress, $pSource, $pDestiny)
If $pSource = "" Then
MsgBox (16, "Błąd!", "Nie wybrałes plików do skopiowania!")
Return
ElseIf $pDestiny = "" Then
MsgBox (16, "Błąd!", "Nie wybrałes miejsca do skopiowania plików!")
Return
EndIf
Local $filesize = FileGetSize ($pSource)
If $filesize > 1024 Then
$filesize = $filesize / 1024
EndIf
$sourceopen = FileOpen ($pSource, 0)
If $sourceopen = -1 Then
MsgBox (16, "Błąd!", "Nie mozna otworzyć pliku!")
Return
ElseIf $sourceopen = 0 Then
Return SetError (2)
EndIf
$dest = FileOpen ($pDestiny, 10)
If $dest = 0 Then
FileClose ($dest)
Return SetError (3)
EndIf
Local $ret
Local $pos
While 1
$sordat = FileRead ($sourceopen, 1024)
If @error = -1 Then
$ret = FileWrite ($dest, ($sordat))
EndIf
$pos = $pos + (100/$filesize)
GUICtrlSetData ($hProgress, $pos)
$ret = FileWrite ($dest, ($sordat))
If $pos > 100 Then
ExitLoop
EndIf
WEnd
FileClose ($sourceopen)
FileClose ($dest)
EndFunc

#cs
#############################################################################################
#Funkcja:.................._CopyWithProgressWin #
#Przeznaczenie:............Kopiowanie plików z obsługą ProgressBara w osobnym oknie #
#Parametry: #
#$pSource - Plik do skopiowania #
#$pDestiny - Miejsce do którego plik ma być skopiowany #
#Autor:....................Phoenix_PL #
#Stworzono dla:............http://autoit.MPCForum.pl oraz http://www.mpcforum.pl/ #
#############################################################################################
#ce

Func _CopyWithProgressWin ($pSource, $pDestiny)
ProgressOn ("Kopiowanie plików...", "Kopiuję "&$pSource, "do "&$pDestiny)
If $pSource = "" Then
MsgBox (16, "Błąd!", "Nie wybrałes plików do skopiowania!")
Return
ElseIf $pDestiny = "" Then
MsgBox (16, "Błąd!", "Nie wybrałes miejsca do skopiowania plików!")
Return
EndIf
Local $filesize = FileGetSize ($pSource)
If $filesize > 1024 Then
$filesize = $filesize / 1024
EndIf
$sourceopen = FileOpen ($pSource, 0)
If $sourceopen = -1 Then
MsgBox (16, "Błąd!", "Nie mozna otworzyć pliku!")
Return
ElseIf $sourceopen = 0 Then
Return SetError (2)
EndIf
$dest = FileOpen ($pDestiny, 10)
If $dest = 0 Then
FileClose ($dest)
Return SetError (3)
EndIf
Local $ret
Local $pos
While 1
$sordat = FileRead ($sourceopen, 1024)
If @error = -1 Then
$ret = FileWrite ($dest, ($sordat))
EndIf
$pos = $pos + (100/$filesize)
ProgressSet ($pos)
$ret = FileWrite ($dest, ($sordat))
If $pos > 100 Then
ExitLoop
EndIf
WEnd
FileClose ($sourceopen)
FileClose ($dest)
ProgressOff ()
EndFunc

#cs
#############################################################################################
#Funkcja:.................._GetFileSize #
#Przeznaczenie:............Pokazywanie wielkosci pliku w róznych jednostkach #
#Parametry: #
#$pSource - Sciezka do pliku z którego będzie pobrana wielkosć #
#$iType - Jednostka w której będzie podana wielkosć, parametry: #
# 0 - Bajty ( #
# 1 - Kilobajty (KB) #
# 2 - Megabajty (MB) #
# 3 - Gigabajty (GB) #
#$iOutNum - Liczba wyswietlanych liczb po przecinku, domyslnie 1 #
#$iShowJed - 1/0 = Jednostka będzie (1024KB) /nie będzie (1024) pokazywana, domyslnie 0 #
#Dane wychodzące:..........Wielkosć pliku w danej jednostce oraz jednostka (np. 1024KB)	#
#Autor:....................Phoenix_PL #
#Stworzono dla:............http://autoit.MPCForum.pl oraz http://www.mpcforum.pl/ #
#############################################################################################
#ce

Func _GetFileSize ($pSource, $iType, $iOutNum = 1, $iShowJed = 0)
Local $size = FileGetSize ($pSource)
Local $tmp
Local $tmp2
Local $endsize
Local $endjed = "B"
If $iType = 1 Then
$size = $size / 1024
$tmp = StringSplit ($size, ".")
$tmp2 = StringRight ($tmp[2], $iOutNum)
$endsize = $tmp[1]&"."&$tmp2
If $iShowJed = 1 Then
$endjed = "KB"
EndIf
ElseIf $iType = 2 Then
$size = $size / 1024^2
$tmp = StringSplit ($size, ".")
$tmp2 = StringRight ($tmp[2], $iOutNum)
$endsize = $tmp[1]&"."&$tmp2
If $iShowJed = 1 Then
$endjed = "MB"
EndIf
ElseIf $iType = 3 Then
$size = $size / 1024^3
$tmp = StringSplit ($size, ".")
$tmp2 = StringRight ($tmp[2], $iOutNum)
$endsize = $tmp[1]&"."&$tmp2
If $iShowJed = 1 Then
$endjed = "GB"
EndIf
EndIf
If $endsize = "" Then
$endsize = $size
EndIf
If $iShowJed = 1 Then
$endsize = $endsize&$endjed
EndIf
Return $endsize
EndFunc

 

 

Skrypt ten służy do wizualizowania kopiowania pliku przy pomocy progressbara (coś jak w eksploratorze Windows).

Co jakiś czas dopiszę czy poprawię jakąś funkcję do tego, ale narazie wiedza mi się skończyła :>

 

Jeśli ktoś chciałby pomóc, niech mi wytłumaczy czym zastąpić FileOpen i FileRead, tak, żeby pasek wizualizował, powiedzmy kopiowanie z serwera, rozpakowywanie archiwum (Zip.au3), szyfrowanie pliku (Crypt.au3) czy dowolną inną operację?

 

Jeśli ktoś chce pobrać bibliotekę, to jest w załączniku, o TUTAJ:

CopyWithProgress.zip

 

Tak więc, jeśli macie pytania czy uwagi, piszcie

 

Dla zielonych: Żeby użyć tej biblioteki, trzeba najpierw skopiować bibliotekę do folderu Includes w folderze z AutoItem, a potem (najlepiej gdzieś na początku programu) zrobić takie cuś:

#include <CopyWithProgress.au3>

 

Potem można już używać funkcji z biblioteki. Pamiętajcie jednak, że nie będzie podpowiedzi składni dla tego typu UDF-a, więc radzę mieć te bibliotekę cały czas pod ręką :)

Miłej zabawy^^

846331404756772371599.jpeg
  • 2 miesiące temu...
  • 2 miesiące temu...
Opublikowano · Ukryte przez 4ggr35510n, 13 Sierpnia 2012 - Brak powodu
Ukryte przez 4ggr35510n, 13 Sierpnia 2012 - Brak powodu

.

BDrwh.png?1

Sygnaturka by FructoN.

FructoN jest tylko jeden.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...