Sign in to follow this  
Followers 0
ChrisL

Slider question

4 posts in this topic

#1 ·  Posted (edited)

In the below script I have a slider, when you change the position of the slider it updates a label to show you a text representation of the slider value but only once you release the mouse.

Is there a way to update the text value live as you slide the slider?

Thanks

(uses LazyCats captdll.dll http://www.autoitscript.com/forum/index.php?showtopic=8377 )

Edit* Who broke the Autoit code tags then??

#include <GuiConstants.au3>

;only allow 1 running copy
if _Singleton("MultiScreenDump3",1) = 0 Then
    MsgBox(262144, "Error", "Screen Capture is already running")
    Exit
EndIf


;install Dll
FileInstall("captdll.dll", @TempDir & "\captdll.dll", 1)

;set initial global settings
Global $count = 1, $dest = @ScriptDir, $quality = "100", $ext = "JPG" , $useButtonGui = 1

;instructions for user
MsgBox(262144, "Screen Capture", "Press ""F1"" to change settings at any time" & @CRLF & _
        "Press ""PrintScreen"" to capture whole screen" & @CRLF & _
        "Press ""Alt"" + ""Printscreen"" to capture active window" & @CRLF & _
        "Press ""escape"" to quit")
;build the button Gui       
$buttonGui = GuiCreate("ScreenButtons", 120, 120,@DesktopWidth -170, @desktopheight -210 , $WS_POPUP, $WS_EX_TOPMOST)
$button1 = GuiCtrlCreateButton ("Screen",0,0,60,60)
$button2 = GuiCtrlCreateButton ("Active",61,0,60,60)
$button3 = GuiCtrlCreateButton ("Setup",0,61,60,60)
$button4 = GuiCtrlCreateButton ("Quit",61,61,60,60)
GuiSetState(@SW_Hide,$buttonGui)

;bring up settings dialogue and activate hotkeys
Settings()


While 1
    If $usebuttonGui = 1 then ButtonGui()
    Sleep(100)
WEnd

Func Settings()
    
    HotKeySet("{PRINTSCREEN}", "Capture")
    HotKeySet("!{PRINTSCREEN}", "AreaCapture")
    HotKeySet("{ESC}", "Quit")
    HotKeySet("{F1}", "Settings")
    
    $main = GUICreate("Screen capture settings", 392, 178, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS), $WS_EX_TOPMOST)
    $outputLabel = GUICtrlCreateLabel("Output Directory", 10, 15, 180, 20)
    $OutputDir = GUICtrlCreateInput("", 10, 40, 290, 25)
    GUICtrlSetData(-1, $dest)
    $Browse = GUICtrlCreateButton("Browse", 320, 40, 60, 25)
    $Combo = GUICtrlCreateCombo("JPG", 20, 75, 80, 61)
    GUICtrlSetData(-1, "BMP", $ext)
    
    $QualitySlide = GUICtrlCreateSlider(10, 100, 365, 30)
    GUICtrlSetLimit($QualitySlide, 100, 1)
    GUICtrlSetData($QualitySlide, $quality)
    
    If $ext = "BMP" then GuiCtrlSetState ($QualitySlide, $GUI_Disable)
    
    $SliderLabel = GUICtrlCreateLabel("Quality " & $quality, 300, 80, 120, 20)
    
    $OSButtons = GUICtrlCreateCheckbox ("Use on screen capture buttons", 20,140)
    If $useButtonGui = 1 then GuiCtrlSetState ($OSButtons, $GUI_CHECKED)
    
    $done = GUICtrlCreateButton ("Continue",260,140,120,25)
    
    GUISetState()
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE
                $dest = GUICtrlRead($OutputDir)
                If StringRight($dest, 1) = "\" Then $dest = StringTrimRight($dest, 1)
                If Not FileExists ($dest) then DirCreate ($dest)
                $quality = GUICtrlRead($QualitySlide)
                $ext = GUICtrlRead($Combo)
                If Bitand (GUICtrlRead ($OSButtons), $GUI_Checked) Then 
                    $useButtonGui = 1
                Else 
                    $useButtonGui = 0
                    Endif
                GUIDelete($main)
                Exitloop
            Case $msg = $done
                $dest = GUICtrlRead($OutputDir)
                If StringRight($dest, 1) = "\" Then $dest = StringTrimRight($dest, 1)
                If Not FileExists ($dest) then DirCreate ($dest)
                $quality = GUICtrlRead($QualitySlide)
                $ext = GUICtrlRead($Combo)
                If Bitand (GUICtrlRead ($OSButtons), $GUI_Checked) Then 
                    $useButtonGui = 1
                Else 
                    $useButtonGui = 0
                    Endif
                GUIDelete($main)
                Exitloop
            Case $msg = $Browse
                WinSetOnTop($main,"",0)
                GuiSetState (@SW_Disable, $main)
                $dest = FileSelectFolder("Select a destination", "", 1)
                If $dest = "" then $dest = @scriptDir
                GUICtrlSetData($OutputDir, $dest)
                GuiSetState (@SW_Enable, $main)
                WinSetOnTop($main,"",1)
            Case $msg = $Combo
                If GUICtrlRead($Combo) = "BMP" Then
                    GUICtrlSetState($QualitySlide, $GUI_Disable)
                    GUICtrlSetData($SliderLabel, "Quality N/A")
                    $quality = "-1"
                    $ext = "BMP"
                Else
                    GUICtrlSetState($QualitySlide, $GUI_Enable)
                    $quality = GUICtrlRead($QualitySlide)
                    GUICtrlSetData($SliderLabel, "Quality " & $quality)
                EndIf
                
            Case $msg = $QualitySlide
                $quality = GUICtrlRead($QualitySlide)
                GUICtrlSetData($SliderLabel, "Quality " & $quality)
                $ext = "JPG"
                
            Case Else
            ;;;
        EndSelect
    WEnd
;Exit
EndFunc  ;==>Settings

Func ButtonGui()

GuiSetState(@SW_Show,$buttonGui)

While 1
    $msg = GuiGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
        ExitLoop
    Case $msg = $Button1
        
        Capture()
        
    Case $msg = $Button2
        
        AreaCapture()
        Sleep (100)
        
    Case $msg = $Button3
        GuiSetState(@SW_Hide,$buttonGui)
        Send ("{F1}")
        ExitLoop
    Case $msg = $Button4
        Send ("{ESC}")
    Case Else
        If not BitAnd (WinGetState ($buttonGui),8) then WinSetOnTop ($buttonGui,"",1)
    ;;;
    EndSelect
WEnd
EndFunc


Func Capture()
    If $useButtonGui = 1 then
        WinSetState ($buttonGui,"",@SW_MINIMIZE)
        GuiSetState (@SW_HIDE, $buttonGui)
        Endif
        
    If FileExists($dest & "\image_" & $count & "." & $ext) <> 0 Then
        Do
            $count += 1
        Until FileExists($dest & "\image_" & $count & "." & $ext) = 0
    EndIf
    
    DllCall(@TempDir & "\captdll.dll", "int", "CaptureScreen", "str", $dest & "\image_" & $count & "." & $ext, "int", $quality)
    
    $count += 1
    
    If $useButtonGui = 1 then 
        Sleep (100)
        GuiSetState (@SW_SHOW, $buttonGui)
        WinSetState ($buttonGui,"",@SW_Restore)
        Endif
        
EndFunc  ;==>Capture

Func AreaCapture()
    
    If $useButtonGui = 1 then
        WinSetState ($buttonGui,"",@SW_MINIMIZE)
        GuiSetState (@SW_HIDE, $buttonGui)
        Endif
    
    If FileExists($dest & "\image_" & $count & "." & $ext) <> 0 Then
        Do
            $count += 1
        Until FileExists($dest & "\image_" & $count & "." & $ext) = 0
    EndIf
    
    $active = WinGetHandle ("")
    $cords = WinGetPos($active)
    
    If IsArray($cords) Then
        DllCall(@TempDir & "\captdll.dll", "int", "CaptureRegion", "str", $dest & "\image_" & $count & "." & $ext, "int", $cords[0], "int", $cords[1], "int", $cords[2], "int", $cords[3], "int", $quality)
        $count += 1
    EndIf
    
    If $useButtonGui = 1 then 
        Sleep (100)
        GuiSetState (@SW_SHOW, $buttonGui)
        WinSetState ($buttonGui,"",@SW_Restore)
        Endif
    
EndFunc  ;==>AreaCapture

Func _Singleton($occurenceName, $flag=0)
    Local $ERROR_ALREADY_EXISTS = 183
    $occurenceName=StringReplace($occurenceName,"\", ""); to avoid error
    
;   Local $handle = DllCall("kernel32.dll", "int", "CreateSemaphore", "int", 0, "long", 1, "long", 1, "str", $occurenceName)
    Local $handle = DllCall("kernel32.dll", "int", "CreateMutex", "int", 0, "long", 1, "str", $occurenceName)
    Local $lastError = DllCall("kernel32.dll", "int", "GetLastError")
    If $lastError[0] = $ERROR_ALREADY_EXISTS Then
        If $flag = 0 Then
            Exit -1
        Else
            SetError($lastError[0])
            Return 0
        EndIf
    EndIf

    Return  $handle[0]
EndFunc; _Singleton()

Func Quit()
    $ans = MsgBox(262145, "Screen Capture", "Files are saved in " & $dest & @CRLF & "Do you really want to quit?")
    If $ans = 1 Then Exit
EndFunc  ;==>Quit

Func OnAutoITExit()
    FileDelete(@TempDir & "\captdll.dll")
EndFunc  ;==>OnAutoITExit
Edited by ChrisL

Share this post


Link to post
Share on other sites



The label now updates when slider changes value, storing that value in

$quality_last, which will be used to check if the slider has changed next time.

#include <GuiConstants.au3>

;only allow 1 running copy
if _Singleton("MultiScreenDump3",1) = 0 Then
MsgBox(262144, "Error", "Screen Capture is already running")
Exit
EndIf


;install Dll
FileInstall("captdll.dll", @TempDir & "\captdll.dll", 1)

;set initial global settings
Global $count = 1, $dest = @ScriptDir, $quality = "100", $ext = "JPG" , $useButtonGui = 1
Dim $quality_last = $quality

;instructions for user
MsgBox(262144, "Screen Capture", "Press ""F1"" to change settings at any time" & @CRLF & _
"Press ""PrintScreen"" to capture whole screen" & @CRLF & _
"Press ""Alt"" + ""Printscreen"" to capture active window" & @CRLF & _
"Press ""escape"" to quit")
;build the button Gui
$buttonGui = GuiCreate("ScreenButtons", 120, 120,@DesktopWidth -170, @desktopheight -210 , $WS_POPUP, $WS_EX_TOPMOST)
$button1 = GuiCtrlCreateButton ("Screen",0,0,60,60)
$button2 = GuiCtrlCreateButton ("Active",61,0,60,60)
$button3 = GuiCtrlCreateButton ("Setup",0,61,60,60)
$button4 = GuiCtrlCreateButton ("Quit",61,61,60,60)
GuiSetState(@SW_Hide,$buttonGui)

;bring up settings dialogue and activate hotkeys
Settings()


While 1
If $usebuttonGui = 1 then ButtonGui()
Sleep(100)
WEnd

Func Settings()

HotKeySet("{PRINTSCREEN}", "Capture")
HotKeySet("!{PRINTSCREEN}", "AreaCapture")
HotKeySet("{ESC}", "Quit")
HotKeySet("{F1}", "Settings")

$main = GUICreate("Screen capture settings", 392, 178, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS), $WS_EX_TOPMOST)
$outputLabel = GUICtrlCreateLabel("Output Directory", 10, 15, 180, 20)
$OutputDir = GUICtrlCreateInput("", 10, 40, 290, 25)
GUICtrlSetData(-1, $dest)
$Browse = GUICtrlCreateButton("Browse", 320, 40, 60, 25)
$Combo = GUICtrlCreateCombo("JPG", 20, 75, 80, 61)
GUICtrlSetData(-1, "BMP", $ext)

$QualitySlide = GUICtrlCreateSlider(10, 100, 365, 30)
GUICtrlSetLimit($QualitySlide, 100, 1)
GUICtrlSetData($QualitySlide, $quality)

If $ext = "BMP" then GuiCtrlSetState ($QualitySlide, $GUI_Disable)

$SliderLabel = GUICtrlCreateLabel("Quality " & $quality, 300, 80, 120, 20)

$OSButtons = GUICtrlCreateCheckbox ("Use on screen capture buttons", 20,140)
If $useButtonGui = 1 then GuiCtrlSetState ($OSButtons, $GUI_CHECKED)

$done = GUICtrlCreateButton ("Continue",260,140,120,25)

GUISetState()
While 1
$msg = GUIGetMsg()
$curinfo = GUIGetCursorInfo()
Select
Case $msg = $GUI_EVENT_CLOSE
$dest = GUICtrlRead($OutputDir)
If StringRight($dest, 1) = "\" Then $dest = StringTrimRight($dest, 1)
If Not FileExists ($dest) then DirCreate ($dest)
$quality = GUICtrlRead($QualitySlide)
$ext = GUICtrlRead($Combo)
If Bitand (GUICtrlRead ($OSButtons), $GUI_Checked) Then
$useButtonGui = 1
Else
$useButtonGui = 0
Endif
GUIDelete($main)
Exitloop
Case $msg = $done
$dest = GUICtrlRead($OutputDir)
If StringRight($dest, 1) = "\" Then $dest = StringTrimRight($dest, 1)
If Not FileExists ($dest) then DirCreate ($dest)
$quality = GUICtrlRead($QualitySlide)
$ext = GUICtrlRead($Combo)
If Bitand (GUICtrlRead ($OSButtons), $GUI_Checked) Then
$useButtonGui = 1
Else
$useButtonGui = 0
Endif
GUIDelete($main)
Exitloop
Case $msg = $Browse
WinSetOnTop($main,"",0)
GuiSetState (@SW_Disable, $main)
$dest = FileSelectFolder("Select a destination", "", 1)
If $dest = "" then $dest = @scriptDir
GUICtrlSetData($OutputDir, $dest)
GuiSetState (@SW_Enable, $main)
WinSetOnTop($main,"",1)
Case $msg = $Combo
If GUICtrlRead($Combo) = "BMP" Then
GUICtrlSetState($QualitySlide, $GUI_Disable)
GUICtrlSetData($SliderLabel, "Quality N/A")
$quality = "-1"
$ext = "BMP"
Else
GUICtrlSetState($QualitySlide, $GUI_Enable)
$quality = GUICtrlRead($QualitySlide)
GUICtrlSetData($SliderLabel, "Quality " & $quality)
EndIf

Case GUICtrlRead($QualitySlide) <> $quality_last
$quality = GUICtrlRead($QualitySlide)
$quality_last = $quality
GUICtrlSetData($SliderLabel, "Quality " & $quality)
$ext = "JPG"

Case Else
;;;
EndSelect
WEnd
;Exit
EndFunc;==>Settings

Func ButtonGui()

GuiSetState(@SW_Show,$buttonGui)

While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button1

Capture()

Case $msg = $Button2

AreaCapture()
Sleep (100)

Case $msg = $Button3
GuiSetState(@SW_Hide,$buttonGui)
Send ("{F1}")
ExitLoop
Case $msg = $Button4
Send ("{ESC}")
Case Else
If not BitAnd (WinGetState ($buttonGui),8) then WinSetOnTop ($buttonGui,"",1)
;;;
EndSelect
WEnd
EndFunc


Func Capture()
If $useButtonGui = 1 then
WinSetState ($buttonGui,"",@SW_MINIMIZE)
GuiSetState (@SW_HIDE, $buttonGui)
Endif

If FileExists($dest & "\image_" & $count & "." & $ext) <> 0 Then
Do
$count += 1
Until FileExists($dest & "\image_" & $count & "." & $ext) = 0
EndIf

DllCall(@TempDir & "\captdll.dll", "int", "CaptureScreen", "str", $dest & "\image_" & $count & "." & $ext, "int", $quality)

$count += 1

If $useButtonGui = 1 then
Sleep (100)
GuiSetState (@SW_SHOW, $buttonGui)
WinSetState ($buttonGui,"",@SW_Restore)
Endif

EndFunc;==>Capture

Func AreaCapture()

If $useButtonGui = 1 then
WinSetState ($buttonGui,"",@SW_MINIMIZE)
GuiSetState (@SW_HIDE, $buttonGui)
Endif

If FileExists($dest & "\image_" & $count & "." & $ext) <> 0 Then
Do
$count += 1
Until FileExists($dest & "\image_" & $count & "." & $ext) = 0
EndIf

$active = WinGetHandle ("")
$cords = WinGetPos($active)

If IsArray($cords) Then
DllCall(@TempDir & "\captdll.dll", "int", "CaptureRegion", "str", $dest & "\image_" & $count & "." & $ext, "int", $cords[0], "int", $cords[1], "int", $cords[2], "int", $cords[3], "int", $quality)
$count += 1
EndIf

If $useButtonGui = 1 then
Sleep (100)
GuiSetState (@SW_SHOW, $buttonGui)
WinSetState ($buttonGui,"",@SW_Restore)
Endif

EndFunc;==>AreaCapture

Func _Singleton($occurenceName, $flag=0)
Local $ERROR_ALREADY_EXISTS = 183
$occurenceName=StringReplace($occurenceName,"\", ""); to avoid error

; Local $handle = DllCall("kernel32.dll", "int", "CreateSemaphore", "int", 0, "long", 1, "long", 1, "str", $occurenceName)
Local $handle = DllCall("kernel32.dll", "int", "CreateMutex", "int", 0, "long", 1, "str", $occurenceName)
Local $lastError = DllCall("kernel32.dll", "int", "GetLastError")
If $lastError[0] = $ERROR_ALREADY_EXISTS Then
If $flag = 0 Then
Exit -1
Else
SetError($lastError[0])
Return 0
EndIf
EndIf

Return $handle[0]
EndFunc; _Singleton()

Func Quit()
$ans = MsgBox(262145, "Screen Capture", "Files are saved in " & $dest & @CRLF & "Do you really want to quit?")
If $ans = 1 Then Exit
EndFunc;==>Quit

Func OnAutoITExit()
FileDelete(@TempDir & "\captdll.dll")
EndFunc;==>OnAutoITExit

Share this post


Link to post
Share on other sites

No problem ! :D

About those AutoIt-tags, it's most likely just Jon who's updating the forums...

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