Jump to content

Recommended Posts

Posted

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.

#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
Posted

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).

  • Moderators
Posted

ogrish,

Use an Accelerator key - they are only active while their related GUI is active. Look for the <<<<<<<< lines as usual: :mellow:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 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()

EndFunc

All clear? :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Posted

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! :mellow:

  • 2 weeks later...
  • 3 months later...

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...