Jump to content
Sign in to follow this  
actionhenk

Change appearance of progress bar

Recommended Posts

actionhenk

Hello,

I am new to auto it. Want to use it to create a login script. I found a cool script on this forum with a copy option, it uses the ProgressOn statement to show a progress bar but this bar has a label on top of it and also something that looks like a title bar of a window, how can I change the appearance of this progress bar ? I found ISN autoit studio with a nice progress bar, how can I have it look like the one in the ISN studio program (I dont see any reference to any forms of the ProgressOn progress bar) ?

The copy script im referring to is here:

#include <GUIConstants.au3>
#Include <File.au3>

Opt("GUIOnEventMode", 1)
Opt("TrayIconHide", 1)
GUICreate("DirCopy", 330,200,-1,-1 )
;BitOR($WS_OVERLAPPEDWINDOW))


SplashTextOn("Please Wait", "Creating Directories and Copying Files....", 400, 50, -1, -1, 0,"", 12)
Sleep(1000)
SplashOff()
_CopyDirWithProgress("d:\temp", "d:\cpy")
Func _CopyDirWithProgress($sOriginalDir, $sDestDir)
;$sOriginalDir and $sDestDir are quite selfexplanatory...
;This func returns:
; -1 in case of critical error, bad original or destination dir
; 0 if everything went all right
; >0 is the number of file not copied and it makes a log file
; if in the log appear as error message '0 file copied' it is a bug of some windows' copy command that does not redirect output...

If StringRight($sOriginalDir, 1) <> '\' Then $sOriginalDir = $sOriginalDir & '\'
If StringRight($sDestDir, 1) <> '\' Then $sDestDir = $sDestDir & '\'
If $sOriginalDir = $sDestDir Then Return -1

ProgressOn('Copying Files...', 'Making list of files...' & @LF & @LF, '', -1, -1, 18)
Local $aFileList = _FileSearch($sOriginalDir)
If $aFileList[0] = 0 Then
ProgressOff()
SetError(1)
Return -1
EndIf

If FileExists($sDestDir) Then
If Not StringInStr(FileGetAttrib($sDestDir), 'd') Then
ProgressOff()
SetError(2)
Return -1
EndIf
Else
DirCreate($sDestDir)
If Not FileExists($sDestDir) Then
ProgressOff()
SetError(2)
Return -1
EndIf
EndIf

Local $iDirSize, $iCopiedSize = 0, $fProgress = 0
Local $c, $FileName, $iOutPut = 0, $sLost = '', $sError
Local $Sl = StringLen($sOriginalDir)

_Quick_Sort($aFileList, 1, $aFileList[0])

$iDirSize = Int(DirGetSize($sOriginalDir) / 1024)

ProgressSet(Int($fProgress * 100), $aFileList[$c], 'Coping file:')
For $c = 1 To $aFileList[0]
$FileName = StringTrimLeft($aFileList[$c], $Sl)
ProgressSet(Int($fProgress * 100), $aFileList[$c] & ' -> '& $sDestDir & $FileName & @LF & 'Total KiB: ' & $iDirSize & @LF & 'Done KiB: ' & $iCopiedSize, 'Coping file: ' & Round($fProgress * 100, 2) & ' % ' & $c & '/' &$aFileList[0])

If StringInStr(FileGetAttrib($aFileList[$c]), 'd') Then
DirCreate($sDestDir & $FileName)
Else
If Not FileCopy($aFileList[$c], $sDestDir & $FileName, 1) Then
If Not FileCopy($aFileList[$c], $sDestDir & $FileName, 1) Then;Tries a second time
If RunWait(@ComSpec & ' /c copy /y "' & $aFileList[$c] & '" "' & $sDestDir & $FileName & '">' & @TempDir & '\o.tmp', '', @SW_HIDE)=1 Then;and a third time, but this time it takes the error message
$sError = FileReadLine(@TempDir & '\o.tmp',1)
$iOutPut = $iOutPut + 1
$sLost = $sLost & $aFileList[$c] & ' ' & $sError & @CRLF
EndIf
FileDelete(@TempDir & '\o.tmp')
EndIf
EndIf

FileSetAttrib($sDestDir & $FileName, "+A-RSH");<- Comment this line if you do not want attribs reset.

$iCopiedSize = $iCopiedSize + Int(FileGetSize($aFileList[$c]) / 1024)
$fProgress = $iCopiedSize / $iDirSize
EndIf
Next

ProgressOff()

If $sLost <> '' Then;tries to write the log somewhere.
If FileWrite($sDestDir & 'notcopied.txt',$sLost) = 0 Then
If FileWrite($sOriginalDir & 'notcopied.txt',$sLost) = 0 Then
FileWrite(@WorkingDir & '\notcopied.txt',$sLost)
EndIf
EndIf
EndIf

Return $iOutPut
EndFunc ;==>_CopyDirWithProgress

Func _FileSearch($sIstr, $bSF = 1)
; $bSF = 1 means looking in subfolders
; $sSF = 0 means looking only in the current folder.
; An array is returned with the full path of all files found. The pos [0] keeps the number of elements.
;Local $sIstr, $bSF, $sCriteria, $sBuffer, $iH, $iH2, $sCS, $sCF, $sCF2, $sCP, $sFP, $sOutPut = '', $aNull[1]
Local $sCriteria, $sBuffer, $iH, $iH2, $sCS, $sCF, $sCF2, $sCP, $sFP, $sOutPut = '', $aNull[1]
$sCP = StringLeft($sIstr, StringInStr($sIstr, '\', 0, -1))
If $sCP = '' Then $sCP = @WorkingDir & '\'
$sCriteria = StringTrimLeft($sIstr, StringInStr($sIstr, '\', 0, -1))
If $sCriteria = '' Then $sCriteria = '*.*'

;To begin we seek in the starting path.
$sCS = FileFindFirstFile($sCP & $sCriteria)
If $sCS <> - 1 Then
Do
$sCF = FileFindNextFile($sCS)
If @error Then
FileClose($sCS)
ExitLoop
EndIf
If $sCF = '.' Or $sCF = '..' Then ContinueLoop
$sOutPut = $sOutPut & $sCP & $sCF & @LF
Until 0
EndIf

;And after, if needed, in the rest of the folders.
If $bSF = 1 Then
$sBuffer = @CR & $sCP & '*' & @LF;The buffer is set for keeping the given path plus a *.
Do
$sCS = StringTrimLeft(StringLeft($sBuffer, StringInStr($sBuffer, @LF, 0, 1) - 1), 1);current search.
$sCP = StringLeft($sCS, StringInStr($sCS, '\', 0, -1));Current search path.
$iH = FileFindFirstFile($sCS)
If $iH <> - 1 Then
Do
$sCF = FileFindNextFile($iH)
If @error Then
FileClose($iH)
ExitLoop
EndIf
If $sCF = '.' Or $sCF = '..' Then ContinueLoop
If StringInStr(FileGetAttrib($sCP & $sCF), 'd') Then
$sBuffer = @CR & $sCP & $sCF & '\*' & @LF & $sBuffer;Every folder found is added in the begin of buffer
$sFP = $sCP & $sCF & '\'; for future searches
$iH2 = FileFindFirstFile($sFP & $sCriteria); and checked with the criteria.
If $iH2 <> - 1 Then
Do
$sCF2 = FileFindNextFile($iH2)
If @error Then
FileClose($iH2)
ExitLoop
EndIf
If $sCF2 = '.' Or $sCF2 = '..' Then ContinueLoop
$sOutPut = $sOutPut & $sFP & $sCF2 & @LF;Found items are put in the Output.
Until 0
EndIf
EndIf
Until 0
EndIf
$sBuffer = StringReplace($sBuffer, @CR & $sCS & @LF, '')
Until $sBuffer = ''
EndIf

If $sOutPut = '' Then
$aNull[0] = 0
Return $aNull
Else
Return StringSplit(StringTrimRight($sOutPut, 1), @LF)
EndIf
EndFunc ;==>_FileSearch

Func _Quick_Sort(ByRef $SortArray, $First, $Last);Larry's code
Dim $Low, $High
Dim $Temp, $List_Separator

$Low = $First
$High = $Last
$List_Separator = StringLen($SortArray[ ($First + $Last) / 2])
Do
While (StringLen($SortArray[$Low]) < $List_Separator)
$Low = $Low + 1
WEnd
While (StringLen($SortArray[$High]) > $List_Separator)
$High = $High - 1
WEnd
If ($Low <= $High) Then
$Temp = $SortArray[$Low]
$SortArray[$Low] = $SortArray[$High]
$SortArray[$High] = $Temp
$Low = $Low + 1
$High = $High - 1
EndIf
Until $Low > $High
If ($First < $High) Then _Quick_Sort($SortArray, $First, $High)
If ($Low < $Last) Then _Quick_Sort($SortArray, $Low, $Last)
EndFunc ;==>_Quick_Sort

Thanks!

 

Share this post


Link to post
Share on other sites
BrewManNH

Can you link to an example of what you want the progress bar and/or GUI to look like?


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites
BrewManNH

You do realize that there are several different types of progress bars on that page right? I asked for an example of what you wanted, not a listing of the different types that can be used.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×