Kbase P64512: How to overlay a combo-box over a browse cell in GUI?
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  1/26/2004 |
|
Status: Unverified
GOAL:
How to overlay a combo-box over a browse cell in GUI?
FACT(s) (Environment):
Windows
FACT(s) (Environment):
Progress 8.3x
FACT(s) (Environment):
Progress 9.x
FIX:
The following solution has been developed with the AppBuilder connected to the sports database:
&ANALYZE-SUSPEND _VERSION-NUMBER UIB_v9r12 GUI
&ANALYZE-RESUME
/* Connected Databases
sports PROGRESS
*/
&Scoped-define WINDOW-NAME C-Win
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS 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 hItemNumberich 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 --- */
DEFINE VARIABLE dExtendedPrice AS DECIMAL NO-UNDO.
DEFINE VARIABLE hItemNumber AS WIDGET-HANDLE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
/* ******************** Preprocessor Definitions ******************** */
&Scoped-define PROCEDURE-TYPE Window
&Scoped-define DB-AWARE no
/* Name of first Frame and/or Browse and/or first Query */
&Scoped-define FRAME-NAME DEFAULT-FRAME
&Scoped-define BROWSE-NAME BROWSE-1
/* Internal Tables (found by Frame, Query & Browse Queries) */
&Scoped-define INTERNAL-TABLES Order-Line
/* Definitions for BROWSE BROWSE-1 */
&Scoped-define FIELDS-IN-QUERY-BROWSE-1 Order-Line.Order-num ~
Order-Line.Backorder Order-Line.Line-num Order-Line.Item-num ~
Order-Line.Price Order-Line.Qty ~
Order-Line.Price * Order-Line.Qty @ dExtendedPrice
&Scoped-define ENABLED-FIELDS-IN-QUERY-BROWSE-1 Order-Line.Backorder ~
Order-Line.Line-num Order-Line.Item-num Order-Line.Price Order-Line.Qty
&Scoped-define ENABLED-TABLES-IN-QUERY-BROWSE-1 Order-Line
&Scoped-define FIRST-ENABLED-TABLE-IN-QUERY-BROWSE-1 Order-Line
&Scoped-define QUERY-STRING-BROWSE-1 FOR EACH Order-Line NO-LOCK INDEXED-REPOSITION
&Scoped-define OPEN-QUERY-BROWSE-1 OPEN QUERY BROWSE-1 FOR EACH Order-Line NO-LOCK INDEXED-REPOSITION.
&Scoped-define TABLES-IN-QUERY-BROWSE-1 Order-Line
&Scoped-define FIRST-TABLE-IN-QUERY-BROWSE-1 Order-Line
/* Definitions for FRAME DEFAULT-FRAME */
&Scoped-define OPEN-BROWSERS-IN-QUERY-DEFAULT-FRAME ~
~{&OPEN-QUERY-BROWSE-1}
/* Standard List Definitions */
&Scoped-Define ENABLED-OBJECTS BROWSE-1 COMBO-BOX-1
&Scoped-Define DISPLAYED-OBJECTS COMBO-BOX-1
/* Custom List Definitions */
/* List-1,List-2,List-3,List-4,List-5,List-6 */
/* _UIB-PREPROCESSOR-BLOCK-END */
&ANALYZE-RESUME
/* *********************** 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 VARIABLE COMBO-BOX-1 AS CHARACTER FORMAT "X(256)":U
VIEW-AS COMBO-BOX INNER-LINES 5
DROP-DOWN-LIST
SIZE 26 BY 1 NO-UNDO.
/* Query definitions */
&ANALYZE-SUSPEND
DEFINE QUERY BROWSE-1 FOR
Order-Line SCROLLING.
&ANALYZE-RESUME
/* B.rowse definitions */
DEFINE BROWSE BROWSE-1
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _DISPLAY-FIELDS BROWSE-1 C-Win _STRUCTURED
QUERY BROWSE-1 NO-LOCK DISPLAY
Order-Line.Order-num FORMAT ">>>>9":U
Order-Line.Backorder FORMAT "yes
o":U
Order-Line.Line-num FORMAT ">>9":U
Order-Line.Item-num FORMAT "99999":U WIDTH 16
Order-Line.Price FORMAT "->,>>>,>>9.99":U WIDTH 12.2
Order-Line.Qty FORMAT "->>>>9":U WIDTH 13.8
Order-Line.Price * Order-Line.Qty @ dExtendedPrice COLUMN-LABEL "Extended Price" FORMAT "->,>>>,>>9.99":U
ENABLE
Order-Line.Backorder
Order-Line.Line-num
Order-Line.Item-num
Order-Line.Price
Order-Line.Qty
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
WITH NO-ROW-MARKERS SEPARATORS SIZE 106 BY 10.48 ROW-HEIGHT-CHARS .76 EXPANDABLE.
/* ************************ Frame Definitions *********************** */
DEFINE FRAME DEFAULT-FRAME
BROWSE-1 AT ROW 2.43 COL 11
COMBO-BOX-1 AT ROW 14.1 COL 36 COLON-ALIGNED NO-LABEL
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 122.4 BY 16.62.
/* *********************** Procedure Settings ************************ */
&ANALYZE-SUSPEND _PROCEDURE-SETTINGS
/* Settings for THIS-PROCEDURE
Type: Window
Allow: Basic,Browse,DB-Fields,Window,Query
Other Settings: COMPILE
*/
&ANALYZE-RESUME _END-PROCEDURE-SETTINGS
/* ************************* Create Window ************************** */
&ANALYZE-SUSPEND _CREATE-WINDOW
IF SESSION:DISPLAY-TYPE = "GUI":U THEN
CREATE WINDOW C-Win ASSIGN
HIDDEN = YES
TITLE = "<insert window title>"
HEIGHT = 16.62
WIDTH = 122.4
MAX-HEIGHT = 16.62
MAX-WIDTH = 122.4
VIRTUAL-HEIGHT = 16.62
VIRTUAL-WIDTH = 122.4
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 */
&ANALYZE-RESUME
/* *********** Runtime Attributes and AppBuilder Settings *********** */
&ANALYZE-SUSPEND _RUN-TIME-ATTRIBUTES
/* SETTINGS FOR WINDOW C-Win
VISIBLE,,RUN-PERSISTENT */
/* SETTINGS FOR FRAME DEFAULT-FRAME
*/
/* BROWSE-TAB BROWSE-1 1 DEFAULT-FRAME */
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(C-Win)
THEN C-Win:HIDDEN = no.
/* _RUN-TIME-ATTRIBUTES-END */
&ANALYZE-RESUME
/* Setting information for Queries and Browse Widgets fields */
&ANALYZE-SUSPEND _QUERY-BLOCK BROWSE BROWSE-1
/* Query rebuild information for BROWSE BROWSE-1
_TblList = "sports.Order-Line"
_Options = "NO-LOCK INDEXED-REPOSITION"
_FldNameList[1] = sports.Order-Line.Order-num
_FldNameList[2] > sports.Order-Line.Backorder
"Order-Line.Backorder" ? ? "logical" ? ? ? ? ? ? yes ? no no ? yes no no "U" "" ""
_FldNameList[3] > sports.Order-Line.Line-num
"Order-Line.Line-num" ? ? "integer" ? ? ? ? ? ? yes ? no no ? yes no no "U" "" ""
_FldNameList[4] > sports.Order-Line.Item-num
"Order-Line.Item-num" ? ? "integer" ? ? ? ? ? ? yes ? no no "16" yes no .no "U" "" ""
_FldNameList[5] > sports.Order-Line.Price
"Order-Line.Price" ? ? "decimal" ? ? ? ? ? ? yes ? no no "12.2" yes no no "U" "" ""
_FldNameList[6] > sports.Order-Line.Qty
"Order-Line.Qty" ? ? "integer" ? ? ? ? ? ? yes ? no no "13.8" yes no no "U" "" ""
_FldNameList[7] > "_<CALC>"
"Order-Line.Price * Order-Line.Qty @ dExtendedPrice" "Extended Price" "->,>>>,>>9.99" ? ? ? ? ? ? ? no ? no no ? yes no no "U" "" ""
_Query is OPENED
*/ /* BROWSE BROWSE-1 */
&ANALYZE-RESUME
/* ************************ Control Triggers ************************ */
&Scoped-define SELF-NAME C-Win
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL C-Win C-Win
ON END-ERROR OF C-Win /* <insert window title> */
OR ENDKEY OF {&WINDOW-NAME} ANYWHERE DO:
/* This case occurs hItemNumberen 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.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL C-Win C-Win
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.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define BROWSE-NAME BROWSE-1
&Scoped-define SELF-NAME BROWSE-1
&Scoped-define SELF-NAME Order-Line.Item-num
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Order-Line.Item-num BROWSE-1 _BROWSE-COLUMN C-Win
ON ENTRY OF Order-Line.Item-num IN BROWSE BROWSE-1 /* Item-num */
DO:
COMBO-BOX-1:VISIBLE IN FRAME {&FRAME-NAME} = TRUE.
COMBO-BOX-1:SCREEN-VALUE = Order-Line.Item-num:SCREEN-VALUE IN BROWSE browse-1.
BROWSE-1:SENSITIVE = FALSE.
RUN PlaceCombo.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL Order-Line.Item-num BROWSE-1 _BROWSE-COLUMN C-Win
ON LEAVE OF Order-Line.Item-num IN BROWSE BROWSE-1 /* Item-num */
DO:
COMBO-BOX-1:VISIBLE IN FRAME {&FRAME-NAME} = FALSE.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME COMBO-BOX-1
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL COMBO-BOX-1 C-Win
ON VALUE-CHANGED OF COMBO-BOX-1 IN FRAME DEFAULT-FRAME
DO:
order-line.item-num:SCREEN-VALUE IN BROWSE BROWSE-1 = COMBO-BOX-1:SCREEN-VALUE.
browse-1:SENSITIVE = TRUE.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&UNDEFINE SELF-NAME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK C-Win
/* *************************** 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.
COMBO-BOX-1:VISIBLE IN FRAME {&FRAME-NAME} = FALSE.
COMBO-BOX-1:WIDTH-PIXELS = Order-Line.Item-num:WIDTH-PIXELS IN BROWSE browse-1.
RUN FILLcombo.
/* . */
/* ASSIGN */
/* COMBO-BOX-1:HIDDEN IN FRAME {&FRAME-NAME} = TRUE */
/* COMBO-BOX-1:SENSITIVE IN FRAME {&FRAME-NAME} = TRUE . */
/* ENABLE BROWSE-1 WITH FRAME {&FRAME-NAME}. */
/* */
IF NOT THIS-PROCEDURE:PERSISTENT THEN
WAIT-FOR CLOSE OF THIS-PROCEDURE.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
/* ********************** Internal Procedures *********************** */
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE PlaceCombo C-Win
PROCEDURE PlaceCombo :
/*------------------------------------------------------------------------------
Purpose:
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
hItemNumber = order-line.item-num:HANDLE IN BROWSE BROWSE-1.
COMBO-BOX-1:X IN FRAME {&FRAME-NAME} = hItemNumber:X + BROWSE-1:X.
COMBO-BOX-1:Y IN FRAME {&FRAME-NAME} = hItemNumber:Y + BROWSE-1:Y.
COMBO-BOX-1:VISIBLE IN FRAME {&FRAME-NAME} = TRUE.
/* COMBO-BOX-1:SCREEN-VALUE = order-line.item-num:SCREEN-VALUE. */
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE disable_UI C-Win _DEFAULT-DISABLE
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 hItemNumberen
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.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE enable_UI C-Win _DEFAULT-ENABLE
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 COMBO-BOX-1
WITH FRAME DEFAULT-FRAME IN WINDOW C-Win.
ENABLE BROWSE-1 COMBO-BOX-1
WITH FRAME DEFAULT-FRAME IN WINDOW C-Win.
{&OPEN-BROWSERS-IN-QUERY-DEFAULT-FRAME}
VIEW C-Win.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE fillCombo C-Win
PROCEDURE fillCombo :
/*------------------------------------------------------------------------------
Purpose:
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
DEFINE VARIABLE c AS CHARACTER NO-UNDO.
COMBO-BOX-1:LIST-ITEMS IN FRAME {&FRAME-NAME} = "".
FOR EACH ITEM NO-LOCK:
c = STRING(item-num, "99999").
COMBO-BOX-1:ADD-LAST(c) IN FRAME {&FRAME-NAME}.
END.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME.