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. ;)
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
'------------------------------------------------------------------------------