#PBForms Created v1.51 #COMPILE EXE #DIM ALL '------------------------------------------------------------------------------ ' ** Includes ** '------------------------------------------------------------------------------ #PBForms Begin Includes #If Not %Def(%WINAPI) #Include "WIN32API.INC" #EndIf #Include "PBForms.INC" #PBForms End Includes '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Constants ** '------------------------------------------------------------------------------ #PBForms Begin Constants %DLG_DIALOG1 = 101 %LBL_LABEL1 = 1002 %TXT_EWPM = 1001 %TXT_TEXTBOX1 = 1003 '* %LBL_LABEL2 = 1004 %LBL_LABEL3 = 1006 %LBL_LABEL4 = 1009 %LBL_LABEL5 = 1011 %CMBO_DIT_LENGTH = 1007 %TXT_CHAR_WPM = 1005 %TXT_CHAR_DELAY = 1008 %TXT_WORD_DELAY = 1010 %BTN_CALC = 1012 #PBForms End Constants '------------------------------------------------------------------------------ SUB UpdateCharWPM(hDlg AS DWORD) LOCAL WPM AS SINGLE LOCAL dit_length AS LONG LOCAL txt AS STRING CONTROL GET TEXT hDlg,%CMBO_DIT_LENGTH TO txt dit_length = VAL(txt) WPM = 60000.0/(dit_length * 440.0) CONTROL SET TEXT hDlg,%TXT_CHAR_WPM,FORMAT$(WPM,"##.0") END SUB SUB CalculateDelays(hDlg AS DWORD) LOCAL char_delay_mS AS LONG LOCAL dit_length AS LONG LOCAL Effective_WPM AS SINGLE LOCAL Char_WPM AS SINGLE LOCAL txt AS STRING CONTROL GET TEXT hDlg,%TXT_EWPM TO txt Effective_WPM = VAL(txt) CONTROL GET TEXT hDlg,%CMBO_DIT_LENGTH TO txt dit_length = VAL(txt) CONTROL GET TEXT hDlg,%TXT_CHAR_WPM TO txt Char_WPM = VAL(txt) IF Effective_WPM > Char_WPM THEN MSGBOX "Effective WPM must be <= Character WPM",%MB_ICONEXCLAMATION,"Input Data Error" EXIT SUB END IF char_delay_mS = (60000.0/Effective_WPM - dit_length * 230.0)/7 CONTROL SET TEXT hDlg,%TXT_CHAR_DELAY,FORMAT$(char_delay_mS) CONTROL SET TEXT hDlg,%TXT_WORD_DELAY,FORMAT$(char_delay_mS * 3) END SUB SUB Fill_Dit_Length(hDlg AS DWORD) LOCAL dit_length AS LONG CONTROL SEND hDlg, %CMBO_DIT_LENGTH, %CB_SETEXTENDEDUI, %TRUE, 0 FOR dit_length = 2 TO 28 COMBOBOX ADD hDlg,%CMBO_DIT_LENGTH,FORMAT$(dit_length) NEXT COMBOBOX SELECT hDlg, %CMBO_DIT_LENGTH, 8 END SUB '------------------------------------------------------------------------------ ' ** 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 '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Main Application Entry Point ** '------------------------------------------------------------------------------ FUNCTION PBMAIN() ShowDIALOG1 %HWND_DESKTOP END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** CallBacks ** '------------------------------------------------------------------------------ CALLBACK FUNCTION ShowDIALOG1Proc() SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG ' Initialization handler Fill_Dit_Length(CBHNDL) UpdateCharWPM(CBHNDL) 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 %TXT_EWPM CASE %TXT_CHAR_WPM CASE %CMBO_DIT_LENGTH IF CBCTLMSG = %CBN_SELENDOK THEN UpdateCharWPM(CBHNDL) END IF CASE %TXT_CHAR_DELAY CASE %TXT_WORD_DELAY CASE %BTN_CALC IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN CalculateDelays(CBHNDL) END IF END SELECT END SELECT END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Dialogs ** '------------------------------------------------------------------------------ FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBForms Begin Dialog %DLG_DIALOG1->-> Local hDlg As Dword Local hFont1 As Dword Dialog New hParent, "Farnsworth Calculator for PICAXE 08M Random Morse " + _ "Generator", 70, 70, 301, 102, %WS_POPUP Or %WS_BORDER Or %WS_DLGFRAME _ Or %WS_CAPTION Or %WS_SYSMENU Or %WS_MINIMIZEBOX Or %WS_CLIPSIBLINGS Or _ %WS_VISIBLE 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 Control Add TextBox, hDlg, %TXT_EWPM, "", 119, 10, 30, 12, %WS_CHILD Or _ %WS_VISIBLE Or %WS_TABSTOP Or %ES_CENTER Or %ES_AUTOHSCROLL, _ %WS_EX_CLIENTEDGE Or %WS_EX_LEFT Or %WS_EX_LTRREADING Or _ %WS_EX_RIGHTSCROLLBAR Control Add Label, hDlg, %LBL_LABEL1, "Desired Effective WPM", 24, 12, _ 93, 9, %WS_CHILD Or %WS_VISIBLE Or %SS_RIGHT, %WS_EX_LEFT Or _ %WS_EX_LTRREADING Control Add Label, hDlg, %LBL_LABEL2, "dit_length (10mS units)", 23, 32, _ 92, 9, %WS_CHILD Or %WS_VISIBLE Or %SS_RIGHT, %WS_EX_LEFT Or _ %WS_EX_LTRREADING Control Add TextBox, hDlg, %TXT_CHAR_WPM, "", 224, 30, 30, 13, %WS_CHILD _ Or %WS_VISIBLE Or %ES_CENTER Or %ES_AUTOHSCROLL Or %ES_READONLY, _ %WS_EX_CLIENTEDGE Or %WS_EX_LEFT Or %WS_EX_LTRREADING Or _ %WS_EX_RIGHTSCROLLBAR Control Set Color hDlg, %TXT_CHAR_WPM, -1, %White Control Add Label, hDlg, %LBL_LABEL3, "Character WPM", 157, 33, 64, 9, _ %WS_CHILD Or %WS_VISIBLE Or %SS_RIGHT, %WS_EX_LEFT Or %WS_EX_LTRREADING Control Add ComboBox, hDlg, %CMBO_DIT_LENGTH, , 118, 30, 32, 90, %WS_CHILD _ Or %WS_VISIBLE Or %WS_TABSTOP Or %WS_VSCROLL Or %CBS_DROPDOWNLIST, _ %WS_EX_LEFT Or %WS_EX_LTRREADING Or %WS_EX_RIGHTSCROLLBAR Control Add TextBox, hDlg, %TXT_CHAR_DELAY, "", 119, 52, 30, 13, %WS_CHILD _ Or %WS_VISIBLE Or %ES_CENTER Or %ES_AUTOHSCROLL Or %ES_READONLY, _ %WS_EX_CLIENTEDGE Or %WS_EX_LEFT Or %WS_EX_LTRREADING Or _ %WS_EX_RIGHTSCROLLBAR Control Set Color hDlg, %TXT_CHAR_DELAY, -1, %White Control Add Label, hDlg, %LBL_LABEL4, "char_delay", 51, 55, 64, 9, _ %WS_CHILD Or %WS_VISIBLE Or %SS_RIGHT, %WS_EX_LEFT Or %WS_EX_LTRREADING Control Add TextBox, hDlg, %TXT_WORD_DELAY, "", 224, 51, 30, 13, %WS_CHILD _ Or %WS_VISIBLE Or %ES_CENTER Or %ES_AUTOHSCROLL Or %ES_READONLY, _ %WS_EX_CLIENTEDGE Or %WS_EX_LEFT Or %WS_EX_LTRREADING Or _ %WS_EX_RIGHTSCROLLBAR Control Set Color hDlg, %TXT_WORD_DELAY, -1, %White Control Add Label, hDlg, %LBL_LABEL5, "word_delay", 157, 54, 64, 9, _ %WS_CHILD Or %WS_VISIBLE Or %SS_RIGHT, %WS_EX_LEFT Or %WS_EX_LTRREADING Control Add Button, hDlg, %BTN_CALC, "Calculate", 120, 77, 61, 15, _ %WS_CHILD Or %WS_VISIBLE Or %WS_TABSTOP Or %BS_TEXT Or %BS_DEFPUSHBUTTON _ Or %BS_PUSHBUTTON Or %BS_CENTER Or %BS_VCENTER, %WS_EX_LEFT Or _ %WS_EX_LTRREADING Dialog Send hDlg, %DM_SETDEFID, %BTN_CALC, 0 hFont1 = PBFormsMakeFont("MS Sans Serif", 8, 700, %FALSE, %FALSE, %FALSE, _ %ANSI_CHARSET) Control Send hDlg, %LBL_LABEL1, %WM_SETFONT, hFont1, 0 Control Send hDlg, %LBL_LABEL2, %WM_SETFONT, hFont1, 0 Control Send hDlg, %LBL_LABEL3, %WM_SETFONT, hFont1, 0 Control Send hDlg, %LBL_LABEL4, %WM_SETFONT, hFont1, 0 Control Send hDlg, %LBL_LABEL5, %WM_SETFONT, hFont1, 0 Control Send hDlg, %BTN_CALC, %WM_SETFONT, hFont1, 0 #PBForms End Dialog DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt #PBForms Begin CleanUp %DLG_DIALOG1 DeleteObject hFont1 #PBForms End CleanUp FUNCTION = lRslt END FUNCTION '------------------------------------------------------------------------------