Adding+tooltips+to+a+dialogue+box

//by Richard Russell and Howard Bolton, May 2006//

Tooltips are small (usually light yellow) windows containing useful information, which pop up when you 'hover' the mouse over a particular control or region of the screen. This article describes how you can add tooltips to a dialogue box; there are other articles for adding tooltips to a status bar and to the main output window (the main Help documentation describes how to add tooltips to a [|toolbar]).

Firstly we create and display a dialogue box in the usual way (see the main help documentation [|here]). For the purpose of this example the dialogue box contains two editboxes, a combobox, a list box and two push buttons:

code format="bb4w" INSTALL @lib$+"WINLIB2" INSTALL @lib$+"WINLIB5A"

BS_DEFPUSHBUTTON = 1 CBS_DROPDOWNLIST = 3 ES_AUTOHSCROLL = &80 ES_NUMBER = &2000 WS_GROUP = &20000 dlg%=FN_newdialog("Dialogue box",20,20,160,128,8,504) PROC_groupbox(dlg%,"Group box",0,4,4,152,96,WS_GROUP) PROC_editbox(dlg%,"Text box",101,12,20,64,12,ES_AUTOHSCROLL) PROC_editbox(dlg%,"123456",102,82,20,64,12,ES_NUMBER) PROC_combobox(dlg%,"",103,12,40,64,60,CBS_DROPDOWNLIST) PROC_listbox(dlg%,"",104,82,40,64,48,0) PROC_pushbutton(dlg%,"OK",1,12,108,56,14,WS_GROUP+BS_DEFPUSHBUTTON) PROC_pushbutton(dlg%,"Cancel",2,92,108,56,14,0) PROC_showdialog(dlg%) code Note the installation of the **WINLIB5A** library which is needed later.

Next we perform any initialisation of the dialogue box required; in this case we enter some data into the combobox and the list box:

code format="bb4w" CB_ADDSTRING = &143 CB_SETCURSEL = &14E LB_ADDSTRING = &180

SYS "SendDlgItemMessage",!dlg%,103,CB_ADDSTRING,0,"Combobox 1" SYS "SendDlgItemMessage",!dlg%,103,CB_ADDSTRING,0,"Combobox 2" SYS "SendDlgItemMessage",!dlg%,103,CB_ADDSTRING,0,"Combobox 3" SYS "SendDlgItemMessage",!dlg%,103,CB_ADDSTRING,0,"Combobox 4" SYS "SendDlgItemMessage",!dlg%,103,CB_SETCURSEL,0,0 SYS "SendDlgItemMessage",!dlg%,104,LB_ADDSTRING,0,"Listbox item 0" SYS "SendDlgItemMessage",!dlg%,104,LB_ADDSTRING,0,"Listbox item 1" SYS "SendDlgItemMessage",!dlg%,104,LB_ADDSTRING,0,"Listbox item 2" SYS "SendDlgItemMessage",!dlg%,104,LB_ADDSTRING,0,"Listbox item 3" code So far everything has been conventional. Now comes the code for creating the tooltips:

code format="bb4w" TTS_ALWAYSTIP = 1 TTS_NOPREFIX = 2 WS_CHILD = &40000000 WS_VISIBLE = &10000000 htt% = FN_createwindow(!dlg%,"tooltips_class32","",0,0,0,0,0, \     \      WS_CHILD+WS_VISIBLE+TTS_ALWAYSTIP+TTS_NOPREFIX,0) DIM ti{cbSize%, uFlags%, hwnd%, uId%, rect{l%,t%,r%,b%}, hinst%, lpszText%}

PROC_CreateToolTip(!dlg%, htt%, 101, "This is a text-input box") PROC_CreateToolTip(!dlg%, htt%, 102, "This is a numeric-input box") PROC_CreateToolTip(!dlg%, htt%, 103, "This is a combo box") PROC_CreateToolTip(!dlg%, htt%, 104, "This is a list box") PROC_CreateToolTip(!dlg%, htt%, 1, "This is the default push button") PROC_CreateToolTip(!dlg%, htt%, 2, "This is another push button") code Finally we need the procedure to send the Tooltip text to each dialogue item. This procedure can be used for any dialogue box in your program by passing appropriate values for the handles to the dialogue box and the Tooltip (note the important addition of CHR$0 to each of the strings):

code format="bb4w" DEF PROC_CreateToolTip(hdlg%, htt%, id%, tip$) TTF_IDISHWND = 1 TTF_SUBCLASS = 16 TTM_ADDTOOL = &404 tip$ += CHR$0 SYS "GetDlgItem", hdlg%, id% TO ti.uId% ti.cbSize% = DIM(ti{}) ti.uFlags% = TTF_SUBCLASS + TTF_IDISHWND ti.hwnd% = hdlg% ti.lpszText% = !^tip$ SYS "SendMessage", htt%, TTM_ADDTOOL, 0, ti{} ENDPROC code Now all you need to do is hover the mouse over the controls and see the effect.