Одним из вариантов может быть сначала отключить все, кроме этого кадра, а затем явно включить кадр.
Учитывая, что FRAME-A
- это то, что вы хотите включить:
DISABLE ALL WITH FRAME DEFAULT-FRAME.
ENABLE ALL WITH FRAME FRAME-A.
Код нижедает пару примеров включения / выключения (и некоторые фиктивные детали интерфейса). Однако это довольно долго, поскольку это графический код "appbuilder", включающий в себя множество препроцессоров.
Вставьте его в редактор процедур и запустите!
&Scoped-define WINDOW-NAME C-Win
/*------------------------------------------------------------------------
File:
Description:
Input Parameters:
<none>
Output Parameters:
<none>
Author:
Created:
------------------------------------------------------------------------*/
/* This .W file was created with the Progress AppBuilder. */
/*----------------------------------------------------------------------*/
/* Create an unnamed pool to store all the widgets created
by this procedure. This is a good default which assures
that this procedure's triggers and internal procedures
will execute in this procedure's storage, and that proper
cleanup will occur on deletion of the procedure. */
CREATE WIDGET-POOL.
/* *************************** Definitions ************************** */
/* Parameters Definitions --- */
/* Local Variable Definitions --- */
/* ******************** Preprocessor Definitions ******************** */
&Scoped-define PROCEDURE-TYPE Window
&Scoped-define DB-AWARE no
/* Name of designated FRAME-NAME and/or first browse and/or first query */
&Scoped-define FRAME-NAME DEFAULT-FRAME
/* Standard List Definitions */
&Scoped-Define ENABLED-OBJECTS BUTTON-3 RADIO-SET-1 BUTTON-4
&Scoped-Define DISPLAYED-OBJECTS RADIO-SET-1
/* Custom List Definitions */
/* List-1,List-2,List-3,List-4,List-5,List-6 */
/* *********************** Control Definitions ********************** */
/* Define the widget handle for the window */
DEFINE VAR C-Win AS WIDGET-HANDLE NO-UNDO.
/* Definitions of the field level widgets */
DEFINE BUTTON BUTTON-3
LABEL "Disable all"
SIZE 15 BY 1.14.
DEFINE BUTTON BUTTON-4
LABEL "Enable all"
SIZE 15 BY 1.14.
DEFINE VARIABLE RADIO-SET-1 AS INTEGER
VIEW-AS RADIO-SET VERTICAL
RADIO-BUTTONS
"Item 1", 1,
"Item 2", 2,
"Item 3", 3
SIZE 12 BY 3 NO-UNDO.
DEFINE BUTTON BUTTON-1
LABEL "Disable all but this frame"
SIZE 29 BY 1.14.
DEFINE BUTTON BUTTON-6
LABEL "Enable all but this frame"
SIZE 29 BY 1.14.
DEFINE VARIABLE EDITOR-1 AS CHARACTER
VIEW-AS EDITOR NO-WORD-WRAP SCROLLBAR-HORIZONTAL SCROLLBAR-VERTICAL
SIZE 35 BY 2.14 NO-UNDO.
DEFINE VARIABLE FILL-IN-1 AS CHARACTER FORMAT "X(256)":U
LABEL "Fill 1"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.
DEFINE VARIABLE TOGGLE-1 AS LOGICAL INITIAL no
LABEL "Toggle 1"
VIEW-AS TOGGLE-BOX
SIZE 3 BY .71 NO-UNDO.
DEFINE BUTTON BUTTON-2
LABEL "Disable this frame"
SIZE 19 BY 1.14.
DEFINE BUTTON BUTTON-5
LABEL "Enable this frame"
SIZE 19 BY 1.14.
DEFINE VARIABLE COMBO-BOX-1 AS CHARACTER FORMAT "X(256)":U
LABEL "Combo 1"
VIEW-AS COMBO-BOX INNER-LINES 5
LIST-ITEMS "Item 1"
DROP-DOWN-LIST
SIZE 16 BY 1 NO-UNDO.
DEFINE VARIABLE FILL-IN-2 AS CHARACTER FORMAT "X(256)":U
LABEL "Fill 2"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.
/* ************************ Frame Definitions *********************** */
DEFINE FRAME DEFAULT-FRAME
BUTTON-3 AT ROW 1.71 COL 95 WIDGET-ID 6
RADIO-SET-1 AT ROW 2.67 COL 63 NO-LABEL WIDGET-ID 2
BUTTON-4 AT ROW 3.14 COL 95 WIDGET-ID 8
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 114 BY 16 WIDGET-ID 100.
DEFINE FRAME FRAME-B
BUTTON-2 AT ROW 1.24 COL 39 WIDGET-ID 2
COMBO-BOX-1 AT ROW 1.48 COL 11 COLON-ALIGNED WIDGET-ID 6
BUTTON-5 AT ROW 2.67 COL 39 WIDGET-ID 10
FILL-IN-2 AT ROW 2.91 COL 11 COLON-ALIGNED WIDGET-ID 8
WITH 1 DOWN KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 50 ROW 6.71
SIZE 60 BY 5.48
TITLE "Frame B" WIDGET-ID 300.
DEFINE FRAME FRAME-A
BUTTON-1 AT ROW 1.24 COL 8 WIDGET-ID 6
BUTTON-6 AT ROW 2.91 COL 8 WIDGET-ID 10
TOGGLE-1 AT ROW 3.38 COL 3 WIDGET-ID 2
EDITOR-1 AT ROW 4.33 COL 3 NO-LABEL WIDGET-ID 4
FILL-IN-1 AT ROW 6.71 COL 21 COLON-ALIGNED WIDGET-ID 8
WITH 1 DOWN KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 7 ROW 1.48
SIZE 38 BY 8.1
TITLE "Frame A" WIDGET-ID 200.
/* *********************** Procedure Settings ************************ */
/* Settings for THIS-PROCEDURE
Type: Window
Allow: Basic,Browse,DB-Fields,Window,Query
Other Settings: COMPILE
*/
/* ************************* Create Window ************************** */
IF SESSION:DISPLAY-TYPE = "GUI":U THEN
CREATE WINDOW C-Win ASSIGN
HIDDEN = YES
TITLE = "<insert window title>"
HEIGHT = 16
WIDTH = 114
MAX-HEIGHT = 16
MAX-WIDTH = 114
VIRTUAL-HEIGHT = 16
VIRTUAL-WIDTH = 114
RESIZE = yes
SCROLL-BARS = no
STATUS-AREA = no
BGCOLOR = ?
FGCOLOR = ?
KEEP-FRAME-Z-ORDER = yes
THREE-D = yes
MESSAGE-AREA = no
SENSITIVE = yes.
ELSE {&WINDOW-NAME} = CURRENT-WINDOW.
/* END WINDOW DEFINITION */
/* *********** Runtime Attributes and AppBuilder Settings *********** */
/* SETTINGS FOR WINDOW C-Win
VISIBLE,,RUN-PERSISTENT */
/* REPARENT FRAME */
ASSIGN FRAME FRAME-A:FRAME = FRAME DEFAULT-FRAME:HANDLE
FRAME FRAME-B:FRAME = FRAME DEFAULT-FRAME:HANDLE.
/* SETTINGS FOR FRAME DEFAULT-FRAME
FRAME-NAME */
DEFINE VARIABLE XXTABVALXX AS LOGICAL NO-UNDO.
ASSIGN XXTABVALXX = FRAME FRAME-A:MOVE-BEFORE-TAB-ITEM (BUTTON-3:HANDLE IN FRAME DEFAULT-FRAME)
XXTABVALXX = FRAME FRAME-B:MOVE-AFTER-TAB-ITEM (BUTTON-4:HANDLE IN FRAME DEFAULT-FRAME)
/* END-ASSIGN-TABS */.
/* SETTINGS FOR FRAME FRAME-A
*/
/* SETTINGS FOR FRAME FRAME-B
*/
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(C-Win)
THEN C-Win:HIDDEN = no.
/* ************************ Control Triggers ************************ */
&Scoped-define SELF-NAME C-Win
ON END-ERROR OF C-Win /* <insert window title> */
OR ENDKEY OF {&WINDOW-NAME} ANYWHERE DO:
/* This case occurs when the user presses the "Esc" key.
In a persistently run window, just ignore this. If we did not, the
application would exit. */
IF THIS-PROCEDURE:PERSISTENT THEN RETURN NO-APPLY.
END.
ON WINDOW-CLOSE OF C-Win /* <insert window title> */
DO:
/* This event will close the window and terminate the procedure. */
APPLY "CLOSE":U TO THIS-PROCEDURE.
RETURN NO-APPLY.
END.
&Scoped-define FRAME-NAME FRAME-A
&Scoped-define SELF-NAME BUTTON-1
ON CHOOSE OF BUTTON-1 IN FRAME FRAME-A /* Disable all but this frame */
DO:
DISABLE ALL WITH FRAME DEFAULT-FRAME.
ENABLE ALL WITH FRAME FRAME-A.
END.
&Scoped-define FRAME-NAME FRAME-B
&Scoped-define SELF-NAME BUTTON-2
ON CHOOSE OF BUTTON-2 IN FRAME FRAME-B /* Disable this frame */
DO:
DISABLE ALL EXCEPT BUTTON-5 WITH FRAME {&FRAME-NAME}.
END.
&Scoped-define FRAME-NAME DEFAULT-FRAME
&Scoped-define SELF-NAME BUTTON-3
ON CHOOSE OF BUTTON-3 IN FRAME DEFAULT-FRAME /* Disable all */
DO:
DISABLE ALL EXCEPT button-4 WITH FRAME {&FRAME-NAME}.
END.
&Scoped-define SELF-NAME BUTTON-4
ON CHOOSE OF BUTTON-4 IN FRAME DEFAULT-FRAME /* Enable all */
DO:
ENABLE ALL WITH FRAME DEFAULT-FRAME.
END.
&Scoped-define FRAME-NAME FRAME-B
&Scoped-define SELF-NAME BUTTON-5
ON CHOOSE OF BUTTON-5 IN FRAME FRAME-B /* Enable this frame */
DO:
ENABLE ALL WITH FRAME {&FRAME-NAME}.
END.
&Scoped-define FRAME-NAME FRAME-A
&Scoped-define SELF-NAME BUTTON-6
ON CHOOSE OF BUTTON-6 IN FRAME FRAME-A /* Enable all but this frame */
DO:
ENABLE ALL WITH FRAME DEFAULT-FRAME.
END.
&Scoped-define FRAME-NAME DEFAULT-FRAME
&UNDEFINE SELF-NAME
/* *************************** Main Block *************************** */
/* Set CURRENT-WINDOW: this will parent dialog-boxes and frames. */
ASSIGN CURRENT-WINDOW = {&WINDOW-NAME}
THIS-PROCEDURE:CURRENT-WINDOW = {&WINDOW-NAME}.
/* The CLOSE event can be used from inside or outside the procedure to */
/* terminate it. */
ON CLOSE OF THIS-PROCEDURE
RUN disable_UI.
/* Best default for GUI applications is... */
PAUSE 0 BEFORE-HIDE.
/* Now enable the interface and wait for the exit condition. */
/* (NOTE: handle ERROR and END-KEY so cleanup code will always fire. */
MAIN-BLOCK:
DO ON ERROR UNDO MAIN-BLOCK, LEAVE MAIN-BLOCK
ON END-KEY UNDO MAIN-BLOCK, LEAVE MAIN-BLOCK:
RUN enable_UI.
IF NOT THIS-PROCEDURE:PERSISTENT THEN
WAIT-FOR CLOSE OF THIS-PROCEDURE.
END.
/* ********************** Internal Procedures *********************** */
PROCEDURE disable_UI :
/*------------------------------------------------------------------------------
Purpose: DISABLE the User Interface
Parameters: <none>
Notes: Here we clean-up the user-interface by deleting
dynamic widgets we have created and/or hide
frames. This procedure is usually called when
we are ready to "clean-up" after running.
------------------------------------------------------------------------------*/
/* Delete the WINDOW we created */
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(C-Win)
THEN DELETE WIDGET C-Win.
IF THIS-PROCEDURE:PERSISTENT THEN DELETE PROCEDURE THIS-PROCEDURE.
END PROCEDURE.
PROCEDURE enable_UI :
/*------------------------------------------------------------------------------
Purpose: ENABLE the User Interface
Parameters: <none>
Notes: Here we display/view/enable the widgets in the
user-interface. In addition, OPEN all queries
associated with each FRAME and BROWSE.
These statements here are based on the "Other
Settings" section of the widget Property Sheets.
------------------------------------------------------------------------------*/
DISPLAY RADIO-SET-1
WITH FRAME DEFAULT-FRAME IN WINDOW C-Win.
ENABLE BUTTON-3 RADIO-SET-1 BUTTON-4
WITH FRAME DEFAULT-FRAME IN WINDOW C-Win.
{&OPEN-BROWSERS-IN-QUERY-DEFAULT-FRAME}
DISPLAY TOGGLE-1 EDITOR-1 FILL-IN-1
WITH FRAME FRAME-A IN WINDOW C-Win.
ENABLE BUTTON-1 BUTTON-6 TOGGLE-1 EDITOR-1 FILL-IN-1
WITH FRAME FRAME-A IN WINDOW C-Win.
{&OPEN-BROWSERS-IN-QUERY-FRAME-A}
DISPLAY COMBO-BOX-1 FILL-IN-2
WITH FRAME FRAME-B IN WINDOW C-Win.
ENABLE BUTTON-2 COMBO-BOX-1 BUTTON-5 FILL-IN-2
WITH FRAME FRAME-B IN WINDOW C-Win.
{&OPEN-BROWSERS-IN-QUERY-FRAME-B}
VIEW C-Win.
END PROCEDURE.