Announcement

Collapse
No announcement yet.

When I press on the button Convert or Send it chrashed and the app hang

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    When I press on the button Convert or Send it chrashed and the app hang

    Hi all,

    I think that the conversion from vb60 code into PB is normally correct. When I click on the button "Send" or "Convert" the application crashed. What do I wrong here. Is that probally the line ware occur this crashed?

    Code:
    [COLOR="Blue"][SIZE="4"]CASE %IDC_CMD_SEND
                            '================================================================
                            'Private Sub cmdSend_Click()
                            '   Call Command1_Click
                            '   If Option1.Value = True Then
                            '       MSComm1.CommPort = 1
                            '   Else
                            '       MSComm1.CommPort = 2
                            '   End If
                            '   MSComm1.PortOpen = True
                            '   MSComm1.Output = Chr(byte1) + Chr(byte2) + Chr(byte3) + Chr(byte4)
                            '   MSComm1.PortOpen = False
                            'End Sub
                            '================================================================
    
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            SELECT CASE AS LONG CB.CTL
                                CASE %IDC_OPT_COM1
                                    IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                                        CONTROL GET CHECK CB.HNDL, %IDC_OPT_COM1 TO blnCOM
                                        IF(ISTRUE(blnCOM)) THEN strCom = "COM1"
                                    END IF
    
                                CASE %IDC_OPT_COM2
                                    IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                                        CONTROL GET CHECK CB.HNDL, %IDC_OPT_COM2 TO blnCOM
                                        IF(ISTRUE(blnCOM)) THEN strCom = "COM2"
                                    END IF
                            END SELECT
    
                            'COMM OPEN strCom AS #hComm
                            'COMM SEND #hComm, CHR$(byte1) & CHR$(byte2) & CHR$(byte3) & CHR$(byte4)
                            'COMM CLOSE #hComm
                        END IF[/SIZE][/COLOR]
    or this code?

    Code:
    [COLOR="blue"][SIZE="4"]CASE %IDC_CMD_INC_1Hz
                        '==================================================================
                        'Private Sub cmd_Inc_1Hz_Click()
                        '   txt_455kHz.Text = txt_455kHz.Text - 1
                        '   Call cmd_Convert_Click
                        '   Call cmd_Send_Click
                        'End Sub
                        '==================================================================
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            LOCAL s             AS STRING
                            LOCAL value_text_2  AS LONG
    
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                            value_text_2 = VAL(s) : value_text_2 += 1
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
    
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
    
                        END IF[/SIZE][/COLOR]

    // This it the complete code for control DDS chip AD9835
    // Convert it from vb60 to PB
    Code:
    #PBFORMS Created v2.00
    '------------------------------------------------------------------------------
    ' 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
    '#Resource "win10_dds_AD9835_v1.0.pbr"
    #INCLUDE ONCE "WIN32API.INC"
    #INCLUDE ONCE "COMMCTRL.INC"
    #INCLUDE ONCE "PBForms.INC"
    #PBFORMS End Includes
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Constants **
    '------------------------------------------------------------------------------
    #PBFORMS Begin Constants
    %IDD_DIALOG1              =  101
    %IDC_TXT_50_MHZ           = 1004
    %IDC_LBL_REF_CLOCK        = 1002
    %IDC_LBL_SET_FREQ         = 1003
    %IDC_TXT_455000HZ         = 1005
    %IDC_FRA_FRAME1           = 1001
    %IDC_LBL_DIVIDER          = 1006
    %IDC_TXT_NO_CONV          = 1007
    %IDC_CMD_CONVERT          = 1008
    %IDC_CMD_SEND             = 1009
    %IDC_CMD_INFO             = 1011
    %IDC_LBL_COMM_SETTINGS    = 1013
    %IDC_FRA_COMMUNICATION    = 1012
    %IDC_OPT_COM1             = 1014
    %IDC_OPT_COM2             = 1015
    %IDC_FRAME1               = 1016
    %IDC_LBL_1HZ              = 1031
    %IDC_LBL_1kHZ             = 1032
    %IDC_LBL_10kHz            = 1033
    %IDC_LBL_100kHz           = 1034
    %IDC_CMD_INC_1Hz          = 1022
    %IDC_CMD_DEC_1Hz          = 1025
    %IDC_CMD_INC_1kHz         = 1024
    %IDC_CMD_DEC_1kHz         = 1026
    %IDC_CMD_INC_10kHz        = 1027
    %IDC_CMD_DEC_10kHz        = 1029
    %IDC_CMD_INC_100kHz       = 1036
    %IDC_CMD_DEC_100kHz       = 1030
    %IDC_LABEL_4              = 1038
    %IDC_LABEL9               = 1040
    %IDC_LBL_NO_DATA_BYTE_4   = 1039
    %IDC_LABEL3               = 1049
    %IDC_LABEL10              = 1049
    %IDC_LBL_NO_DATA_BYTE_3   = 1041
    %IDC_LABEL2               = 1045
    %IDC_LBL_NO_DATA_BYTE_2   = 1044
    %IDC_LBL_NO_DATA_BYTE_1   = 1047
    %IDC_LABEL14              = 1046
    %IDC_LABEL15              = 1049
    %IDC_LABEL1               = 1048
    %IDC_FRA_DIVIDER_REGISTER = 1037
    #PBFORMS End Constants
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Declarations **
    '------------------------------------------------------------------------------
    DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
    DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
    #PBFORMS Declarations
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Main Application Entry Point **
    '------------------------------------------------------------------------------
    FUNCTION PBMAIN()
        PBFormsInitComCtls (%ICC_WIN95_CLASSES OR %ICC_DATE_CLASSES OR _
            %ICC_INTERNET_CLASSES)
    
        ShowDIALOG1 %HWND_DESKTOP
    END FUNCTION
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** CallBacks **
    '------------------------------------------------------------------------------
    CALLBACK FUNCTION ShowDIALOG1Proc()
        LOCAL byte4, byte3, byte2, byte1 AS BYTE
    
        SELECT CASE AS LONG CB.MSG
            CASE %WM_INITDIALOG
                ' Initialization handler
    
            CASE %WM_NCACTIVATE
                STATIC hWndSaveFocus AS DWORD
                IF ISFALSE CB.WPARAM 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 CB.CTL
    
                    CASE %IDC_CMD_CONVERT
                        LOCAL blnCOM AS LONG
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            '================================================================
                            'Dim phasestep As Variant
                            'Dim divider As Double
                            '================================================================
                            LOCAL divider         AS DOUBLE
                            LOCAL phase_step      AS LONG
                            LOCAL str_phase_step  AS STRING
                            LOCAL str_divider     AS STRING
    
                            '================================================================
                            'phasestep = txt_50MHz.Text * 1000000 / 2 ^ 32
                            'divider = txt_455kHz.Text / phasestep
                            'txt_No_Conv.Text = divider
                            '//divider = 16777216 + 256 + 65536
                            '================================================================
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_50_MHZ TO str_phase_step
                            phase_step = VAL(str_phase_step) : phase_step *= 1000000 / 2 ^ 32
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO str_divider
                            divider = VAL(str_divider) : divider /= phase_step
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_NO_CONV, STR$(divider)
    
                            '================================================================
                            'byte4 = 0
                            'Do While (byte4 * 16777216) <= divider
                            '   byte4 = byte4 + 1
                            '//divider = divider - 16777216
                            'Loop
                            'byte4 = byte4 - 1
                            'divider = divider - (byte4 * 16777216)
                            'lbl_No_Data_Byte4.Caption = byte4
                            '================================================================
    
                            byte4 = 0
                            DO WHILE((Byte4 * 16777216) <= divider)
                                INCR Byte4
                            LOOP
                            DECR byte4
                            divider -= (byte4 * 16777216)
                            CONTROL SET TEXT CB.HNDL, %IDC_LBL_NO_DATA_BYTE_4, STR$(byte4)
    
                            '================================================================
                            'byte3 = 0
                            'DO WHILE (byte3 * 65536) <= divider
                            '    byte3 = byte3 + 1
                            'LOOP
                            'byte3 = byte3 - 1
                            'divider = divider - (byte3 * 65536)
                            'lbl_No_Data_Byte3.Caption = byte3
                            '================================================================
    
                            byte3 = 0
                            DO WHILE((Byte3 * 65536) <= divider)
                                INCR Byte3
                            LOOP
                            DECR byte3
                            divider -= (byte3 * 65536)
                            CONTROL SET TEXT CB.HNDL, %IDC_LBL_NO_DATA_BYTE_3, STR$(byte3)
    
                            '================================================================
                            'byte2 = 0
                            'Do While (byte2 * 256) <= divider
                            '    byte2 = byte2 + 1
                            'Loop
                            'byte2 = byte2 - 1
                            'divider = divider - (byte2 * 256)
                            'lbl_No_Data_Byte2.Caption = byte2
                            '================================================================
    
                            byte2 = 0
                            DO WHILE((Byte2 * 256) <= divider)
                                INCR Byte2
                            LOOP
                            DECR byte2
                            divider -= (byte2 * 256)
                            CONTROL SET TEXT CB.HNDL, %IDC_LBL_NO_DATA_BYTE_2, STR$(byte2)
    
                            '================================================================
                            'byte1 = CInt(divider)
                            'lbl_No_Data_Byte1.Caption = byte1
                            '================================================================
                            byte1 = CINT(divider)
                            CONTROL SET TEXT CB.HNDL, %IDC_LBL_NO_DATA_BYTE_1, STR$(byte1)
                        END IF
    
                    CASE %IDC_CMD_SEND
                            '================================================================
                            'Private Sub cmdSend_Click()
                            '   Call Command1_Click
                            '   If Option1.Value = True Then
                            '       MSComm1.CommPort = 1
                            '   Else
                            '       MSComm1.CommPort = 2
                            '   End If
                            '   MSComm1.PortOpen = True
                            '   MSComm1.Output = Chr(byte1) + Chr(byte2) + Chr(byte3) + Chr(byte4)
                            '   MSComm1.PortOpen = False
                            'End Sub
                            '================================================================
    
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            SELECT CASE AS LONG CB.CTL
                                CASE %IDC_OPT_COM1
                                    IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                                        CONTROL GET CHECK CB.HNDL, %IDC_OPT_COM1 TO blnCOM
                                        IF(ISTRUE(blnCOM)) THEN strCom = "COM1"
                                    END IF
    
                                CASE %IDC_OPT_COM2
                                    IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                                        CONTROL GET CHECK CB.HNDL, %IDC_OPT_COM2 TO blnCOM
                                        IF(ISTRUE(blnCOM)) THEN strCom = "COM2"
                                    END IF
                            END SELECT
    
                            'COMM OPEN strCom AS #hComm
                            'COMM SEND #hComm, CHR$(byte1) & CHR$(byte2) & CHR$(byte3) & CHR$(byte4)
                            'COMM CLOSE #hComm
                        END IF
    
                    CASE %IDC_CMD_INFO
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            MSGBOX "%IDC_CMD_INFO=" + FORMAT$(%IDC_CMD_INFO), _
                                %MB_TASKMODAL
                        END IF
    
                    CASE %IDC_CMD_INC_1Hz
                        '==================================================================
                        'Private Sub cmd_Inc_1Hz_Click()
                        '   txt_455kHz.Text = txt_455kHz.Text - 1
                        '   Call cmd_Convert_Click
                        '   Call cmd_Send_Click
                        'End Sub
                        '==================================================================
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            LOCAL s             AS STRING
                            LOCAL value_text_2  AS LONG
    
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                            value_text_2 = VAL(s) : value_text_2 += 1
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
    
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
    
                        END IF
    
                    CASE %IDC_CMD_INC_1kHz
                        '==================================================================
                        'Private Sub cmd_Inc_1kHz_Click()
                        '   txt_455kHz.Text = txt_455kHz.Text - 1000
                        '   Call cmd_Convert_Click
                        '   Call cmd_Send_Click
                        'End Sub
                        '==================================================================
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                            value_text_2 = VAL(s) : value_text_2 += 1000
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                        END IF
    
                    CASE %IDC_CMD_DEC_1Hz
                         '==================================================================
                        'Private Sub cmd_Dec_1Hz_Click()
                        '   txt_455kHz.Text = txt_455kHz.Text - 1
                        '   Call cmd_Convert_Click
                        '   Call cmd_Send_Click
                        'End Sub
                        '==================================================================
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            'Text2.Text = Text2.Text - 1
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                            value_text_2 = VAL(s) : value_text_2 -= 1
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                        END IF
    
                    CASE %IDC_CMD_DEC_1kHz
                        '==================================================================
                        'Private Sub cmd_Dec_1kHz_Click()
                        '   txt_455kHz.Text = txt_455kHz.Text - 1000
                        '   Call cmd_Convert_Click
                        '   Call cmd_Send_Click
                        'End Sub
                        '==================================================================
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                            value_text_2 = VAL(s) : value_text_2 -= 1000
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                        END IF
    
                    CASE %IDC_CMD_INC_10kHz
                        '==================================================================
                        'Private Sub cmd_Inc_10kHz_Click()
                        '   txt_455kHz.Text = txt_455kHz.Text - 10000
                        '   Call cmd_Convert_Click
                        '   Call cmd_Send_Click
                        'End Sub
                        '==================================================================
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                            value_text_2 = VAL(s) : value_text_2 += 10000
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                        END IF
    
                    CASE %IDC_CMD_INC_100kHz
                        '==================================================================
                        'Private Sub cmd_Incr_100kHz_Click()
                        '   txt_455kHz.Text = txt_455kHz.Text + 100000
                        '   Call cmd_Convert_Click
                        '   Call cmd_Send_Click
                        '==================================================================
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                           CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                            value_text_2 = VAL(s) : value_text_2 += 100000
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                        END IF
    
                    CASE %IDC_CMD_DEC_10kHz
                        '==================================================================
                        'Private Sub cmd_Dec_10kHz_Click()
                        '   txt_455kHz.Text = txt_455kHz.Text - 100000
                        '   Call cmd_Convert_Click
                        '   Call cmd_Send_Click
                        'End Sub
                        '==================================================================
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                            value_text_2 = VAL(s) : value_text_2 -= 10000
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                        END IF
    
                    CASE %IDC_CMD_DEC_100kHz
                        '==================================================================
                        'Private Sub cmd_Dec_100kHz_Click()
                        '   txt_455kHz.Text = txt_455kHz.Text - 100000
                        '   Call cmd_Convert_Click
                        '   Call cmd_Send_Click
                        '==================================================================
    
                        IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                            CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                            value_text_2 = VAL(s) : value_text_2 -= 100000
                            CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                            DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                        END IF
    
                END SELECT
        END SELECT
    END FUNCTION
    Can somebody here help me what wrong here when click the button "Send" or "Convert"?

    #2
    I dont have the time at the moment to look at it sorry, but have you tried using the PB command: #DEBUG CODE ON
    also #DEBUG DISPLAY ON
    and #DEBUG ERROR ON
    put those at the very start of your source code, it should give you extra information regarding crashes etc, including which line it was on
    Last edited by Wayne Diamond; 16 Nov 2014, 07:46 AM.
    -

    Comment


      #3
      Originally posted by Wayne Diamond View Post
      I dont have the time at the moment to look at it sorry, but have you tried using the PB command: #DEBUG CODE ON
      also #DEBUG DISPLAY ON
      and #DEBUG ERROR ON
      put those at the very start of your source code, it should give you extra information regarding crashes etc, including which line it was on
      Later time is OKE

      I try this but I can't compiled it

      Code:
      #PBFORMS Created v2.00
      '------------------------------------------------------------------------------
      ' 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
      '#Resource "win10_dds_AD9835_v1.0.pbr"
      #INCLUDE ONCE "WIN32API.INC"
      #INCLUDE ONCE "COMMCTRL.INC"
      #INCLUDE ONCE "PBForms.INC"
      #PBFORMS End Includes
      '------------------------------------------------------------------------------
      
      '------------------------------------------------------------------------------
      '   ** Constants **
      '------------------------------------------------------------------------------
      #PBFORMS Begin Constants
      %IDD_DIALOG1              =  101
      %IDC_TXT_50_MHZ           = 1004
      %IDC_LBL_REF_CLOCK        = 1002
      %IDC_LBL_SET_FREQ         = 1003
      %IDC_TXT_455000HZ         = 1005
      %IDC_FRA_FRAME1           = 1001
      %IDC_LBL_DIVIDER          = 1006
      %IDC_TXT_NO_CONV          = 1007
      %IDC_CMD_CONVERT          = 1008
      %IDC_CMD_SEND             = 1009
      %IDC_CMD_INFO             = 1011
      %IDC_LBL_COMM_SETTINGS    = 1013
      %IDC_FRA_COMMUNICATION    = 1012
      %IDC_OPT_COM1             = 1014
      %IDC_OPT_COM2             = 1015
      %IDC_FRAME1               = 1016
      %IDC_LBL_1HZ              = 1031
      %IDC_LBL_1kHZ             = 1032
      %IDC_LBL_10kHz            = 1033
      %IDC_LBL_100kHz           = 1034
      %IDC_CMD_INC_1Hz          = 1022
      %IDC_CMD_DEC_1Hz          = 1025
      %IDC_CMD_INC_1kHz         = 1024
      %IDC_CMD_DEC_1kHz         = 1026
      %IDC_CMD_INC_10kHz        = 1027
      %IDC_CMD_DEC_10kHz        = 1029
      %IDC_CMD_INC_100kHz       = 1036
      %IDC_CMD_DEC_100kHz       = 1030
      %IDC_LABEL_4              = 1038
      %IDC_LABEL9               = 1040
      %IDC_LBL_NO_DATA_BYTE_4   = 1039
      %IDC_LABEL3               = 1049
      %IDC_LABEL10              = 1049
      %IDC_LBL_NO_DATA_BYTE_3   = 1041
      %IDC_LABEL2               = 1045
      %IDC_LBL_NO_DATA_BYTE_2   = 1044
      %IDC_LBL_NO_DATA_BYTE_1   = 1047
      %IDC_LABEL14              = 1046
      %IDC_LABEL15              = 1049
      %IDC_LABEL1               = 1048
      %IDC_FRA_DIVIDER_REGISTER = 1037
      #PBFORMS End Constants
      '------------------------------------------------------------------------------
      [SIZE="4"][COLOR="Red"][B]#DEBUG ERROR    ON
      #DEBUG DISPLAY  ON
      #DEBUG CODE     ON[/B][/COLOR][/SIZE]
      
      '------------------------------------------------------------------------------
      '   ** Declarations **
      '------------------------------------------------------------------------------
      DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
      DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
      #PBFORMS Declarations
      '------------------------------------------------------------------------------
      
      '------------------------------------------------------------------------------
      '   ** Main Application Entry Point **
      '------------------------------------------------------------------------------
      FUNCTION PBMAIN()
      
          PBFormsInitComCtls (%ICC_WIN95_CLASSES OR %ICC_DATE_CLASSES OR _
              %ICC_INTERNET_CLASSES)
      
          ShowDIALOG1 %HWND_DESKTOP
      END FUNCTION
      '------------------------------------------------------------------------------
      
      '------------------------------------------------------------------------------
      '   ** CallBacks **
      '------------------------------------------------------------------------------
      CALLBACK FUNCTION ShowDIALOG1Proc()
          LOCAL byte4, byte3, byte2, byte1 AS BYTE
      
          SELECT CASE AS LONG CB.MSG
              CASE %WM_INITDIALOG
                  ' Initialization handler
      
              CASE %WM_NCACTIVATE
                  STATIC hWndSaveFocus AS DWORD
                  IF ISFALSE CB.WPARAM 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 CB.CTL
      
                      CASE %IDC_CMD_CONVERT
                          LOCAL blnCOM AS LONG
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              '================================================================
                              'Dim phasestep As Variant
                              'Dim divider As Double
                              '================================================================
                              LOCAL divider         AS DOUBLE
                              LOCAL phase_step      AS LONG
                              LOCAL str_phase_step  AS STRING
                              LOCAL str_divider     AS STRING
      
                              '================================================================
                              'phasestep = txt_50MHz.Text * 1000000 / 2 ^ 32
                              'divider = txt_455kHz.Text / phasestep
                              'txt_No_Conv.Text = divider
                              '//divider = 16777216 + 256 + 65536
                              '================================================================
                              CONTROL GET TEXT CB.HNDL, %IDC_TXT_50_MHZ TO str_phase_step
                              phase_step = VAL(str_phase_step) : phase_step *= 1000000 / 2 ^ 32
                              CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO str_divider
                              divider = VAL(str_divider) : divider /= phase_step
                              CONTROL SET TEXT CB.HNDL, %IDC_TXT_NO_CONV, STR$(divider)
      
                              '================================================================
                              'byte4 = 0
                              'Do While (byte4 * 16777216) <= divider
                              '   byte4 = byte4 + 1
                              '//divider = divider - 16777216
                              'Loop
                              'byte4 = byte4 - 1
                              'divider = divider - (byte4 * 16777216)
                              'lbl_No_Data_Byte4.Caption = byte4
                              '================================================================
      
                              byte4 = 0
                              DO WHILE((Byte4 * 16777216) <= divider)
                                  INCR Byte4
                              LOOP
                              DECR byte4
                              divider -= (byte4 * 16777216)
                              CONTROL SET TEXT CB.HNDL, %IDC_LBL_NO_DATA_BYTE_4, STR$(byte4)
      
                              '================================================================
                              'byte3 = 0
                              'DO WHILE (byte3 * 65536) <= divider
                              '    byte3 = byte3 + 1
                              'LOOP
                              'byte3 = byte3 - 1
                              'divider = divider - (byte3 * 65536)
                              'lbl_No_Data_Byte3.Caption = byte3
                              '================================================================
      
                              byte3 = 0
                              DO WHILE((Byte3 * 65536) <= divider)
                                  INCR Byte3
                              LOOP
                              DECR byte3
                              divider -= (byte3 * 65536)
                              CONTROL SET TEXT CB.HNDL, %IDC_LBL_NO_DATA_BYTE_3, STR$(byte3)
      
                              '================================================================
                              'byte2 = 0
                              'Do While (byte2 * 256) <= divider
                              '    byte2 = byte2 + 1
                              'Loop
                              'byte2 = byte2 - 1
                              'divider = divider - (byte2 * 256)
                              'lbl_No_Data_Byte2.Caption = byte2
                              '================================================================
      
                              byte2 = 0
                              DO WHILE((Byte2 * 256) <= divider)
                                  INCR Byte2
                              LOOP
                              DECR byte2
                              divider -= (byte2 * 256)
                              CONTROL SET TEXT CB.HNDL, %IDC_LBL_NO_DATA_BYTE_2, STR$(byte2)
      
                              '================================================================
                              'byte1 = CInt(divider)
                              'lbl_No_Data_Byte1.Caption = byte1
                              '================================================================
                              byte1 = CINT(divider)
                              CONTROL SET TEXT CB.HNDL, %IDC_LBL_NO_DATA_BYTE_1, STR$(byte1)
                          END IF
      
                      CASE %IDC_CMD_SEND
                              '================================================================
                              'Private Sub cmdSend_Click()
                              '   Call Command1_Click
                              '   If Option1.Value = True Then
                              '       MSComm1.CommPort = 1
                              '   Else
                              '       MSComm1.CommPort = 2
                              '   End If
                              '   MSComm1.PortOpen = True
                              '   MSComm1.Output = Chr(byte1) + Chr(byte2) + Chr(byte3) + Chr(byte4)
                              '   MSComm1.PortOpen = False
                              'End Sub
                              '================================================================
      
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                              SELECT CASE AS LONG CB.CTL
                                  CASE %IDC_OPT_COM1
                                      IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                                          CONTROL GET CHECK CB.HNDL, %IDC_OPT_COM1 TO blnCOM
                                          IF(ISTRUE(blnCOM)) THEN strCom = "COM1"
                                      END IF
      
                                  CASE %IDC_OPT_COM2
                                      IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                                          CONTROL GET CHECK CB.HNDL, %IDC_OPT_COM2 TO blnCOM
                                          IF(ISTRUE(blnCOM)) THEN strCom = "COM2"
                                      END IF
                              END SELECT
      
                              'COMM OPEN strCom AS #hComm
                              'COMM SEND #hComm, CHR$(byte1) & CHR$(byte2) & CHR$(byte3) & CHR$(byte4)
                              'COMM CLOSE #hComm
                          END IF
      
                      CASE %IDC_CMD_INFO
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              MSGBOX "%IDC_CMD_INFO=" + FORMAT$(%IDC_CMD_INFO), _
                                  %MB_TASKMODAL
                          END IF
      
                      CASE %IDC_CMD_INC_1Hz
                          '==================================================================
                          'Private Sub cmd_Inc_1Hz_Click()
                          '   txt_455kHz.Text = txt_455kHz.Text - 1
                          '   Call cmd_Convert_Click
                          '   Call cmd_Send_Click
                          'End Sub
                          '==================================================================
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              LOCAL s             AS STRING
                              LOCAL value_text_2  AS LONG
      
                              CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                              value_text_2 = VAL(s) : value_text_2 += 1
                              CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
      
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
      
                          END IF
      
                      CASE %IDC_CMD_INC_1kHz
                          '==================================================================
                          'Private Sub cmd_Inc_1kHz_Click()
                          '   txt_455kHz.Text = txt_455kHz.Text - 1000
                          '   Call cmd_Convert_Click
                          '   Call cmd_Send_Click
                          'End Sub
                          '==================================================================
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                              value_text_2 = VAL(s) : value_text_2 += 1000
                              CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                          END IF
      
                      CASE %IDC_CMD_DEC_1Hz
                           '==================================================================
                          'Private Sub cmd_Dec_1Hz_Click()
                          '   txt_455kHz.Text = txt_455kHz.Text - 1
                          '   Call cmd_Convert_Click
                          '   Call cmd_Send_Click
                          'End Sub
                          '==================================================================
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              'Text2.Text = Text2.Text - 1
                              CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                              value_text_2 = VAL(s) : value_text_2 -= 1
                              CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                          END IF
      
                      CASE %IDC_CMD_DEC_1kHz
                          '==================================================================
                          'Private Sub cmd_Dec_1kHz_Click()
                          '   txt_455kHz.Text = txt_455kHz.Text - 1000
                          '   Call cmd_Convert_Click
                          '   Call cmd_Send_Click
                          'End Sub
                          '==================================================================
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                              value_text_2 = VAL(s) : value_text_2 -= 1000
                              CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                          END IF
      
                      CASE %IDC_CMD_INC_10kHz
                          '==================================================================
                          'Private Sub cmd_Inc_10kHz_Click()
                          '   txt_455kHz.Text = txt_455kHz.Text - 10000
                          '   Call cmd_Convert_Click
                          '   Call cmd_Send_Click
                          'End Sub
                          '==================================================================
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                              value_text_2 = VAL(s) : value_text_2 += 10000
                              CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                          END IF
      
                      CASE %IDC_CMD_INC_100kHz
                          '==================================================================
                          'Private Sub cmd_Incr_100kHz_Click()
                          '   txt_455kHz.Text = txt_455kHz.Text + 100000
                          '   Call cmd_Convert_Click
                          '   Call cmd_Send_Click
                          '==================================================================
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                             CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                              value_text_2 = VAL(s) : value_text_2 += 100000
                              CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                          END IF
      
                      CASE %IDC_CMD_DEC_10kHz
                          '==================================================================
                          'Private Sub cmd_Dec_10kHz_Click()
                          '   txt_455kHz.Text = txt_455kHz.Text - 100000
                          '   Call cmd_Convert_Click
                          '   Call cmd_Send_Click
                          'End Sub
                          '==================================================================
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                              value_text_2 = VAL(s) : value_text_2 -= 10000
                              CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                          END IF
      
                      CASE %IDC_CMD_DEC_100kHz
                          '==================================================================
                          'Private Sub cmd_Dec_100kHz_Click()
                          '   txt_455kHz.Text = txt_455kHz.Text - 100000
                          '   Call cmd_Convert_Click
                          '   Call cmd_Send_Click
                          '==================================================================
      
                          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                              CONTROL GET TEXT CB.HNDL, %IDC_TXT_455000HZ TO s
                              value_text_2 = VAL(s) : value_text_2 -= 100000
                              CONTROL SET TEXT CB.HNDL, %IDC_TXT_455000HZ, STR$(value_text_2)
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                              DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_SEND, %BN_CLICKED
                          END IF
      
                  END SELECT
          END SELECT
      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", 357, 191, 292, 184, TO hDlg
          CONTROL ADD FRAME,   hDlg, %IDC_FRA_FRAME1, "Ref Clock and Set " + _
              "Frequency", 5, 5, 155, 55
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_REF_CLOCK, "Ref Clock (MHz)", 10, 20, _
              70, 15
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_SET_FREQ, "Set Frequency (Hz)", 90, _
              20, 65, 15
          CONTROL ADD TEXTBOX, hDlg, %IDC_TXT_50_MHZ, "50", 10, 40, 70, 15
          CONTROL ADD TEXTBOX, hDlg, %IDC_TXT_455000HZ, "455000", 85, 40, 70, 15
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_DIVIDER, "Divider", 8, 72, 65, 12
          CONTROL ADD TEXTBOX, hDlg, %IDC_TXT_NO_CONV, "No conversion", 8, 84, 147, _
              15
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_CONVERT, "Convert", 8, 104, 45, 15
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_SEND, "Send", 60, 104, 45, 15
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_INFO, "Info", 108, 104, 45, 15
          CONTROL ADD FRAME,   hDlg, %IDC_FRA_COMMUNICATION, "Communication", 164, _
              4, 124, 56
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_COMM_SETTINGS, "19200 baud, n, 8, 1", _
              170, 20, 95, 10
          CONTROL ADD OPTION,  hDlg, %IDC_OPT_COM1, "COM1", 172, 28, 60, 15
          CONTROL ADD OPTION,  hDlg, %IDC_OPT_COM2, "COM2", 172, 44, 60, 15
          CONTROL ADD FRAME,   hDlg, %IDC_FRAME1, "Frame1", 164, 72, 124, 48
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_INC_1Hz, "+", 176, 88, 12, 12
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_INC_1kHz, "+", 176, 104, 12, 12
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_DEC_1Hz, "-", 212, 88, 12, 12
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_DEC_1kHz, "-", 212, 104, 12, 12
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_INC_10kHz, "+", 228, 88, 12, 12
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_INC_100kHz, "+", 228, 104, 12, 12
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_DEC_10kHz, "-", 272, 88, 12, 12
          CONTROL ADD BUTTON,  hDlg, %IDC_CMD_DEC_100kHz, "-", 272, 104, 12, 12
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_1HZ, "1Hz", 192, 88, 20, 16
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_1kHZ, "1kHz", 192, 104, 20, 15
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_10kHz, "10kHz", 244, 88, 30, 12
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_100kHz, "100 kHz", 244, 104, 30, 12
          CONTROL ADD FRAME,   hDlg, %IDC_FRA_DIVIDER_REGISTER, "Divider Register", _
              12, 128, 276, 52
          CONTROL ADD LABEL,   hDlg, %IDC_LABEL_4, "FREQ1 8H MSB", 16, 140, 60, 12
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_NO_DATA_BYTE_4, "No Data", 16, 152, _
              60, 12, %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT OR %SS_SUNKEN, _
              %WS_EX_STATICEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING
          CONTROL SET COLOR    hDlg, %IDC_LBL_NO_DATA_BYTE_4, -1, %LTGRAY
          CONTROL ADD LABEL,   hDlg, %IDC_LABEL9, "Byte 4 to Send", 16, 164, 60, 12
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_NO_DATA_BYTE_3, "No Data", 80, 152, _
              60, 12, %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT OR %SS_SUNKEN, _
              %WS_EX_STATICEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING
          CONTROL SET COLOR    hDlg, %IDC_LBL_NO_DATA_BYTE_3, -1, %LTGRAY
          CONTROL ADD LABEL,   hDlg, %IDC_LABEL3, "FREQ0 8L MSB", 80, 140, 60, 12
          CONTROL ADD LABEL,   hDlg, %IDC_LABEL10, "Byte 3 to Send", 80, 164, 60, _
              12
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_NO_DATA_BYTE_2, "No Data", 144, 152, _
              60, 12, %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT OR %SS_SUNKEN, _
              %WS_EX_STATICEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING
          CONTROL SET COLOR    hDlg, %IDC_LBL_NO_DATA_BYTE_2, -1, %LTGRAY
          CONTROL ADD LABEL,   hDlg, %IDC_LABEL2, "FREQ1 8H LSB", 144, 140, 60, 12
          CONTROL ADD LABEL,   hDlg, %IDC_LABEL14, "Byte 2 to Send", 144, 164, 60, _
              12
          CONTROL ADD LABEL,   hDlg, %IDC_LBL_NO_DATA_BYTE_1, "No Data", 208, 152, _
              60, 12, %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT OR %SS_SUNKEN, _
              %WS_EX_STATICEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING
          CONTROL SET COLOR    hDlg, %IDC_LBL_NO_DATA_BYTE_1, -1, %LTGRAY
          CONTROL ADD LABEL,   hDlg, %IDC_LABEL1, "FREQ0 8L LSB", 208, 140, 60, 12
          CONTROL ADD LABEL,   hDlg, %IDC_LABEL15, "Byte 1 to Send", 208, 164, 60, _
              12
      #PBFORMS End Dialog
      
          DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt
      
      #PBFORMS Begin CleanUp %IDD_DIALOG1
      #PBFORMS End CleanUp
      
          FUNCTION = lRslt
      END FUNCTION
      '------------------------------------------------------------------------------

      Comment


        #4
        Stephane, a few minor problems and one big one I see.

        First, the easiest part. Part of your #DEBUG code should go at the top of the program like this:

        Code:
        #COMPILE EXE
        #DIM ALL
        
        [COLOR=Red]#DEBUG ERROR ON
        #DEBUG DISPLAY ON
        #TOOLS ON[/COLOR]
        The third debug line should go at the top of the callback. The #TOOLS command makes TRACE functions available.

        Add this line to the top of your PBMAIN function:

        Code:
        [COLOR=Red]TRACE NEW "tracefile.txt"[/COLOR]
        Add this line to the bottom of your PBMAIN function:

        Code:
        [COLOR=Red]TRACE CLOSE[/COLOR]
        Turn on #DEBUG and TRACE and DIM the variable "strCom":

        Code:
        CALLBACK FUNCTION ShowDIALOG1Proc()
            [COLOR=Red]#DEBUG CODE ON
            TRACE ON
        [/COLOR] 
            LOCAL byte4, byte3, byte2, byte1 AS BYTE
           [COLOR=Red] DIM strCom AS STRING[/COLOR]
        With those changes your code compiles in PBWin 10.03.

        The TRACE file on my machine shows an endless loop. I tried setting a default for the OPTION buttons, but that didn't help. Consider elevating the nested SELECT CASE where you GET CHECK to the top level SELECT. Remember that Windows is bumping your CALLBACK every few milliseconds and each time it's called only one item will be selected. You may want to consider using the DIALOG POST instead of SEND.

        I think it is likely that you never get to that nested SELECT CASE to check the COMs. I think your problem is here:

        [quote=Stephane Fonteyne;469098]
        Code:
        .
        .
        .
        CASE %WM_COMMAND
            .
            .
            .
            CASE %IDC_CMD_SEND
                IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                    DIALOG SEND CB.HNDL, %WM_COMMAND, %IDC_CMD_CONVERT, %BN_CLICKED
                    [COLOR=Red]SELECT CASE AS LONG CB.CTL
                        CASE %IDC_OPT_COM1
                            IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                                CONTROL GET CHECK CB.HNDL, %IDC_OPT_COM1 TO blnCOM
                                IF (ISTRUE(blnCOM)) THEN strCom = "COM1"
                            END IF
        
                        CASE %IDC_OPT_COM2
                            IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
                                CONTROL GET CHECK CB.HNDL, %IDC_OPT_COM2 TO blnCOM
                                IF (ISTRUE(blnCOM)) THEN strCom = "COM2"
                            END IF
        
                     END SELECT[/COLOR]
             .
             .
             .
             END SELECT
        ... but can't guarantee that's where it is. Just a quick look at your code. Hope it helps.

        Stan
        Last edited by StanHelton; 16 Nov 2014, 12:40 PM. Reason: Correct typo
        Do not go quiet into that good night,
        ... Rage, rage against the dark.

        Comment

        Working...
        X
        😀
        🥰
        🤢
        😎
        😡
        👍
        👎