ogrish Posted August 16, 2011 Share Posted August 16, 2011 Hi, I have a form with a button on it. When clicking the button, another form (form2) will appear (being always on top). Basically what I want is: when form2 is shown and the user press Ctrl + A, the current mouse position will be added to the text control of form2. Since I just want the behavior of Ctrl + A when form2 is shown on the screen. When the user close form2, I still want Ctrl + A as its default meaning, which is select all in most windows application. How to implement this? The following is my code. Thanks. expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 346, 214, 268, 504) $b = GUICtrlCreateButton("OK", 263, 183, 75, 25) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $b get_mouse_position() EndSwitch WEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Get mouse position ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Func get_mouse_position() Local $form = GUICreate("Get mouse position", 346, 214, 468, 204) Local $mouse_x = GUICtrlCreateLabel("Mouse X:", 8, 8, 65, 20) GUICtrlSetFont(-1, 12, 400, 0, "System") Local $mouse_y = GUICtrlCreateLabel("Mouse Y:", 169, 8, 66, 20) GUICtrlSetFont(-1, 12, 400, 0, "System") Local $edit = GUICtrlCreateEdit("", 8, 41, 329, 137) GUICtrlSetData(-1, "edit") Local $button_ok = GUICtrlCreateButton("OK", 263, 183, 75, 25) Local $Label1 = GUICtrlCreateLabel("Ctrl + A add mouse position to the upper text box.", 9, 187, 235, 17) Local $x = GUICtrlCreateLabel("x", 79, 10, 73, 17) Local $y = GUICtrlCreateLabel("y", 243, 10, 89, 17) GUISetState(@SW_SHOW) WinSetOnTop($form, "", 1) Local $nMsg While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $button_ok ExitLoop EndSwitch WEnd GUIDelete() EndFunc Link to comment Share on other sites More sharing options...
AdmiralAlkex Posted August 16, 2011 Share Posted August 16, 2011 Do you want to capture the keys only when "form2" have focus? Then you want to use accelerators (see GUISetAccelerators() in helpfile). A more hack'ish approach would be to enable the HotKey when you open the gui and disable it when it closes (see HotKeySet() in helpfile). .Some of my scripts: ShiftER, Codec-Control, Resolution switcher for HTC ShiftSome of my UDFs: SDL UDF, SetDefaultDllDirectories, Converting GDI+ Bitmap/Image to SDL Surface Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted August 16, 2011 Moderators Share Posted August 16, 2011 ogrish,Use an Accelerator key - they are only active while their related GUI is active. Look for the <<<<<<<< lines as usual: expandcollapse popup;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Get mouse position ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Func get_mouse_position() Local $form = GUICreate("Get mouse position", 346, 214, 468, 204) Local $mouse_x = GUICtrlCreateLabel("Mouse X:", 8, 8, 65, 20) GUICtrlSetFont(-1, 12, 400, 0, "System") Local $mouse_y = GUICtrlCreateLabel("Mouse Y:", 169, 8, 66, 20) GUICtrlSetFont(-1, 12, 400, 0, "System") Local $edit = GUICtrlCreateEdit("", 8, 41, 329, 137) GUICtrlSetData(-1, "edit") Local $button_ok = GUICtrlCreateButton("OK", 263, 183, 75, 25) Local $Label1 = GUICtrlCreateLabel("Ctrl + A add mouse position to the upper text box.", 9, 187, 235, 17) Local $x = GUICtrlCreateLabel("x", 79, 10, 73, 17) Local $y = GUICtrlCreateLabel("y", 243, 10, 89, 17) ; Create a dummy control for the accel key to action $hDummy = GUICtrlCreateDummy() ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< GUISetState(@SW_SHOW) WinSetOnTop($form, "", 1) ; Set accel key Ctrl+a ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Local $AccelKeys[1][2] = [["^a", $hDummy]] GUISetAccelerators($AccelKeys) Local $nMsg While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $button_ok ExitLoop ; Action the dummy when the accel key is pressed Case $hDummy ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Local $aMPos = MouseGetPos() GUICtrlSetData($x, $aMPos[0]) GUICtrlSetData($y, $aMPos[1]) EndSwitch WEnd ; Clear the accel key GUISetAccelerators(1) ; <<<<<<<<<<<<<<<<<<<<<<<< GUIDelete() EndFuncAll clear? M23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
ogrish Posted August 16, 2011 Author Share Posted August 16, 2011 Thanks Melba23 and AdmiralAlkex, you guys solved my problem. I never know the accelerator keys and the dummy control. Now I know them and my problem is solved. Thanks! Link to comment Share on other sites More sharing options...
H4CK3D Posted August 25, 2011 Share Posted August 25, 2011 Try: _IsPressed but that must be in the loop Link to comment Share on other sites More sharing options...
univer Posted December 13, 2011 Share Posted December 13, 2011 Thank you all! That's what I am looking for. 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