Code:
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Modal, "floating" input box. Only one way out, except 3-finger ' salute or pull plug - to write some text and press the Enter key.. '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ #COMPILE EXE #INCLUDE "WIN32API.INC" %ID_TEXT = 10 'Id for textbox GLOBAL oldTxtproc AS LONG 'for address of original textbox procedure DECLARE CALLBACK FUNCTION DlgProc DECLARE CALLBACK FUNCTION TextWndProc '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Create dialog and controls, etc '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ FUNCTION PBMAIN LOCAL hDlg AS LONG, hEdit AS LONG DIALOG NEW 0, "Programmer's logic:", , , 120, 46, %WS_CAPTION, 0 TO hDlg SetWindowPos hDlg, %HWND_TOPMOST, 0,0,0,0, %SWP_NOMOVE OR %SWP_NOSIZE 'Set dialog as TopMost CONTROL ADD LABEL, hDlg, -1, "Press Enter to Exit:", 2, 2, 114, 10 CONTROL ADD TEXTBOX, hDlg, %ID_TEXT, "", 2, 12, 116, 32, %WS_CHILD OR %ES_MULTILINE OR _ %WS_VSCROLL, %WS_EX_CLIENTEDGE CALL DlgProc CONTROL HANDLE hDlg, %ID_TEXT TO hEdit oldTxtproc = SetWindowLong(hEdit, %GWL_WNDPROC, CODEPTR(TextWndProc)) 'Subclass Edit control SetFocus hEdit 'Give textbox focus DIALOG SHOW MODAL hDlg CALL DlgProc 'Modal is okay here IF oldTxtproc THEN SetWindowLong hEdit, %GWL_WNDPROC, oldTxtproc 'Restore from subclass at exit END FUNCTION '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Main dialog's message handler '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ CALLBACK FUNCTION DlgProc SELECT CASE CBMSG CASE %WM_COMMAND IF CBCTL = %WM_USER + 1 AND CBCTLMSG = %BN_CLICKED THEN DIALOG END CBHNDL END SELECT END FUNCTION '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Textbox's subclassed message handler '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ CALLBACK FUNCTION TextWndProc SELECT CASE CBMSG CASE %WM_KEYDOWN 'Trap keyboard input here IF CBWPARAM = %VK_RETURN THEN 'If Enter key was pressed LOCAL txt AS STRING CONTROL GET TEXT GetParent(CBHNDL), %ID_TEXT TO txt 'Get Text SetWindowPos GetParent(CBHNDL), _ %HWND_NOTOPMOST, 0,0,0,0, %SWP_NOMOVE OR %SWP_NOSIZE 'Remove TopMost IF LEN(TRIM$(txt)) = 0 THEN MSGBOX "Please enter your secret code!", %MB_OK, "CIA message" 'Whatever.. SetWindowPos GetParent(CBHNDL), _ %HWND_TOPMOST, 0,0,0,0, %SWP_NOMOVE OR %SWP_NOSIZE 'Set TopMost again SetFocus CBHNDL 'Set focus back to textbox EXIT FUNCTION 'Cancel process ELSE MSGBOX "You wrote: " & txt, %MB_OK, "OKAY!" 'Show what user entered END IF 'and close the program, if you like.. SendMessage GetParent(CBHNDL), %WM_COMMAND, MAKLNG(%WM_USER + 1, %BN_CLICKED), CBHNDL FUNCTION = 0 : EXIT FUNCTION END IF END SELECT FUNCTION = CallWindowProc(oldTxtproc, CBHNDL, CBMSG, CBWPARAM, CBLPARAM) END FUNCTION
check code above to make it act like you want..

------------------
[This message has been edited by Borje Hagsten (edited February 28, 2001).]
Leave a comment: