I am trying to select a sound card to use and the output keeps going to my default card and not the one I select. This is a very brief program showing the problem. How to do this?
Code:
#PBFORMS CREATED V1.51 '------------------------------------------------------------------------------ ' The first line in this file is a PB/Forms metastatement. ' It should ALWAYS be the first line of the file. Other ' PB/Forms metastatements are placed at the beginning and ' end of "Named Blocks" of code that should be edited ' with PBForms only. Do not manually edit or delete these ' metastatements or PB/Forms will not be able to reread ' the file correctly. See the PB/Forms documentation for ' more information. ' Named blocks begin like this: #PBFORMS BEGIN ... ' Named blocks end like this: #PBFORMS END ... ' Other PB/Forms metastatements such as: ' #PBFORMS DECLARATIONS ' are used by PB/Forms to insert additional code. ' Feel free to make changes anywhere else in the file. '------------------------------------------------------------------------------ #COMPILE EXE #DIM ALL '------------------------------------------------------------------------------ ' ** Includes ** '------------------------------------------------------------------------------ #PBFORMS BEGIN INCLUDES #IF NOT %DEF(%WINAPI) #INCLUDE "WIN32API.INC" #ENDIF #PBFORMS END INCLUDES '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Constants ** '------------------------------------------------------------------------------ #PBFORMS BEGIN CONSTANTS %IDD_DIALOG1 = 101 %IDC_COMBOBOX1 = 1001 %IDC_BUTTON1 = 1002 %IDC_BUTTON2 = 1003 %IDC_LABEL1 = 1004 #PBFORMS END CONSTANTS '------------------------------------------------------------------------------ $MUSICFILE = "American Pie.mp3" '<----Name your music file here '------------------------------------------------------------------------------ ' ** Declarations ** '------------------------------------------------------------------------------ DECLARE CALLBACK FUNCTION ShowDIALOG1Proc() DECLARE FUNCTION SampleComboBox(BYVAL hDlg AS DWORD, BYVAL lID AS _ LONG, BYVAL lCount AS LONG) AS LONG DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG #PBFORMS DECLARATIONS '------------------------------------------------------------------------------ GLOBAL soundcards()AS STRING '------------------------------------------------------------------------------ ' ** Main Application Entry Point ** '------------------------------------------------------------------------------ FUNCTION PBMAIN() ShowDIALOG1 %HWND_DESKTOP END FUNCTION '------------------------------------------------------------------------------ FUNCTION GetSoundCards() AS LONG LOCAL hr,i AS LONG LOCAL woc AS WAVEOUTCAPS REDIM SoundCards(1:WaveOutGetNumDevs) FOR i = 0 TO WaveOutGetNumDevs -1 hr = waveOutGetDevCaps(i,woc,SIZEOF(woc)) Soundcards(i+1)=woc.szPName NEXT FUNCTION = UBOUND(soundcards) END FUNCTION '------------------------------------------------------------------------------ ' ** CallBacks ** '------------------------------------------------------------------------------ CALLBACK FUNCTION ShowDIALOG1Proc() STATIC soundcard AS STRING LOCAL i AS LONG SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG ' Initialization handler i = getSoundCards SampleComboBox CB.HNDL, %IDC_COMBOBOX1, i COMBOBOX SELECT CB.HNDL,%idc_Combobox1,1 CASE %WM_NCACTIVATE STATIC hWndSaveFocus AS DWORD IF ISFALSE CBWPARAM THEN ' Save control focus hWndSaveFocus = GetFocus() ELSEIF hWndSaveFocus THEN ' Restore control focus SetFocus(hWndSaveFocus) hWndSaveFocus = 0 END IF CASE %WM_COMMAND ' Process control notifications SELECT CASE AS LONG CBCTL CASE %IDC_COMBOBOX1 IF CB.CTLMSG = %CBN_SELENDOK THEN COMBOBOX GET TEXT CB.HNDL, %IDC_COMBOBOX1 TO _ soundcard END IF CASE %IDC_BUTTON1 IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN 'play using selected sound card LOCAL audiodevice AS ASCIIZ * 200 LOCAL le AS LONG COMBOBOX GET TEXT CB.HNDL,%IDC_Combobox1 TO _ AudioDevice le = mcisendstring("open " + $DQ + $MusicFile + _ $DQ ,AudioDevice,0,0) le = mcisendstring("play " + $DQ + $MusicFile + $DQ,"",0,0) END IF CASE %IDC_BUTTON2 IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN DIALOG END CB.HNDL END IF CASE %IDC_LABEL1 END SELECT END SELECT END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Sample Code ** '------------------------------------------------------------------------------ FUNCTION SampleComboBox(BYVAL hDlg AS DWORD, BYVAL lID AS LONG, BYVAL lCount _ AS LONG) AS LONG LOCAL i AS LONG CONTROL SEND hDlg, lID, %CB_SETEXTENDEDUI, %TRUE, 0 FOR i = 1 TO lCount COMBOBOX ADD hDlg, lID, Soundcards(i) NEXT i END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Dialogs ** '------------------------------------------------------------------------------ FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBFORMS BEGIN DIALOG %IDD_DIALOG1->-> LOCAL hDlg AS DWORD DIALOG NEW hParent, "Dialog1", 199, 160, 201, 121, TO hDlg CONTROL ADD COMBOBOX, hDlg, %IDC_COMBOBOX1, , 40, 65, 100, 40 CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "Play", 65, 15, 50, 15 CONTROL ADD BUTTON, hDlg, %IDC_BUTTON2, "E&xit", 140, 95, 50, 15 CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "Select Sound Card", 40, 55, _ 100, 10 #PBFORMS END DIALOG DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt #PBFORMS BEGIN CLEANUP %IDD_DIALOG1 #PBFORMS END CLEANUP FUNCTION = lRslt END FUNCTION '------------------------------------------------------------------------------
Comment