WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Samples

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Detect Right Click on Control in WIL Dialog

 Keywords: Detect Right Click Right-Click Mouse Control WIL Dialog 

;============================================================
;
;
;    Detect Right Click on Control in WIL Dialog
;
;    Deana Falk 2010.07.02
;
;============================================================

#DefineSubRoutine InitDialogConstants()
   ;DialogprocOptions Constants
   MSG_INIT=0                ; The one-time initialization
   MSG_TIMER=1               ; Timer event
   MSG_BUTTONPUSHED=2        ; Pushbutton or Picturebutton
   MSG_RADIOPUSHED=3         ; Radiobutton clicked
   MSG_CHECKBOX=4            ; Checkbox clicked
   MSG_EDITBOX=5             ; Editbox or Multilinebox
   MSG_FILESELECT=6          ; Filelistbox
   MSG_ITEMSELECT=7          ; Itembox
   MSG_COMBOCHANGE=8         ; Combobox/Droplistbox
   MSG_CALENDAR=9            ; Calendar date change
   MSG_SPINNER=10            ; Spinner number change
   MSG_CLOSEVIA49=11         ; Close clicked (Enabled via DialogProcOptions 1002
   MSG_FILEBOXDOUBLECLICK=12 ; Get double-click message on a FileListBox
   MSG_ITEMBOXDOUBLECLICK=13 ; Get double-click message on an ItemBox
   MSG_COMEVENT=14           ; COMCONTROL Event notification from DialogObject (NOT DialogProcOptions)

   DPO_DISABLESTATE=1000     ; codes -1=GetSetting 0=EnableDialog 1=DisableDialog
   DPO_CHANGEBACKGROUND=1001 ; -1=Get Current otherise bitmap or color string
   DPO_CHANGESYSMENU=1002    ; -1=Get Current 0=none 1=close 2=close/min 3=close/max 4=close/min/max
   DPO_CHANGETITLE=1003      ; Set/Get Dialog Title - (-1 to get)
   DPO_GETCONTROLNAME=1004   ; Returns the name of the control associated with the number.


   ;DialogControlState Constants
   DCSTATE_SETFOCUS=1        ; Give Control Focus
   DCSTATE_QUERYSTYLE=2      ; Query control's style
   DCSTATE_ADDSTYLE=3        ; Add control style
   DCSTATE_REMOVESTYLE=4     ; Remove control style
   DCSTATE_GETFOCUS=5        ; Get control that has focus
   DCSTATE_MOVEMOUSEOVER=6   ; Move the mouse over the control

   DCSTYLE_DEFAULT=0         ; Set Default Style
   DCSTYLE_INVISIBLE=1       ; Set Control Invisible
   DCSTYLE_DISABLED=2        ; Set Control Disabled
   DCSTYLE_NOUSERDATA=4      ; Note: Setable via DialogControlState function ONLY SPINNER control only
   DCSTYLE_READONLY=8        ; Sets control to read-only (user cannot type in data) EDITBOX MULTILINEBOX SPINNER
   DCSTYLE_PASSWORD=16       ; Sets 'password mode' where only *'s are displayed EDITBOX
   DCSTYLE_DEFAULTBUTTON=32  ; Sets a button as the default button PUSHBUTTON PICTUREBUTTON
   DCSTYLE_DIGITSONLY=64     ; Set edit box to accept digits only EDITMOX MULTILINEBOX
   DCSTYLE_FLAT=128          ; Makes a 'flat' hyperlink-looking button PUSHBUTTON PICTUREBUTTON
   DCSTYLE_NOADJUST=256      ; Turns off auto-height adjustment  ITEMBOX FILELISTBOX
   DCSTYLE_TEXTCENTER=512    ; Center text in control VARYTEXT STATICTEXT
   DCSTYLE_TEXTRIGHT=1024    ; Flush-Right text in control VARYTEXT STATICTEXT
   DCSTYLE_NOSELCURLEFT=2048 ; No selection, cursor left EDITBOX MULTILINEBOX
   DCSTYLE_NOSELCURRIGHT=4096; No selection, cursor right EDITBOX MULTILINEBOX

   ;DialogControlSet / DialogControlGet Constants
   DC_CHECKBOX=1             ; CHECKBOX
   DC_RADIOBUTTON=2          ; RADIOBUTTON
   DC_EDITBOX=3              ; EDITBOX MULTILINEBOX
   DC_TITLE=4                ; PICTURE RADIOBUTTON CHECKBOX PICTUREBUTTON VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON
   DC_ITEMBOXCONTENTS=5      ; ITEMBOX FILELISTBOX DROPLISTBOX
   DC_ITEMBOXSELECT=6        ; ITEMBOX FILELISTBOX DROPLISTBOX
   DC_CALENDAR=7             ; CALENDAR
   DC_SPINNER=8              ; SPINNER
   DC_MULTITABSTOPS=9        ; MULTILINEBOX
   DC_ITEMSCROLLPOS=10       ; ITEMBOX FILELISTBOX
   DC_BACKGROUNDCOLOR=11     ; RADIOBUTTON CHECKBOX VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON ITEMBOX FILELISTBOX DROPLISTBOX SPINNER EDITBOX MULTILINEBOX
   DC_PICTUREBITMAP=12       ; PICTURE PICTUREBUTTON
   DC_TEXTCOLOR=13           ; RADIOBUTTON CHECKBOX VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON ITEMBOX FIELLISTBOX DROPLISTBOX SPINNER EDITBOX MULTILINEBOX
   DC_ITEMBOXADD=14          ; ITEMBOX FILELISTBOX DROPLISTBOX
   DC_ITEMBOXREMOVE=15       ; ITEMBOX FILELISTBOX DROPLISTBOX
   DC_RADIOVALUE=16          ; RADIOBUTTON


   ;DialogObject constants
   DLGOBJECT_ADDEVENT=1      ; Call dialog callback when the specified event occurs
   DLGOBJECT_STOPEVENT=2     ; Stop calling dialog callback when an event previously requested with
   DLGOBJECT_GETOBJECT=3     ; Return an object references to the specified control
   DLGOBJECT_GETPICTURE=4    ; Create and return an object reference to a picture object

   ;Return code constants
   RET_DO_CANCEL=0           ; Cancels dialog
   RET_DO_DEFAULT= -1        ; Continue with default processing for control
   RET_DO_NOT_EXIT= -2       ; Do not exit the dialog
   Return
#EndSubRoutine

#DefineSubRoutine MyDialogCallbackProc(MyDialog_Handle,MyDialog_Message,MyDialog_Name,MyDialog_EventInfo,rsvd)
InitDialogConstants()                                       ; Initialize Dialog Constants
   ON_EQUAL = @TRUE                                         ; Initialize variable ON_EQUAL
   Switch MyDialog_Message                                  ; Switch based on Dialog Message type
      Case MSG_INIT                                         ; Standard Initialization message
         DialogProcOptions(MyDialog_Handle,MSG_TIMER,100)
         Return(RET_DO_DEFAULT)

      Case MSG_TIMER
         clickstatus = MouseInfo(4)
         If clickstatus == 1
            controlnum = udfMouseOver(MyDialog_Handle, MyDialogNumControls)
            controlname = DialogProcOptions(MyDialog_Handle, DPO_GETCONTROLNAME, controlnum )
            ;Pause(controlnum,      controlname)
            ;Update VaryText Control
            DialogControlSet( MyDialog_Handle, "VaryText_1", DC_TITLE, 'Num: ' : controlnum: '| Name: ' : controlname )
            Switch @TRUE
            Case controlname == "PushButton_ONE"          ; ID "PushButton_ONE"  PushButton_ONE
              Pause('User Right Clicked On', 'Control Num: ' : controlnum: @LF : 'Control Name: ' : controlname)
              Return(RET_DO_DEFAULT)

            Case controlname == "PushButton_TWO"          ; ID "PushButton_TWO"  PushButton_TWO
              Pause('User Right Clicked On', 'Control Num: ' : controlnum: @LF : 'Control Name: ' : controlname)
              Return(RET_DO_DEFAULT)

            Case controlname == "PushButton_THREE"        ; ID "PushButton_THREE"  PushButton_THREE
              Pause('User Right Clicked On', 'Control Num: ' : controlnum: @LF : 'Control Name: ' : controlname)
              Return(RET_DO_DEFAULT)

            Case controlname == "PushButton_Cancel"       ; ID "PushButton_Cancel"  PushButton_Cancel
              Pause('User Right Clicked On', 'Control Num: ' : controlnum: @LF : 'Control Name: ' : controlname)
              Return(RET_DO_DEFAULT)
            EndSwitch
         EndIf
         Return(RET_DO_NOT_EXIT)

   EndSwitch                                                ; MyDialog_Message
   Return(RET_DO_DEFAULT)
#EndSubRoutine                                                ; End of Dialog Callback MyDialogCallbackProc




#DefineFunction udfMouseOver(hDlg, CtrlCnt)
   User32 = StrCat(DirWindows(1), 'User32.dll')
   For Cnt = 1 To CtrlCnt
      hCtrl = DllCall(User32, long:"GetDlgItem", long:hDlg, long:Cnt+99)
      If udfctrlfrompt(hCtrl)!=0 Then Return Cnt
   Next
   Return 0
#EndFunction   ;udfMouseOver

#DefineFunction udfctrlfrompt(hCtrl)
   RECT = BinaryAlloc(16)
   ; Fill buffer with control coordinates and get offfsets of initial point.
   DllCall(StrCat(DirWindows(1), "User32.DLL"), long:"GetWindowRect", long:hCtrl, lpbinary:RECT)
   XX = BinaryPeek4(RECT, 0)
   YY = BinaryPeek4(RECT, 4)

   ; Is the mouse over the control?
   Coords = MouseInfo(3)                  ; Mouse screen coordinates in pixels
   mX  = ItemExtract(1, Coords, ' ')
   mY  = ItemExtract(2, Coords, ' ')
   If !DllCall(StrCat(DirWindows(1), "User32.DLL"), long:"PtInRect", lpbinary:RECT, long:mX, long:mY) Then Rtn = @FALSE
   Else Rtn = StrCat(mX-XX, @TAB, mY-YY)    ; Convert mouse coords to client coords.
   BinaryFree(RECT)
   Return Rtn
#EndFunction   ;udfCtrlFromPt



MyDialogFormat=`WWWDLGED,6.2`

MyDialogCaption=`Right-Click Capture Sample`
MyDialogX=191
MyDialogY=042
MyDialogWidth=230
MyDialogHeight=111
MyDialogNumControls=006
MyDialogProcedure=`MyDialogCallbackProc`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,DEFAULT`
MyDialogConfig=0

MyDialog001=`033,045,036,012,PUSHBUTTON,"PushButton_ONE",DEFAULT,"ONE",1,10,32,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`085,045,036,012,PUSHBUTTON,"PushButton_TWO",DEFAULT,"TWO",2,20,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog003=`135,045,036,012,PUSHBUTTON,"PushButton_THREE",DEFAULT,"THREE",3,30,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog004=`071,081,064,012,PUSHBUTTON,"PushButton_Cancel",DEFAULT,"Cancel",0,40,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog005=`075,023,142,012,VARYTEXT,"VaryText_1",vtVariable1,"",DEFAULT,50,DEFAULT,"Microsoft Sans Serif|6656|40|34","0|0|0",DEFAULT`
MyDialog006=`007,023,074,012,STATICTEXT,"StaticText_1",DEFAULT,"Right-clicked on Button:",DEFAULT,60,DEFAULT,"Microsoft Sans Serif|6656|40|34","0|0|0",DEFAULT`

ButtonPushed=Dialog("MyDialog")

Article ID:   W17739
Filename:   Detect Right Click on Control in WIL Dialog.txt
File Created: 2010:07:02:08:42:42
Last Updated: 2010:07:02:08:42:42