File "ContactBook.inc"
Path: /HotKeyMgr/inc/ContactBook.inc
File size: 23.36 KB
MIME-type: text/html
Charset: utf-8
' TODO:
' X- fix focus of OneNote (under 2nd visible window) e.g. when showing Domains List
' X- add label "Hit enter to create new contact" when user types new "Name, Surname"
'------------------------------------------------------------------------------
' ** Includes **
'------------------------------------------------------------------------------
#INCLUDE ONCE "WIN32API.INC"
#INCLUDE ONCE "INC\CLIPBOARDHTML.INC"
#INCLUDE ONCE "INC\UTF8.INC"
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Constants **
'------------------------------------------------------------------------------
%IDC_COMBOBOX1 = 1001
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Globals **
'------------------------------------------------------------------------------
GLOBAL OldCBBProc AS LONG
GLOBAL hComboEdit AS DWORD
GLOBAL contacts() AS STRING
GLOBAL emails() AS STRING
GLOBAL domains_a() AS STRING ' domain acronyms (RNA)
GLOBAL domains_c() AS STRING ' domain companies (Renault)
GLOBAL domains_e() AS STRING ' domain extensions (@renault.com)
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Functions / Subs **
'------------------------------------------------------------------------------
SUB AddContact(contact AS STRING, email AS STRING)
WritePrivateProfileString "contact_book", (contact), "mailto:"+email, INIFILE
END SUB
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
SUB AddDomain(acronym AS STRING, company AS STRING, mailext AS STRING)
LOCAL n AS LONG
n = UBOUND(domains_a) + 1
REDIM PRESERVE domains_a(n)
REDIM PRESERVE domains_c(n)
REDIM PRESERVE domains_e(n)
domains_a(n) = acronym
domains_c(n) = company
domains_e(n) = mailext
WritePrivateProfileString "domains", (acronym), company + mailext, INIFILE
END SUB
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
SUB PasteContact(hD AS DWORD, contact AS STRING, email AS STRING)
LOCAL i AS LONG
LOCAL e, r AS STRING
i = INSTR(email, "@")
e = MID$(email, i) ' extension
ARRAY SCAN domains_e(), = e, TO i : DECR i
e = ""
IF i >= 0 THEN
IF domains_a(i) <> "default" THEN e = domains_a(i) + "\"
END IF
r = "<a href='" + email + "'>"
r += "@" + e + TRIM$(RTRIM$(contact, ","))
r += "</a>"
ClipBoardHtmlSet hD, TRIM$(r)
DIALOG END hD, -1
END SUB
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** CallBacks **
'------------------------------------------------------------------------------
MACRO FLASH_DLG(ctlId)
' BEEP
CONTROL SET FOCUS CB.HNDL, ctlId
flashInfo.cbSize = SIZEOF(flashInfo)
flashInfo.hwnd = CB.HNDL
flashInfo.dwflags = %FLASHW_CAPTION
flashInfo.ucount = 2
flashInfo.dwTimeout = 100 ' flashing rate in ms
FlashWindowEx(flashInfo)
EXIT FUNCTION
END MACRO
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
TYPE FLASHWINDOWAPI
cbSize AS DWORD
hwnd AS DWORD
dwFlags AS DWORD
uCount AS DWORD
dwTimeout AS DWORD
END TYPE
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
CALLBACK FUNCTION ProcNewDomain()
LOCAL flashInfo AS FlashWindowAPI
SELECT CASE AS LONG CB.MSG
CASE %WM_INITDIALOG
' Initialization handler
CASE %WM_COMMAND
' Process control notifications
IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
IF CB.CTL = %IDCANCEL THEN
DIALOG END CB.HNDL, 0
ELSEIF CB.CTL = %IDOK THEN
LOCAL acronym, company, mailext AS STRING
CONTROL GET TEXT CB.HNDL, 201 TO acronym : acronym = TRIM$(acronym)
IF acronym = "" THEN
FLASH_DLG(201)
END IF
CONTROL GET TEXT CB.HNDL, 202 TO company : company = TRIM$(company)
IF company = "" THEN
FLASH_DLG(202)
END IF
CONTROL GET TEXT CB.HNDL, 203 TO mailext : mailext = TRIM$(mailext)
mailext = LTRIM$(mailext, "@")
IF INSTR(mailext, ".") <= 1 OR INSTR(mailext, ".") = LEN(mailext) THEN
FLASH_DLG(203)
END IF
IF LEFT$(mailext, 1) <> "@" THEN mailext = "@" + mailext
AddDomain acronym, company, mailext
DIALOG END CB.HNDL, (UBOUND(domains_a) + 1)
END IF
END IF
END SELECT
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
MACRO FOCUS_NEXT_CTL
KeyBd_Event(%VK_TAB, 0, 0, 0)
KeyBd_Event(%VK_TAB, 0, %KEYEVENTF_KEYUP, 0)
END MACRO
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
MACRO FOCUS_PREV_CTL
KeyBd_Event(%VK_SHIFT, 0, 0, 0)
KeyBd_Event(%VK_TAB, 0, 0, 0)
KeyBd_Event(%VK_TAB, 0, %KEYEVENTF_KEYUP, 0)
KeyBd_Event(%VK_SHIFT, 0, %KEYEVENTF_KEYUP, 0)
END MACRO
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
MACRO FOCUS_BUTTON (bid)
CONTROL SET FOCUS CB.HNDL, bid
IF bid = 103 THEN
FOCUS_NEXT_CTL
FOCUS_PREV_CTL
ELSE
FOCUS_PREV_CTL
FOCUS_NEXT_CTL
END IF
END MACRO
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
CALLBACK FUNCTION ProcDomainsList()
STATIC lbid AS LONG ' last button Id
LOCAL i AS LONG
SELECT CASE AS LONG CB.MSG
CASE %WM_INITDIALOG
' Initialization handler
FOCUS_BUTTON(103)
lbid = 103
CASE %WM_COMMAND
' Process control notifications
IF (CB.CTL - %WM_USER) = %VK_HOME THEN ' keyboard trap via accelerator table..
FOR i = lbid - 1 TO 103 STEP -1
KeyBd_Event(%VK_UP, 0, 0, 0)
KeyBd_Event(%VK_UP, 0, %KEYEVENTF_KEYUP, 0)
NEXT
EXIT FUNCTION
ELSEIF (CB.CTL - %WM_USER) = %VK_END THEN
FOR i = lbid + 1 TO 103 + UBOUND(domains_a) + 1
KeyBd_Event(%VK_DOWN, 0, 0, 0)
KeyBd_Event(%VK_DOWN, 0, %KEYEVENTF_KEYUP, 0)
NEXT
EXIT FUNCTION
ELSEIF (CB.CTL - %WM_USER) = %VK_PRIOR THEN ' PG-UP
FOR i = lbid - 1 TO MAX(lbid - 7, 103) STEP -1
KeyBd_Event(%VK_UP, 0, 0, 0)
KeyBd_Event(%VK_UP, 0, %KEYEVENTF_KEYUP, 0)
NEXT
EXIT FUNCTION
ELSEIF (CB.CTL - %WM_USER) = %VK_NEXT THEN ' PG-DOWN
FOR i = lbid + 1 TO MIN(103 + UBOUND(domains_a) + 1, lbid + 7)
KeyBd_Event(%VK_DOWN, 0, 0, 0)
KeyBd_Event(%VK_DOWN, 0, %KEYEVENTF_KEYUP, 0)
NEXT
EXIT FUNCTION
END IF
IF CB.CTLMSG = %BN_SETFOCUS THEN
lbid = CB.CTL
IF CB.CTL = %IDCANCEL THEN
FOCUS_BUTTON(103)
END IF
ELSEIF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
IF CB.CTL = %IDCANCEL THEN
DIALOG END CB.HNDL, 0
ELSE
DIALOG END CB.HNDL, CB.CTL - 103 + 1
END IF
END IF
END SELECT
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
CALLBACK FUNCTION ProcContactBook()
LOCAL hCombo AS DWORD
LOCAL ComboInfo AS COMBOBOXINFO
SELECT CASE AS LONG CB.MSG
CASE %WM_INITDIALOG
' Initialization handler
CONTROL HANDLE CB.HNDL, %IDC_COMBOBOX1 TO hCombo
ComboInfo.cbSize = SIZEOF(COMBOBOXINFO)
GETCOMBOBOXINFO(hCombo, BYVAL VARPTR(ComboInfo)) ' get data about combobox
hComboEdit = ComboInfo.hwndItem ' handle to edit control of combobox
OldCBBProc = SETWINDOWLONG(hComboEdit, %GWL_WNDPROC, CODEPTR(CBBProc)) ' subclass
CASE %WM_COMMAND
' Process control notifications
IF CB.CTL = %IDCANCEL THEN DIALOG END CB.HNDL, 0
END SELECT
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
MACRO UPDATE_HINT
IF nn = 0 THEN ' new contact -> display hints
IF INSTR(s, ",") > 0 THEN
CONTROL SET TEXT hDlg, 102, "Hit enter to create new contact"
ELSE
CONTROL SET TEXT hDlg, 102, "For a new contact: type ""Name, Surname"""
END IF
CONTROL SHOW STATE hDlg, 102, %SW_SHOW
ELSE ' existing contact(s) -> hide hint
CONTROL SHOW STATE hDlg, 102, %SW_HIDE
END IF
END MACRO
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
FUNCTION CBBProc(BYVAL hWnd AS LONG, BYVAL Msg AS LONG, _
BYVAL wParam AS LONG, BYVAL lParam AS LONG) AS LONG
LOCAL hDlg AS DWORD
LOCAL s, e AS STRING
LOCAL i, n, nn, k AS LONG
SELECT CASE Msg
CASE %WM_KEYUP
WINDOW GET PARENT hWnd TO hDlg : hDlg = GetParent(hDlg)
COMBOBOX GET COUNT hDlg, %IDC_COMBOBOX1 TO n : nn = n
IF wParam >= ASC("A") AND wParam <= ASC("Z") THEN ' Typing name...
CONTROL GET TEXT hDlg, %IDC_COMBOBOX1 TO s ' get search string
FOR i = n TO 1 STEP -1 ' search each entry
COMBOBOX GET TEXT hDlg, %IDC_COMBOBOX1, i TO e
IF INSTR(NoAccent(LCASE$(e)), _
NoAccent(LCASE$(s))) = 0 THEN
COMBOBOX DELETE hDlg, %IDC_COMBOBOX1, i : DECR nn ' restrict list
END IF
NEXT
UPDATE_HINT
ELSEIF wParam = 8 OR wParam = 46 THEN ' Backspace/Del keys
CONTROL GET TEXT hDlg, %IDC_COMBOBOX1 TO s ' get search string
FOR i = LBOUND(contacts) TO UBOUND(contacts) ' search initial contact book
IF INSTR(NoAccent(LCASE$(contacts(i))), _
NoAccent(LCASE$(s))) > 0 THEN
COMBOBOX FIND EXACT hDlg, %IDC_COMBOBOX1, 1, _
Utf8ToAnsi(contacts(i)) TO k
IF k = 0 THEN
COMBOBOX ADD hDlg, %IDC_COMBOBOX1, _ ' populate list
Utf8ToAnsi(contacts(i)) : INCR nn
END IF
END IF
NEXT
UPDATE_HINT
ELSEIF wParam = 36 THEN ' Home key
COMBOBOX SELECT hDlg, %IDC_COMBOBOX1, 1 ' select first entry
ELSEIF wParam = 35 THEN ' End key
COMBOBOX SELECT hDlg, %IDC_COMBOBOX1, n ' select last entry
ELSEIF wParam = 13 THEN ' Return key
CONTROL GET TEXT hDlg, %IDC_COMBOBOX1 TO s
IF s = "" THEN EXIT FUNCTION ' (ignore empty name)
ARRAY SCAN contacts(), = AnsiToUtf8(s), TO k : DECR k
IF k >= 0 THEN ' Existing contact
DIALOG SHOW STATE hDlg, %SW_HIDE
DIALOG SEND GetParent(hWnd), %WM_SETFOCUS, 0, 0 ' put OneNote on top
PasteContact hDlg, contacts(k), emails(k) ' paste contact
ELSE ' New contact
i = INSTR(s, ",")
IF i = 0 THEN ' do not save it until
EXIT FUNCTION ' it's "Name, Surname"
ELSE
DIALOG SHOW STATE hDlg, %SW_HIDE ' valid format
DIALOG SEND GetParent(hWnd), %WM_SETFOCUS, 0, 0 ' put OneNote on top
e = TRIM$( MID$(NoAccent(s), i+1)) + "." _
+ TRIM$(LEFT$(NoAccent(s), i-1))
i = ShowDomainsList(hWnd, s)
IF i = 0 THEN ' cancelled by user
e = ""
ELSEIF i - 1 > UBOUND(domains_a) THEN ' New company
i = ShowNewDomain(hWnd)
IF i = 0 THEN ' cancelled by user
e = ""
ELSE ' new email extension
e += domains_e(i - 1)
END IF
ELSEIF i > 0 THEN ' Existing company
e += domains_e(i-1) ' add email extension
ELSE ' (e.g. @renault.com)
END IF
IF e = "" THEN
DIALOG END hDlg, 0
EXIT FUNCTION
END IF
s = AnsiToUtf8(s) ' switch from Win-display world to UTF8 encoding world
AddContact s, e
PasteContact hDlg, s, e
END IF
END IF
END IF
END SELECT
FUNCTION = CallWindowProc(OldCBBProc, hWnd, Msg, wParam, lParam)
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Fill ComboBox **
'------------------------------------------------------------------------------
FUNCTION FillContactBook(BYVAL hDlg AS DWORD, BYVAL lID AS LONG) AS LONG
LOCAL i, k, n, ff AS LONG
LOCAL e AS STRING
CONTROL SEND hDlg, lID, %CB_SETEXTENDEDUI, %TRUE, 0
' Read favorite domain names & extensions from ini file
ff = FREEFILE
OPEN INIFILE FOR INPUT ACCESS READ LOCK SHARED AS #ff
DO
LINE INPUT #ff, e
LOOP UNTIL "[domains]" = LCASE$(TRIM$(e)) OR ISTRUE EOF(#ff)
IF ISFALSE EOF(#ff) THEN
DO
LINE INPUT #ff, e
k = INSTR(e, "=")
IF k > 0 AND INSTR(e, "@") > 0 THEN
n = UBOUND(domains_a)
IF n < 0 THEN
n = 0
REDIM domains_a(n)
REDIM domains_c(n)
REDIM domains_e(n)
ELSE
INCR n
REDIM PRESERVE domains_a(n)
REDIM PRESERVE domains_c(n)
REDIM PRESERVE domains_e(n)
END IF
domains_a(n) = TRIM$(LEFT$(e, k-1)) ' domain acronym (RNA)
e = TRIM$(MID$(e, k+1))
k = INSTR(e, "@")
domains_c(n) = TRIM$(LEFT$(e, k-1)) ' domain company (Renault)
domains_e(n) = TRIM$(MID$ (e, k)) ' domain extension (@renault.com)
END IF
LOOP UNTIL EOF(#ff) OR (INSTR(e, "[") > 0 AND INSTR(e, "]") > 0)
END IF
CLOSE #ff
' Sanity check
n = UBOUND(domains_a)
IF n < 0 THEN
n = 0
REDIM domains_a(n)
REDIM domains_c(n)
REDIM domains_e(n)
domains_a(n) = "default" ' domain acronym
domains_c(n) = "Microsoft" ' domain company
domains_e(n) = "@microsoft.com" ' domain extension
END IF
' Populate contact book from ini file
ff = FREEFILE
OPEN INIFILE FOR INPUT ACCESS READ LOCK SHARED AS #ff
DO
LINE INPUT #ff, e
LOOP UNTIL "[contact_book]" = LCASE$(TRIM$(e)) OR ISTRUE EOF(#ff)
IF ISFALSE EOF(#ff) THEN
DO
LINE INPUT #ff, e
k = INSTR(e, "=")
IF k > 0 AND INSTR(e, ",") > 0 AND INSTR(e, "@") > 0 THEN
n = UBOUND(contacts)
IF n < 0 THEN
n = 0
REDIM contacts(n)
REDIM emails(n)
ELSE
INCR n
REDIM PRESERVE contacts(n)
REDIM PRESERVE emails(n)
END IF
contacts(n) = TRIM$(LEFT$(e, k-1))
emails(n) = TRIM$( MID$(e, k+1))
END IF
LOOP UNTIL EOF(#ff) OR (INSTR(e, "[") > 0 AND INSTR(e, "]") > 0)
END IF
CLOSE #ff
' Fill ComboBox with contact names
FOR i = LBOUND(contacts) TO UBOUND(contacts)
COMBOBOX ADD hDlg, %IDC_COMBOBOX1, Utf8ToAnsi(contacts(i))
NEXT
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Dialogs **
'------------------------------------------------------------------------------
FUNCTION ShowContactBook(BYVAL hParent AS DWORD) AS LONG
LOCAL lRes AS LONG
LOCAL hDlg AS DWORD
LOCAL hIco AS DWORD
DIALOG NEW PIXELS, hParent, "Contact Book", 310, 210, 297, 201, _
%WS_POPUP OR%WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_VISIBLE OR _
%WS_CLIPSIBLINGS OR %DS_MODALFRAME OR %DS_3DLOOK OR %DS_NOFAILCREATE OR _
%DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR _
%WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
hIco = ExtractIcon(GetModuleHandle(""), "shell32.dll", 160)
SetClassLong(hDlg, %GCL_HICONSM, hIco)
SetClassLong(hDlg, %GCL_HICON, hIco)
DeleteObject(hIco)
ERASE contacts(), emails(), domains_a(), domains_c(), domains_e()
ClipBoardHtmlSet hDlg, ""
CONTROL ADD COMBOBOX, hDlg, %IDC_COMBOBOX1, , 8, 8, 280, 152, _
%WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %CBS_SIMPLE OR %CBS_SORT _
OR %WS_VSCROLL, %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR
FillContactBook hDlg, %IDC_COMBOBOX1
CONTROL ADD LABEL, hDlg, 102, "--hint--", 6, 154, 280, 16
CONTROL SHOW STATE hDlg, 102, %SW_HIDE
CONTROL ADD BUTTON, hDlg, %IDOK, "OK", 224, 172, 64, 24
CONTROL ADD BUTTON, hDlg, %IDCANCEL, "Cancel", 144, 172, 64, 24
DIALOG SHOW MODAL hDlg, CALL ProcContactBook TO lRes
FUNCTION = lRes
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
MACRO REGISTER_ACCEL (aclId, keyVal)
ac(aclId).fvirt = %FVIRTKEY
ac(aclId).key = keyVal
ac(aclId).cmd = keyVal + %WM_USER
END MACRO
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
%dlg_dw = 280
'------------------------------------------------------------------------------
FUNCTION ShowDomainsList(BYVAL hParent AS DWORD, contact AS STRING) AS LONG
LOCAL i AS LONG
LOCAL lRes AS LONG
LOCAL hDlg AS DWORD
LOCAL hIco AS DWORD
LOCAL e AS STRING
DIALOG NEW PIXELS, hParent, "New contact", 0, 0, 2, 2, _
%WS_POPUP OR%WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_VISIBLE OR _
%WS_CLIPSIBLINGS OR %DS_MODALFRAME OR %DS_3DLOOK OR %DS_NOFAILCREATE OR _
%DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR _
%WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
hIco = ExtractIcon(GetModuleHandle(""), "shell32.dll", 158)
SetClassLong(hDlg, %GCL_HICONSM, hIco)
SetClassLong(hDlg, %GCL_HICON, hIco)
DeleteObject(hIco)
CONTROL ADD BUTTON, hDlg, %IDCANCEL, "", -2, -2, 0, 0, %BS_NOTIFY
CONTROL ADD LABEL, hDlg, 102, "What company does "+contact+" belong to ?" _
, 6, 6, %dlg_dw - 6, 20
FOR i = LBOUND(domains_c) TO UBOUND(domains_c) ' domain companies
e = domains_c(i)
IF domains_a(i) = "default" THEN e = domains_a(i) + " (" + e + ")"
CONTROL ADD BUTTON, hDlg, 103 + i, e, 40, 25 * (i + 1), %dlg_dw - 85, 24, %BS_NOTIFY
NEXT
CONTROL ADD BUTTON, hDlg, 103 + i, "< New company >", _
40, 25 * (i + 1), %dlg_dw - 85, 24, %BS_NOTIFY
DIM ac(0 TO 3) AS ACCELAPI
REGISTER_ACCEL (0, %VK_HOME)
REGISTER_ACCEL (1, %VK_END)
REGISTER_ACCEL (2, %VK_PRIOR) ' PG-UP
REGISTER_ACCEL (3, %VK_NEXT) ' PG-DOWN
ACCEL ATTACH hDlg, ac() TO lRes
DIALOG SET SIZE hDlg, %dlg_dw, 25 * (i + 3) + 15
DIALOG SHOW MODAL hDlg, CALL ProcDomainsList TO lRes
FUNCTION = lRes
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
FUNCTION ShowNewDomain(BYVAL hParent AS DWORD) AS LONG
LOCAL lRes AS LONG
LOCAL hDlg AS DWORD
LOCAL hIco AS DWORD
DIALOG NEW PIXELS, hParent, "New company", 0, 0, 300, 155, _
%WS_POPUP OR%WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_VISIBLE OR _
%WS_CLIPSIBLINGS OR %DS_MODALFRAME OR %DS_3DLOOK OR %DS_NOFAILCREATE OR _
%DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR _
%WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
hIco = ExtractIcon(GetModuleHandle(""), "shell32.dll", 57)
SetClassLong(hDlg, %GCL_HICONSM, hIco)
SetClassLong(hDlg, %GCL_HICON, hIco)
DeleteObject(hIco)
CONTROL ADD LABEL, hDlg, 101, "Company Acronym (e.g. MS, Y!) :", 8, 16, 208, 16
CONTROL ADD TEXTBOX, hDlg, 201, "", 224, 12, 64, 20
CONTROL ADD LABEL, hDlg, 102, "Company Name (Microsoft, Yahoo) :", 8, 48, 184, 16
CONTROL ADD TEXTBOX, hDlg, 202, "", 192, 44, 96, 20
CONTROL ADD LABEL, hDlg, 103, "Email extension (""@microsoft.com"") :", 8, 80, 184, 16
CONTROL ADD TEXTBOX, hDlg, 203, "@", 192, 76, 96, 20
CONTROL ADD BUTTON, hDlg, %IDCANCEL, "Cancel", 120, 120, 72, 24
CONTROL ADD BUTTON, hDlg, %IDOK, "OK", 216, 120, 72, 24
DIALOG SHOW MODAL hDlg, CALL ProcNewDomain TO lRes
FUNCTION = lRes
END FUNCTION
'------------------------------------------------------------------------------