• Welcome to Jose's Read Only Forum 2023.
 

Missing Coding

Started by Robert Sarrazin, January 10, 2008, 07:27:31 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Robert Sarrazin

How to go back and front with many dialog. The only way I figure out is to use DIALOG END CBHNDL, nice to go back to main but I can't go where I want. >:(
If I don't use DIALOG END CBHNDL all the windows stay on, and when I go back to main, a new instance windows reopen I can have many main windows.
In this example I want from main go to query and if customer not exist I want to insert(customer) and go back to query or main.





#DIM ALL
#INCLUDE "WIN32API.INC"

%IDD_main    =  101
%IDC_LABEL1  = 1001
%IDC_BUTTON1 = 1002
%IDC_BUTTON2 = 1003
%IDD_query   =  102
%IDC_LABEL2  = 1004
%IDC_BUTTON3 = 1005
%IDC_BUTTON4 = 1006
%IDD_insert  =  103
%IDC_LABEL3  = 1007
%IDC_BUTTON5 = 1008

DECLARE CALLBACK FUNCTION ShowmainProc()
DECLARE CALLBACK FUNCTION ShowqueryProc()
DECLARE CALLBACK FUNCTION ShowinsertProc()
DECLARE FUNCTION Showmain(BYVAL hParent AS DWORD) AS LONG
DECLARE FUNCTION Showquery(BYVAL hParent AS DWORD) AS LONG
DECLARE FUNCTION Showinsert(BYVAL hParent AS DWORD) AS LONG

FUNCTION PBMAIN()
    Showmain %HWND_DESKTOP
'   Showquery %HWND_DESKTOP
'   Showinsert %HWND_DESKTOP
END FUNCTION

CALLBACK FUNCTION ShowmainProc()
   
    SELECT CASE AS LONG CBMSG
        CASE %WM_INITDIALOG
            ' Initialization handler

        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_LABEL1

                CASE %IDC_BUTTON1
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        Showquery %HWND_DESKTOP
                    END IF

                CASE %IDC_BUTTON2
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        Showinsert %HWND_DESKTOP
                    END IF

            END SELECT
    END SELECT
END FUNCTION

CALLBACK FUNCTION ShowqueryProc()
   
    SELECT CASE AS LONG CBMSG
        CASE %WM_INITDIALOG
            ' Initialization handler

        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_LABEL2

                CASE %IDC_BUTTON3
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        Showinsert %HWND_DESKTOP
                       
                    END IF

                CASE %IDC_BUTTON4
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        DIALOG END CBHNDL
                       
                    END IF

            END SELECT
    END SELECT
END FUNCTION

CALLBACK FUNCTION ShowinsertProc()
   
    SELECT CASE AS LONG CBMSG
        CASE %WM_INITDIALOG
            ' Initialization handler

        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_LABEL3

                CASE %IDC_BUTTON5
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        DIALOG END CBHNDL
                    END IF

            END SELECT
    END SELECT
END FUNCTION

FUNCTION Showmain(BYVAL hParent AS DWORD) AS LONG
    LOCAL lRslt  AS LONG


    LOCAL hDlg   AS DWORD
    LOCAL hFont1 AS DWORD

    DIALOG NEW hParent, "Inventory V 0.01", 87, 122, 201, 121, %WS_POPUP OR _
        %WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_MINIMIZEBOX OR _
        %WS_MAXIMIZEBOX 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 LABEL,  hDlg, %IDC_LABEL1, "MAIN", 131, 45, 46, 17
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "Query", 30, 65, 50, 16
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON2, "Insert", 30, 90, 50, 16

    hFont1 = PBFormsMakeFont("MS Sans Serif", 18, 400, %FALSE, %FALSE, _
        %FALSE, %ANSI_CHARSET)

    CONTROL SEND hDlg, %IDC_LABEL1, %WM_SETFONT, hFont1, 0


    DIALOG SHOW MODAL hDlg, CALL ShowmainProc TO lRslt

    DeleteObject hFont1


    FUNCTION = lRslt
END FUNCTION

FUNCTION Showquery(BYVAL hParent AS DWORD) AS LONG
    LOCAL lRslt  AS LONG

    LOCAL hDlg   AS DWORD
    LOCAL hFont1 AS DWORD

    DIALOG NEW hParent, "Query", 122, 260, 201, 121, TO hDlg
    CONTROL ADD LABEL,  hDlg, %IDC_LABEL2, "Query", 130, 42, 48, 18
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON3, "Insert", 30, 60, 50, 16
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON4, "Main", 30, 90, 50, 16

    hFont1 = PBFormsMakeFont("MS Sans Serif", 18, 400, %FALSE, %FALSE, _
        %FALSE, %ANSI_CHARSET)

    CONTROL SEND hDlg, %IDC_LABEL2, %WM_SETFONT, hFont1, 0


    DIALOG SHOW MODAL hDlg, CALL ShowqueryProc TO lRslt

    DeleteObject hFont1


    FUNCTION = lRslt
END FUNCTION

FUNCTION Showinsert(BYVAL hParent AS DWORD) AS LONG
    LOCAL lRslt  AS LONG


    LOCAL hDlg   AS DWORD
    LOCAL hFont1 AS DWORD

    DIALOG NEW hParent, "Insert", 100, 302, 201, 121, TO hDlg
    CONTROL ADD LABEL,  hDlg, %IDC_LABEL3, "Insert", 140, 39, 45, 19
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON5, "Main", 30, 80, 50, 16

    hFont1 = PBFormsMakeFont("MS Sans Serif", 18, 400, %FALSE, %FALSE, _
        %FALSE, %ANSI_CHARSET)

    CONTROL SEND hDlg, %IDC_LABEL3, %WM_SETFONT, hFont1, 0


    DIALOG SHOW MODAL hDlg, CALL ShowinsertProc TO lRslt


    DeleteObject hFont1


    FUNCTION = lRslt
END FUNCTION
'-   >:(



Thanks for your help. ;)

José Roca

 
Don't use the desktop (%HWND_DESKTOP) as the parent of the other dialogs, but the handle of the dialog that calls them.



'------------------------------------------------------------------------------
'   ** Includes **
'------------------------------------------------------------------------------
#PBFORMS BEGIN INCLUDES
#IF NOT %DEF(%WINAPI)
    #INCLUDE "WIN32API.INC"
#ENDIF
#INCLUDE "PBForms.INC"
#PBFORMS END INCLUDES
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** Constants **
'------------------------------------------------------------------------------
#PBFORMS BEGIN CONSTANTS
%IDD_main    =  101
%IDC_LABEL1  = 1001
%IDC_BUTTON1 = 1002
%IDC_BUTTON2 = 1003
%IDD_query   =  102
%IDC_LABEL2  = 1004
%IDC_BUTTON3 = 1005
%IDC_BUTTON4 = 1006
%IDD_insert  =  103
%IDC_LABEL3  = 1007
%IDC_BUTTON5 = 1008
#PBFORMS END CONSTANTS
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** Declarations **
'------------------------------------------------------------------------------
DECLARE CALLBACK FUNCTION ShowmainProc()
DECLARE CALLBACK FUNCTION ShowqueryProc()
DECLARE CALLBACK FUNCTION ShowinsertProc()
DECLARE FUNCTION Showmain(BYVAL hParent AS DWORD) AS LONG
DECLARE FUNCTION Showquery(BYVAL hParent AS DWORD) AS LONG
DECLARE FUNCTION Showinsert(BYVAL hParent AS DWORD) AS LONG
#PBFORMS DECLARATIONS
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** Main Application Entry Point **
'------------------------------------------------------------------------------
FUNCTION PBMAIN()
    Showmain %HWND_DESKTOP
'   Showquery %HWND_DESKTOP
'   Showinsert %HWND_DESKTOP
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** CallBacks **
'------------------------------------------------------------------------------
CALLBACK FUNCTION ShowmainProc()
   
    SELECT CASE AS LONG CBMSG
        CASE %WM_INITDIALOG
            ' Initialization handler

        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_LABEL1

                CASE %IDC_BUTTON1
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        Showquery CBHNDL
                    END IF

                CASE %IDC_BUTTON2
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        Showinsert CBHNDL
                    END IF

            END SELECT
    END SELECT
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
CALLBACK FUNCTION ShowqueryProc()
   
    SELECT CASE AS LONG CBMSG
        CASE %WM_INITDIALOG
            ' Initialization handler

        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_LABEL2

                CASE %IDC_BUTTON3
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        Showinsert CBHNDL
                       
                    END IF

                CASE %IDC_BUTTON4
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        DIALOG END CBHNDL
                       
                    END IF

            END SELECT
    END SELECT
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
CALLBACK FUNCTION ShowinsertProc()
   
    SELECT CASE AS LONG CBMSG
        CASE %WM_INITDIALOG
            ' Initialization handler

        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_LABEL3

                CASE %IDC_BUTTON5
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        DIALOG END CBHNDL
                    END IF

            END SELECT
    END SELECT
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** Dialogs **
'------------------------------------------------------------------------------
FUNCTION Showmain(BYVAL hParent AS DWORD) AS LONG
    LOCAL lRslt  AS LONG

#PBFORMS BEGIN DIALOG %IDD_main->->
    LOCAL hDlg   AS DWORD
    LOCAL hFont1 AS DWORD

    DIALOG NEW hParent, "Inventory V 0.01", 87, 122, 201, 121, %WS_POPUP OR _
        %WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_MINIMIZEBOX OR _
        %WS_MAXIMIZEBOX 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 LABEL,  hDlg, %IDC_LABEL1, "MAIN", 131, 45, 46, 17
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "Query", 30, 65, 50, 16
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON2, "Insert", 30, 90, 50, 16

    hFont1 = PBFormsMakeFont("MS Sans Serif", 18, 400, %FALSE, %FALSE, _
        %FALSE, %ANSI_CHARSET)

    CONTROL SEND hDlg, %IDC_LABEL1, %WM_SETFONT, hFont1, 0
#PBFORMS END DIALOG

    DIALOG SHOW MODAL hDlg, CALL ShowmainProc TO lRslt

#PBFORMS BEGIN CLEANUP %IDD_main
    DeleteObject hFont1
#PBFORMS END CLEANUP

    FUNCTION = lRslt
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
FUNCTION Showquery(BYVAL hParent AS DWORD) AS LONG
    LOCAL lRslt  AS LONG

#PBFORMS BEGIN DIALOG %IDD_query->->
    LOCAL hDlg   AS DWORD
    LOCAL hFont1 AS DWORD

    DIALOG NEW hParent, "Query", 122, 260, 201, 121, TO hDlg
    CONTROL ADD LABEL,  hDlg, %IDC_LABEL2, "Query", 130, 42, 48, 18
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON3, "Insert", 30, 60, 50, 16
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON4, "Exit", 30, 90, 50, 16

    hFont1 = PBFormsMakeFont("MS Sans Serif", 18, 400, %FALSE, %FALSE, _
        %FALSE, %ANSI_CHARSET)

    CONTROL SEND hDlg, %IDC_LABEL2, %WM_SETFONT, hFont1, 0
#PBFORMS END DIALOG

    DIALOG SHOW MODAL hDlg, CALL ShowqueryProc TO lRslt

#PBFORMS BEGIN CLEANUP %IDD_query
    DeleteObject hFont1
#PBFORMS END CLEANUP

    FUNCTION = lRslt
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
FUNCTION Showinsert(BYVAL hParent AS DWORD) AS LONG
    LOCAL lRslt  AS LONG

#PBFORMS BEGIN DIALOG %IDD_insert->->
    LOCAL hDlg   AS DWORD
    LOCAL hFont1 AS DWORD

    DIALOG NEW hParent, "Insert", 100, 302, 201, 121, TO hDlg
    CONTROL ADD LABEL,  hDlg, %IDC_LABEL3, "Insert", 140, 39, 45, 19
    CONTROL ADD BUTTON, hDlg, %IDC_BUTTON5, "Exit", 30, 80, 50, 16

    hFont1 = PBFormsMakeFont("MS Sans Serif", 18, 400, %FALSE, %FALSE, _
        %FALSE, %ANSI_CHARSET)

    CONTROL SEND hDlg, %IDC_LABEL3, %WM_SETFONT, hFont1, 0
#PBFORMS END DIALOG

    DIALOG SHOW MODAL hDlg, CALL ShowinsertProc TO lRslt

#PBFORMS BEGIN CLEANUP %IDD_insert
    DeleteObject hFont1
#PBFORMS END CLEANUP

    FUNCTION = lRslt
END FUNCTION
'------------------------------------------------------------------------------