Sign in to follow this  
Followers 0
actionhenk

Change appearance of progress bar

4 posts in this topic

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



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

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  
Followers 0