I have a problem that from the title may sound a little bit confusing.
I have a listview interface with a context menu and as you know it's working only if GuiOnEventMode is enabled.
However, I need a script that can check whenever the user right click on a listview item and automatically enable GuiOnEventMode to make the function run when he click menu item.
I have some buttons next to listview that need to work while this is possible too.
It this even can be done?
Thank you and sorry for my bad english.
Hello everybody I need help with Opt("GUIOnEventMode",1)
I Normally use GUIGetMsg() but I want to learn how GUIOnEventMode works so I created a little test GUI the start button works fine and everything but the problem is that the stop button won't work down below is the code I made and I'm wondering if someone with experience can explain me and the rest o newbies how it works and also if can post the code already fixed
#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <WindowsConstants.au3> $Stop = False $X=1 $i = 0 Opt("GUIOnEventMode",1) #Region ### START Koda GUI section ### Form= Global $Form1 = GUICreate("Form1", 579, 212, 192, 124) Global $Button1 = GUICtrlCreateButton("Stop", 432, 136, 75, 25) Global $Button2 = GUICtrlCreateButton("Start", 96, 136, 75, 25) Global $Progress1 = GUICtrlCreateProgress(24, 40, 526, 49) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### GUISetOnEvent ($GUI_EVENT_CLOSE, "_exit",$Form1 ) GUICtrlSetOnEvent($Button1,"_Stop") GUICtrlSetOnEvent($Button2,"DecreaseAndIncrement") While 1 sleep(500) WEnd Func _Stop () $Stop = True EndFunc Func _exit () Exit EndFunc Func DecreaseAndIncrement () $Stop = False While $Stop = False $i+=$X ;ConsoleWrite($i & @CRLF) GUICtrlSetData($Progress1,$i) Sleep(80) if $i = 105 Then $X = -1 if $i = 0 Then $X = 1 WEnd EndFunc
here is the version that works with GUIGetMsg()
#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <WindowsConstants.au3> $Stop = False $X=1 $i = 0 #Region ### START Koda GUI section ### Form= Global $Form1 = GUICreate("Form1", 579, 212, 192, 124) Global $Button1 = GUICtrlCreateButton("Stop", 432, 136, 75, 25) Global $Button2 = GUICtrlCreateButton("Start", 96, 136, 75, 25) Global $Progress1 = GUICtrlCreateProgress(24, 40, 526, 49) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button2 DecreaseAndIncrement () case $Button1 $Stop = True EndSwitch WEnd Func DecreaseAndIncrement () $Stop = False While $Stop = False $i+=$X ;ConsoleWrite($i & @CRLF) GUICtrlSetData($Progress1,$i) Sleep(80) if $i = 105 Then $X = -1 if $i = 0 Then $X = 1 $nMsg2 = GUIGetMsg() Switch $nMsg2 Case $GUI_EVENT_CLOSE Exit case $Button1 $Stop = True EndSwitch WEnd EndFunc
I read about GUIOnEventMode while making my research and I found out that you can't use
$msg = GUIGetMsg()
at the same time. So far so good.
In my script I am spawning a few child GUIs and only for the main GUI I need interaction with buttons etc.
My question now is, is it possible to set those flags specifically for a single GUI? Can I somehow pass the handle to a GUI this option should affect? And for the main GUI I use GuiGetMsg?
I hope you can understand what I'm trying to do ..
Thanks for your help
here I am writing simple gui with text processing capabilities.
i have main gui, background picture, all buttons with labels over them 2 static buttons (1 present here)
Opt("GUIOnEventMode", 1) and includes
$main = GUICreate("Title", 961, 721); Main Window $bgpic = GUICtrlCreatePic(@WorkingDir & "\960x720.jpg", 0, 0, 960, 720); use background picture $quitBtn = GUICtrlCreateButton("Quit", 885, 685, 95, 40) GUICtrlSetOnEvent($quitBtn, "_exit"); assign quit button to function "exit" _GuiCtrlMakeTrans(-1, 1) $quitLabel = GUICtrlCreateLabel("Quit", 885, 685, 95, 40, BitOR($SS_CENTER, $BS_BOTTOM)) GUICtrlSetFont(-1, 14, 400, 0, "Tahoma") GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetColor(-1, 0x962129) GUISetState(@SW_SHOW)
then i have the code for creating buttons dynamically from information in file
Dim $Button[$NumberFromText] $startX = 48 $startY = 24 $fromLeft = 240 $bHeigh = 160 $bWidth = 50 Dim $1to4btn For $x = 0 To _Min(UBound($Button) - 1, 3) ; creates maximum 4 button, label $Button = GUICtrlCreateButton($x, $startX, $startY, $bHeigh, $bWidth); create buttons _GuiCtrlMakeTrans(-1, 1) ; transparency 255 Solid, 0 Transparent $serverLabel = GUICtrlCreateLabel(FileReadLine($configF, $SN), _ ; read 1st line and 5 below on each iteration $startX, $startY, $bHeigh, $bWidth, BitOR($SS_CENTER, $SS_CENTERIMAGE, $WS_EX_TRANSPARENT)); GUICtrlSetFont(-1, 14, 400, 0, "Tahoma"); set font and size GUICtrlSetColor($serverLabel, 0x04A111); set color of font GUICtrlSetBkColor($serverLabel, $GUI_BKCOLOR_TRANSPARENT); make label Background transparent $SN += 5; read 5 lines below $startX = $startX + $fromLeft $btnArray=_ArrayAdd($1to4btn, GUICtrlGetHandle($Button)) Next since buttons are created under the label $Button and I couldn't conacenate $Button[$i] , I created array and place handles into it and connected static buttons with
GUICtrlSetOnEvent($cancelBtn,"cancelFunc") and it worked
now i tried using handles to assign functions to buttons but it fails with GUICtrlSetOnEvent()
also tried GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "funcForFirstButton", $1to4btn)
if I assign without handle it works by clicking anywhere on MainGUI
While loop includes only sleep(10)
Window starts as inactive and return code 7
If i click dynamically created buttons, window loses focus . clicking anywhere else focuses window
this is _GuiCtrlMakeTrans function (found here on forums some time ago)
also created simple button on the same mainGUI and tried but didn't work
$try=GUICtrlCreateButton("TRY",250,150,100,35) GUICtrlSetOnEvent(-1,"FunctionOne") ; shows messagebox and write console
Semi experienced developer here.. I have never fully gotten the handle of using GUIOnEventMode, so i thought I would try it with a small simple program that I can paste some text into, then have it count down, and type it out for me.. I use this for when I am iLO into a server and I cant paste. For those of you not familiar with iLO, it stands for Integrated Lights Out. in short, it lets you remote into a server even if its having BIOS issue and wont start.. more details here: http://www8.hp.com/us/en/products/servers/ilo/
Anyway, when in iLO, you cant paste anything. Sometimes I need to copy bash scripting from my computer to the server, so I drop it in the little app, then use it to type out the script in the iLO screen. I have it so it does a countdown before sending the keys, and a delay between each key ( because iLO will sometimes hang up a little ).
The app I am trying to write will count down, then send whatever is in the edit box. I also have a stop button in case you want to stop the app, but that doesn't seem to do anything. I feel like I'm using GUIOnEventMode improperly. Can someone take a peek?
#include <GUIConstantsEx.au3> #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> ;Opt ("GUICoordMode", 2) Opt ("GUIResizeMode", 1) Opt ("GUIOnEventMode", 1) GUISetOnEvent ($GUI_EVENT_CLOSE, "SpecialEvents") GUISetOnEvent ($GUI_EVENT_MINIMIZE, "SpecialEvents") GUISetOnEvent ($GUI_EVENT_RESTORE, "SpecialEvents") $Form1 = GUICreate ("Sender", 615, 438, 192, 124) $edit = GUICtrlCreateEdit ("", 8, 128, 601, 305) $stop = GUICtrlCreateButton ("STOP", 496, 60, 100, 25) GUICtrlSetOnEvent (-1, "stop") $SEND = GUICtrlCreateButton ("SEND", 496, 88, 100, 25) GUICtrlSetOnEvent (-1, "sendit") $SecsToWaitB4Sending = GUICtrlCreateInput("10", 200, 32, 145, 25) GUICtrlCreateLabel ("Seconds to wait before sending", 40, 32, 153, 17) GUICtrlCreateLabel ("Delay between char sent in ms.", 40, 64, 152, 17) $MSBetweenLEtters = GUICtrlCreateInput ("100", 200, 64, 145, 25) GUISetState (@SW_SHOW) While 1 Sleep(5) WEnd Func stop() GUICtrlSetData($SEND, "SEND") EndFunc ;==>stop Func sendit() Local $h = Int(GUICtrlRead($SecsToWaitB4Sending)) GUICtrlSetData($SEND, "Waiting") For $i = 1 To Int(GUICtrlRead($SecsToWaitB4Sending)) GUICtrlSetData($SEND, $h) For $c = 1 To 100 Sleep(1) Next $h -= 1 Next GUICtrlSetData($SEND, "Typing") Opt("SendKeyDelay", Int(GUICtrlRead($MSBetweenLEtters))) Send(GUICtrlRead($edit), 1) GUICtrlSetData($SEND, "SEND") EndFunc ;==>sendit Func SpecialEvents() Select Case @GUI_CtrlId = $GUI_EVENT_CLOSE Exit Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE ; Case @GUI_CtrlId = $GUI_EVENT_RESTORE ; EndSelect EndFunc ;==>SpecialEvents
Thanks in advance!