Как отключить все остальное, кроме текущего кадра? - PullRequest
0 голосов
/ 12 октября 2019

У меня есть окно с некоторыми фреймами, они показывают некоторые данные, такие как браузеры, комбинированные списки и т. Д. На фрейме по умолчанию есть кнопка для импорта некоторых данных из файла. Если щелкнуть эту кнопку, появится рамка, в которой можно найти файл и начать импорт. Также есть кнопка для возврата, поэтому этот импортируемый фрейм исчезает.

Если этот фрейм виден, все остальные элементы фона в других фреймах или фреймах по умолчанию можно выбирать и использовать. Как этого можно избежать?

Я прочитал, что кадру можно угрожать как диалоговое окно, используя VIEW-AS DIALOG-BOX. Это было бы идеально, но где я могу это установить? В свойствах фрейма у меня такой опции нет.

Ваша помощь была бы очень кстати.

Я использую OpenEdge 10.2B со встроенным AppBuilder.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Одним из вариантов может быть сначала отключить все, кроме этого кадра, а затем явно включить кадр.

Учитывая, что 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.
0 голосов
/ 12 октября 2019

См. Оператор DEFINE FRAME , фраза frame может использоваться для добавления VIEW-AS DIALOG-BOX.

Если AppBuilder не предоставляет это свойство в кадре, затем вы всегда можете добавить его с помощью редактора.

Но, глядя на AppBuilder (который я никогда не использовал), похоже, что вы изначально выбираете, будет ли фрейм фреймом или диалогом:

enter image description here

Если вы сравните результат (.w) SmartFrame с SmartDialog, вы увидите, что последний имеет параметр диалогового окна view-as:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...