Peggy Posted November 19, 2014 Share Posted November 19, 2014 (edited) I want to create simple picture viewer (use Direction keys (left right) to next image), but can't run. What happen with this program?!!! Thanks everyone!!!! expandcollapse popup#include <GUIConstants.au3> Dim $Pick[5], $pics = 4 $Form1 = GUICreate("NextImage", 414, 305, 246, 194) $Pick[1]= GUICtrlCreatePic(@ScriptDir&"\pic\Desert.jpg", 8, 8, 393, 233) $Pick[2]= GUICtrlCreatePic(@ScriptDir&"\pic\Jellyfish.jpg", 8, 8, 393, 233) GUICtrlSetState( -1, $GUI_HIDE) $Pick[3]= GUICtrlCreatePic(@ScriptDir&"\pic\Tulips.jpg", 8, 8, 393, 233) GUICtrlSetState( -1, $GUI_HIDE) $Pick[4]= GUICtrlCreatePic(@ScriptDir&"\pic\Lighthouse.jpg", 8, 8, 393, 233) GUICtrlSetState( -1, $GUI_HIDE) $notice = GUICtrlCreateLabel("Picture #1", 20, 258, 100, 30) GUICtrlSetFont( -1, 15, 700) $Back= GUICtrlCreateButton("Back", 160, 256, 97, 41) $Next = GUICtrlCreateButton("Next", 264, 256, 97, 41) HotKeySet("{RIGHT}" , "RIGHT()") HotKeySet("{LEFT}" , "LEFT()") GUISetState(@SW_SHOW) While 1 $msg = GuiGetMsg() Select Case $msg = -3 ExitLoop Case $msg = $Back $set = -1 get_pic($set) Case $msg = $Next $set = 1 get_pic($set) Case HotKeySet("{down}") $set = -1 get_pic($set) Case Else EndSelect WEnd Exit Func get_pic($t) For $x = 1 to $pics $State = GUICtrlGetState($pick[$x]) If $State = 80 Then If $x = 1 And $t = -1 Then Return If $x = $pics And $t = 1 Then Return Guictrlsetstate($Pick[$x], $GUI_HIDE) Guictrlsetstate($Pick[$x + $set], $GUI_SHOW) GUICtrlSetData($notice, "Picture #" & $x + $set) Return EndIf Next EndFunc Func LEFT() $set = -1 get_pic($set) EndFunc Func RIGHT() $set = 1 get_pic($set) EndFunc Edited November 19, 2014 by peggy Link to comment Share on other sites More sharing options...
orbs Posted November 19, 2014 Share Posted November 19, 2014 hello peggy, welcome to AutoIt and to the forum! What happen with this program? you tell us. what exactly does not work? do you get any error messages? have you checked @error or the return values of your function calls? but that's for next time. for now, your issues are: 1) syntax of HotKeySet() - the name of the function needs not the brackets. like this: HotKeySet("{RIGHT}" , "RIGHT") HotKeySet("{LEFT}" , "LEFT") 2) the variable $set is used globally, but is not declared as such, so any function treats it as a different variable. add this at the top of your script: Global $set you may have other issues as well, but start by fixing these and see how it goes. Xandy 1 Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration - literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff Link to comment Share on other sites More sharing options...
Peggy Posted November 19, 2014 Author Share Posted November 19, 2014 Thank you ,orbs!!! I tried to modify hothey and plus $ set at the top of my script, when I use right key is OK,but use left key,this program can't run. Thank you for your help! My code right know is: expandcollapse popup#include <GUIConstants.au3> Dim $Pick[5], $pics = 4 Global $set $Form1 = GUICreate("NextImage", 414, 305, 246, 194) $Pick[1]= GUICtrlCreatePic(@ScriptDir&"\pic\Desert.jpg", 8, 8, 393, 233) $Pick[2]= GUICtrlCreatePic(@ScriptDir&"\pic\Jellyfish.jpg", 8, 8, 393, 233) GUICtrlSetState( -1, $GUI_HIDE) $Pick[3]= GUICtrlCreatePic(@ScriptDir&"\pic\Tulips.jpg", 8, 8, 393, 233) GUICtrlSetState( -1, $GUI_HIDE) $Pick[4]= GUICtrlCreatePic(@ScriptDir&"\pic\Lighthouse.jpg", 8, 8, 393, 233) GUICtrlSetState( -1, $GUI_HIDE) $notice = GUICtrlCreateLabel("Picture #1", 20, 258, 100, 30) GUICtrlSetFont( -1, 15, 700) $Back= GUICtrlCreateButton("Back", 160, 256, 97, 41) $Next = HotKeySet("{RIGHT}" , "RIGHT") GUISetState(@SW_SHOW) While 1 $msg = GuiGetMsg() Select Case $msg = -3 ExitLoop Case $msg = $Back $set = -1 get_pic($set) Case $msg = $Next $set = 1 get_pic($set) Case Else EndSelect WEnd Exit Func get_pic($t) For $x = 1 to $pics $State = GUICtrlGetState($pick[$x]) If $State = 80 Then If $x = 1 And $t = -1 Then Return If $x = $pics And $t = 1 Then Return Guictrlsetstate($Pick[$x], $GUI_HIDE) Guictrlsetstate($Pick[$x + $set], $GUI_SHOW) GUICtrlSetData($notice, "Picture #" & $x + $set) Return EndIf Next EndFunc Func LEFT() MsgBox(1,'title',$Back) $msg = $Back EndFunc Func RIGHT() $msg = $Next EndFunc Link to comment Share on other sites More sharing options...
jguinch Posted November 19, 2014 Share Posted November 19, 2014 (edited) It's not the solution for your issue, but you can use GUISetAccelerators instead of HotKeySet expandcollapse popup#include <File.au3> #include <GUIConstants.au3> Global $sPicPath = "C:\Windows\Web\Wallpaper\Architecture" Global $aPics = _FileListToArray($sPicPath, "*.jpg", 1, True) If NOT IsArray($aPics) Then Exit MsgBox(16, "Error", "No picture found in " & $sPicPath) Global $iCurrent = 1 GUICreate("Picture Viewer", 820, 700) GUISetBkColor(0) Global $ID_Pic = GUICtrlCreatePic($aPics[1], 10, 10, 800, 600) Global $ID_Previous = GUICtrlCreateButton("Previous", 50, 620, 200, 30) Global $ID_Next = GUICtrlCreateButton("Next", 570, 620, 200, 30) GUICtrlSetFont($ID_Previous, 15, 700) GUICtrlSetFont($ID_Next, 15, 700) Local $aAccelKeys[2][2] = [["{LEFT}", $ID_Previous],["{RIGHT}", $ID_Next]] GUISetAccelerators($aAccelKeys) GUICtrlSetState($ID_Previous, $GUI_DISABLE) GUISetState() While 1 $msg = GUIGetMsg() Switch $msg Case -3 Exit Case $ID_Previous If $iCurrent > 1 Then _Previous() Case $ID_Next If $iCurrent < UBound($aPics) - 1 Then _Next() EndSwitch Sleep(10) WEnd Func _Previous() $iCurrent -= 1 If $iCurrent = 1 Then GUICtrlSetState($ID_Previous, $GUI_DISABLE) GUICtrlSetState($ID_Next, $GUI_ENABLE) GUICtrlSetImage($ID_Pic, $aPics[$iCurrent]) EndFunc Func _Next() $iCurrent += 1 If $iCurrent = UBound($aPics) - 1 Then GUICtrlSetState($ID_Next, $GUI_DISABLE) GUICtrlSetState($ID_Previous, $GUI_ENABLE) GUICtrlSetImage($ID_Pic, $aPics[$iCurrent]) EndFunc Oups, edited... Edited November 19, 2014 by jguinch msgladiator 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
orbs Posted November 19, 2014 Share Posted November 19, 2014 peggy, you messed-up a part of the code. you started with this: $Back= GUICtrlCreateButton("Back", 160, 256, 97, 41) $Next = GUICtrlCreateButton("Next", 264, 256, 97, 41) HotKeySet("{RIGHT}" , "RIGHT()") HotKeySet("{LEFT}" , "LEFT()") which i recommended to remove the brackets and change into this: $Back= GUICtrlCreateButton("Back", 160, 256, 97, 41) $Next = GUICtrlCreateButton("Next", 264, 256, 97, 41) HotKeySet("{RIGHT}" , "RIGHT") HotKeySet("{LEFT}" , "LEFT") but now you have this: $Back= GUICtrlCreateButton("Back", 160, 256, 97, 41) $Next = HotKeySet("{RIGHT}" , "RIGHT") Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration - literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now