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

Dialog Editor version 6.X
plus
plus

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

Button Dialog With No Default Focus


Keywords:Multiline editbox edit box button dialog default focus

Question:

I need a single button dialog that doesn't have a default button specified. I don't want the dialog 
to be dismissed when the user presses the ENTER key on the keyboard. I want them to have to click 
on the button with their mouse. 

Answer:

This is a tough one. Our dialogs really want to have a default button specified. At first I considered having an invisible or disabled control have default focus, however, the Dialog function recognizes the controls are disabled and resets the default button for you. The only control in our dialogs that accepts and enter key is the MULTILINEBOX (Multiline Editbox) control. SoI decided to create that control, set its tab value to one and sets its coordinates to 0,0,0,0. That seemed to work.

;Here is the only trick I could come up with. It uses a MULTILINEBOX control 
;(with zero coordinates and a tab value of 1) to accept all enter keys.
MyDialogFormat=`WWWDLGED,6.1`

MyDialogCaption=`WIL Dialog 1`
MyDialogX=102
MyDialogY=106
MyDialogWidth=315
MyDialogHeight=192
MyDialogNumControls=002
MyDialogProcedure=`DEFAULT`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,DEFAULT`
MyDialogConfig=0

MyDialog001=`122,082,034,011,PUSHBUTTON,DEFAULT,"My Button",1,2,0,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`0,0,0,0,MULTILINEBOX,Hidden,"",DEFAULT,1,0,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("MyDialog")


Another Workaround:

Here is another workaround that uses a dynamic callback procedure to monitor for the return / enter key to be pressed.
;============================================================
;============================================================
;============================================================

#DefineSubRoutine ClickOnly(NoReturn_Handle,NoReturn_Message,NoReturn_ID,rsvd1,rsvd2)
   ;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 Intcontrol 49)
   MSG_FILEBOXDOUBLECLICK=12 ; Get double-click message on a FileListBox
   MSG_ITEMBOXDOUBLECLICK=13 ; Get double-click message on an ItemBox
   DPO_DISABLESTATE=1000     ; codes -1=GetSetting 0=EnableDialog 1=DisableDialog
   DPO_CHANGEBACKGROUND=1001 ; -1=GetSetting otherise bitmap or color string
   ;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
   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
   ;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


   switch NoReturn_Message
      case MSG_INIT
         DialogProcOptions(NoReturn_Handle,MSG_TIMER, 100)
         DialogProcOptions(NoReturn_Handle,MSG_BUTTONPUSHED,@TRUE)
         return(-1)

     case MSG_BUTTONPUSHED  ;ID 001

	  	   switch NoReturn_ID
				case 1  ; OK

				   ; From mouse? 
					; Note: this takes care of all cases except when
					; return key is pressed while mouse cursor is over 
					; OK buttton.
     	   		if  MouseInfo(0) == "OK"  
		  				return(-1)  ;  Exit dialog
					else
					  	
					   ; May cut down on processing by timer case?
						DialogControlState( NoReturn_Handle, 002, DCSTATE_SETFOCUS, 0)

						return(-2)  ; Do nothing.
 					endif
				case 2   ; Small
					; Gets return key pressed messages and does nothing.
					return -2     ; Do nothing.
		   endswitch
	  
		case MSG_TIMER
	       
	 		; Prevent the OK buttom from getting the input focus
			; and, therefore, the return key press message.
 		   if DialogControlState( NoReturn_Handle, 0, DCSTATE_GETFOCUS, 0) == 001
 
			   ; Change the focus to "small" unless OK has the focus 
				; because of a mouse button down.
				if (MouseInfo(4) != 4)  || (MouseInfo(0) != "OK")

					DialogControlState( NoReturn_Handle, 002, DCSTATE_SETFOCUS, 0)
				endif
			endif
			return -2
 
   endswitch       ; NoReturn_Message
   return(-1)      ;  Do default processing
#EndSubRoutine     ;End of Dialog Callback ClickOnly

;============================================================
;============================================================
;============================================================


bMouseClick = @False

NoReturnFormat=`WWWDLGED,6.1`

NoReturnCaption=`Try Pressing The Return Key`
NoReturnX=035
NoReturnY=105
NoReturnWidth=102
NoReturnHeight=051
NoReturnNumControls=002
NoReturnProcedure=`ClickOnly`
NoReturnFont=`DEFAULT`
NoReturnTextColor=`DEFAULT`
NoReturnBackground=`DEFAULT,DEFAULT`
NoReturnConfig=0

; OK button must not be first in tab order.
NoReturn001=`015,009,067,027,PUSHBUTTON,DEFAULT,"OK",1,2,0,DEFAULT,DEFAULT,DEFAULT`

; Small is the default button.
NoReturn002=`000,000,0,0,PUSHBUTTON,DEFAULT,"Small",2,1,160,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("NoReturn")

Article ID:   W16404
File Created: 2005:02:18:12:20:26
Last Updated: 2005:02:18:12:20:26