example_20property_20sheet
This is an old revision of the document!
Example property sheet
by Richard Russell, October 2015
The main BBC BASIC for Windows Help documentation contains information on how to create a Property Sheet, but no demonstration program is supplied. For those who prefer to adapt an existing program rather than to write their own from scratch, here is an example of a property sheet in action.
By default the Apply button is not enabled, but here it is. Note that you will receive a notification that the Apply button has been pressed for each page in your property sheet (so in the example below you will receive it twice):
REM. Program to demonstrate the use of property sheets from BBC BASIC REM. Richard Russell 5th August 2002 INSTALL @lib$+"WINLIB2" INSTALL @lib$+"WINLIB4" DIM Text% 255 REM!WC Windows Constants: CB_ADDSTRING = 323 CB_SETCURSEL = 334 CBS_DROPDOWNLIST = 3 CBS_SORT = 256 EM_SETSEL = &B1 ES_NUMBER = 8192 LR_LOADFROMFILE = 16 LR_LOADMAP3DCOLORS = 4096 PSM_CHANGED = &468 PSM_GETCURRENTPAGEHWND = &476 SS_BITMAP = &E SS_CENTERIMAGE = 512 SS_LEFTNOWORDWRAP = &C SS_NOPREFIX = &80 SS_RIGHT = 2 STM_SETIMAGE = 370 UDM_SETRANGE = &465 WS_GROUP = &20000 WS_TABSTOP = 65536 chx1 = 101 chx2 = 102 chx3 = 103 chx4 = 104 chx5 = 105 grp1 = 201 grp2 = 202 grp3 = 203 grp4 = 204 rdb1 = 301 rdb2 = 302 rdb3 = 303 rdb4 = 304 rdb5 = 305 edt1 = 401 edt2 = 402 edt3 = 403 psh2 = 502 cmb4 = 604 stc2 = 702 stc3 = 703 stc5 = 705 stc6 = 706 stc7 = 707 stc8 = 708 stc9 = 709 stc10 = 710 stc11 = 711 stc12 = 712 stc13 = 713 stc14 = 714 ico3 = 803 upd1 = 903 REM. Create the dialogues: page0% = FN_newdialog("Page 1", 32, 32, 288, 128, 8, 650) PROC_groupbox(page0%, "Printer", grp4, 8, 4, 272, 84, WS_GROUP) PROC_static(page0%, "&Name:", stc6, 16, 20, 36, 8, 0) PROC_combobox(page0%, "", cmb4, 52, 18, 152, 152, CBS_DROPDOWNLIST OR CBS_SORT OR WS_GROUP) PROC_pushbutton(page0%, "&Properties", psh2, 212, 17, 60, 14, WS_GROUP) PROC_static(page0%, "Status:", stc8, 16, 36, 36, 10, SS_NOPREFIX) PROC_static(page0%, "", stc12, 52, 36, 224, 10, SS_NOPREFIX OR SS_LEFTNOWORDWRAP) PROC_static(page0%, "Type:", stc7, 16, 48, 36, 10, SS_NOPREFIX) PROC_static(page0%, "", stc11, 52, 48, 224, 10, SS_NOPREFIX OR SS_LEFTNOWORDWRAP) PROC_static(page0%, "Where:", stc10, 16, 60, 36, 10, SS_NOPREFIX) PROC_static(page0%, "", stc14, 52, 60, 224, 10, SS_NOPREFIX OR SS_LEFTNOWORDWRAP) PROC_static(page0%, "Comment:", stc9, 16, 72, 36, 10, SS_NOPREFIX) PROC_static(page0%, "", stc13, 52, 72, 152, 10, SS_NOPREFIX OR SS_LEFTNOWORDWRAP) PROC_checkbox(page0%, "Print to fi&le", chx1, 212, 70, 64, 12, WS_GROUP) page1% = FN_newdialog("Page 2", 32, 32, 288, 128, 8, 1100) PROC_groupbox(page1%, "Print range", grp1, 8, 4, 144, 64, WS_GROUP) PROC_radiobutton(page1%, "&All", rdb1, 16, 18, 20, 12, WS_GROUP) PROC_radiobutton(page1%, "Pa&ges", rdb3, 16, 34, 36, 12, -WS_TABSTOP) PROC_radiobutton(page1%, "&Selected region", rdb2, 16, 50, 64, 12, 0) PROC_static(page1%, "&from:", stc2, 52, 36, 20, 8, SS_RIGHT) PROC_editbox(page1%, "", edt1, 74, 34, 26, 12, WS_GROUP OR ES_NUMBER) PROC_static(page1%, "&to:", stc3, 102, 36, 14, 8, SS_RIGHT) PROC_editbox(page1%, "", edt2, 118, 34, 26, 12, WS_GROUP OR ES_NUMBER) PROC_groupbox(page1%, "Copies", grp2, 160, 4, 120, 64, WS_GROUP) PROC_static(page1%, "Number of &copies:", stc5, 168, 20, 68, 8, 0) PROC_editbox(page1%, "", edt3, 240, 18, 32, 12, WS_GROUP OR ES_NUMBER) PROC_dlgctrl(page1%, "", upd1, 0, 0, 12, 12, &50000096, "msctls_updown32") PROC_static(page1%, "", ico3, 162, 36, 76, 24, SS_BITMAP OR SS_CENTERIMAGE OR WS_GROUP) PROC_checkbox(page1%, "C&ollate", chx2, 240, 42, 36, 12, WS_GROUP) PROC_groupbox(page1%, "Syntax highlighting", grp3, 8, 72, 272, 48, WS_GROUP) PROC_radiobutton(page1%, "Print in colou&r", rdb4, 16, 86, 60, 12, WS_GROUP) PROC_radiobutton(page1%, "Print in blac&k", rdb5, 16, 102, 60, 12, 0) PROC_checkbox(page1%, "&Underlined keywords", chx3, 78, 102, 80, 12, WS_GROUP) PROC_checkbox(page1%, "&Italic REMarks", chx4, 162, 102, 62, 12, WS_GROUP) PROC_checkbox(page1%, "&Bold strings", chx5, 226, 102, 52, 12, WS_GROUP) REM. Create the property sheet: pages% = 2 DIM dlg%(pages%-1), hdlg%(pages%-1) dlg%() = page0%, page1% PropSh% = FN_newpropsheet("Property sheet", pages%, 0, 0, dlg%()) : REM. Caption, no. of pages, initial page, list of dialogues REM. Display the property sheet: PROC_showpropsheet(PropSh%, hdlg%()) ON CLOSE PROCcleanup : QUIT ON ERROR SYS "MessageBox", @hwnd%, REPORT$, 0, 0 : PROCcleanup : QUIT REM. Initialise page 1: SYS "SendDlgItemMessage", hdlg%(0), cmb4, CB_ADDSTRING, 0, "HP LaserJet IIIP" SYS "SendDlgItemMessage", hdlg%(0), cmb4, CB_ADDSTRING, 0, "HP LaserJet Plus" SYS "SendDlgItemMessage", hdlg%(0), cmb4, CB_ADDSTRING, 0, "HP Photosmart 1115" SYS "SendDlgItemMessage", hdlg%(0), cmb4, CB_SETCURSEL, 0, 0 SYS "SetDlgItemText", hdlg%(0), stc12, "Default printer; Ready" SYS "SetDlgItemText", hdlg%(0), stc11, "HP LaserJet IIIP" SYS "SetDlgItemText", hdlg%(0), stc14, "LPT1:" REM. Initialise page 2: SYS "CheckRadioButton", hdlg%(1), rdb1, rdb2, rdb1 SYS "GetDlgItem", hdlg%(1), rdb2 TO hrad2% SYS "EnableWindow", hrad2%, 0 SYS "SetDlgItemInt", hdlg%(1), edt1, 1 SYS "SetDlgItemInt", hdlg%(1), edt2, 1 SYS "SetDlgItemInt", hdlg%(1), edt3, 1 SYS "CheckDlgButton", hdlg%(1), chx2, 1 SYS "CheckRadioButton", hdlg%(1), rdb4, rdb5, rdb5 SYS "CheckDlgButton", hdlg%(1), chx3, 1 SYS "CheckDlgButton", hdlg%(1), chx4, 1 SYS "CheckDlgButton", hdlg%(1), chx5, 1 SYS "SendDlgItemMessage", hdlg%(1), upd1, UDM_SETRANGE, 0, (1 << 16)+9999 SYS "GetDlgItem", hdlg%(1), chx2 TO hchx2% SYS "EnableWindow", hchx2%, 0 SYS "LoadImage", 0, @dir$+"collate.bmp", 0, 97, 41, LR_LOADMAP3DCOLORS OR \ \ LR_LOADFROMFILE TO hCollate% SYS "LoadImage", 0, @dir$+"copies.bmp", 0, 109, 41, LR_LOADMAP3DCOLORS OR \ \ LR_LOADFROMFILE TO hCopies% SYS "SendDlgItemMessage", hdlg%(1), ico3, STM_SETIMAGE, 0, hCollate% REM. Process page changes and button clicks: DIM Q%(31) ON SYS Q%() = Q%(0)+1,@wparam%,Q%(1),Q%(2),Q%(3),Q%(4),Q%(5),Q%(6),Q%(7),Q%(8),\ \ Q%(9),Q%(10),Q%(11),Q%(12),Q%(13),Q%(14),Q%(15),Q%(16),Q%(17),Q%(18),Q%(19),Q%(20),\ \ Q%(21),Q%(22),Q%(23),Q%(24),Q%(25),Q%(26),Q%(27),Q%(28),Q%(29),Q%(30) : RETURN oldhdlg% = 0 REPEAT WAIT 1 click% = 0 IF Q%(0) click% = Q%(Q%(0)) : Q%(0) -= 1 SYS "SendMessage", !PropSh%, PSM_CHANGED, hdlg%(0), 0 SYS "SendMessage", !PropSh%, PSM_GETCURRENTPAGEHWND, 0, 0 TO hdlg% oldhdlg% = hdlg% CASE click% AND &FFFF OF WHEN 1: PRINT "OK or APPLY pressed" SYS "GetDlgItemText", hdlg%(0), stc11, Text%, 255 PRINT "Printer name = " $$Text% SYS "IsDlgButtonChecked", hdlg%(0), chx1 TO ptf% IF ptf% THEN PRINT "Print to file" SYS "IsDlgButtonChecked", hdlg%(1), rdb1 TO all% IF all% THEN PRINT "All pages" ELSE SYS "GetDlgItemInt", hdlg%(1), edt1, 0, 0 TO first% SYS "GetDlgItemInt", hdlg%(1), edt2, 0, 0 TO last% PRINT "Page range ";first%; " to ";last% ENDIF SYS "GetDlgItemInt", hdlg%(1), edt3, 0, 0 TO copies% PRINT "No. of copies = ";copies% IF copies%>1 THEN SYS "IsDlgButtonChecked", hdlg%(1), chx2 TO coll% IF coll% PRINT "Collate" ENDIF SYS "IsDlgButtonChecked", hdlg%(1), rdb4 TO col% IF col% THEN PRINT "Print in colour" ELSE PRINT "Print in black & white" ENDIF WHEN 2: PRINT "CANCEL pressed" WHEN rdb3: SYS "GetDlgItem", hdlg%(1), edt1 TO hedt1% SYS "SetForegroundWindow", hedt1% SYS "SendDlgItemMessage", hdlg%(1), edt1, EM_SETSEL, 0, -1 WHEN rdb4: SYS "GetDlgItem", hdlg%(1), chx3 TO hchx3% SYS "EnableWindow", hchx3%, 0 SYS "GetDlgItem", hdlg%(1), chx4 TO hchx4% SYS "EnableWindow", hchx4%, 0 SYS "GetDlgItem", hdlg%(1), chx5 TO hchx5% SYS "EnableWindow", hchx5%, 0 WHEN rdb5: SYS "GetDlgItem", hdlg%(1), chx3 TO hchx3% SYS "EnableWindow", hchx3%, 1 SYS "GetDlgItem", hdlg%(1), chx4 TO hchx4% SYS "EnableWindow", hchx4%, 1 SYS "GetDlgItem", hdlg%(1), chx5 TO hchx5% SYS "EnableWindow", hchx5%, 1 WHEN chx2: SYS "IsDlgButtonChecked", hdlg%(1), chx2 TO collate% IF collate% THEN SYS "SendDlgItemMessage", hdlg%(1), ico3, STM_SETIMAGE, 0, hCollate% ELSE SYS "SendDlgItemMessage", hdlg%(1), ico3, STM_SETIMAGE, 0, hCopies% ENDIF WHEN cmb4: SYS "GetDlgItemText", hdlg%(0), cmb4, Text%, 255 SYS "SetDlgItemText", hdlg%(0), stc11, Text% WHEN edt3: SYS "GetDlgItemInt", hdlg%(1), edt3, 0, 0 TO copies% SYS "EnableWindow", hchx2%, -(copies%>1) ENDCASE UNTIL hdlg% = 0 PROCcleanup END DEF PROCcleanup PropSh% += 0 : IF PropSh% PROC_closepropsheet(PropSh%) : PropSh% = 0 hCollate% += 0 : IF hCollate% SYS "DeleteObject", hCollate% : hCollate% = 0 hCopies% += 0 : IF hCopies% SYS "DeleteObject", hCopies% : hCopies% = 0 ENDPROC
example_20property_20sheet.1523819673.txt.gz · Last modified: 2024/01/05 00:17 (external edit)