Kbase 21023: How to Overlay a Browse Cell With a COMBO-BOX, without managing the adding or deleting of rows?
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  2/8/2008 |
|
Status: Verified
GOAL:
How to Overlay a Browse Cell With a COMBO-BOX, without managing the adding or deleting of rows?
GOAL:
How to Overlay a Browse Cell With a COMBO-BOX
FACT(s) (Environment):
Progress 9.x
OpenEdge 10.x
All Supported Operating Systems
FIX:
Example code, p-br14.p in Section 10.4.9 of the V9 Progress Programming Handbook, demonstrates overlaying a toggle box on the backorder field of the sports.order-line table. The documentation also states that it is possible to do this same type of overlay with a COMBO-BOX or other widget. Sample against sports2000 database, demonstrating how to use the combo-box as the overlaid widget, a new field with data type logical named backorder must be created in the Orderline table for this code to run.
NOTE: This code works in graphical environments, but might be problematic in character mode.
/* Overlapped widgets */
DEFINE VARIABLE wh AS WIDGET-HANDLE.
DEFINE VARIABLE eprice AS DECIMAL.
DEFINE VARIABLE initial-color AS LOGICAL.
DEFINE VARIABLE method-return AS LOGICAL.
DEFINE VARIABLE toggle1 AS LOGICAL LABEL "Backorder " VIEW-AS TOGGLE-BOX.
DEFINE VARIABLE combo1 AS CHAR VIEW-AS COMBO-BOX DROP-DOWN INNER-LINES 4 SIZE 14 BY 1.
DEFINE QUERY q1 FOR orderline SCROLLING.
DEFINE BROWSE b1 QUERY q1
DISPLAY ordernum backorder linenum itemnum price qty (price * qty) @ eprice
COLUMN-LABEL "Extended Price"
ENABLE backorder linenum itemnum price qty
WITH 10 DOWN WIDTH 68 SEPARATORS TITLE "Order Detail Information".
DEFINE FRAME f1
b1
toggle1 AT ROW 2 COLUMN 2
combo1 AT ROW 2.7 COLUMN 36 NO-LABEL
WITH THREE-D NO-BOX SIDE-LABELS ROW 2 CENTERED.
RUN FILLcombo.
ON SCROLL-NOTIFY OF b1 IN FRAME f1
DO:
RUN TOGGLE-PLACEMENT.
RUN combo-placement.
END.
ON ENTRY OF backorder IN BROWSE b1
DO:
RUN toggle-placement.
END.
ON ENTRY OF itemnum IN BROWSE b1
DO:
RUN combo-placement.
END.
ON LEAVE OF backorder IN BROWSE b1
DO:
toggle1:VISIBLE IN FRAME f1 = FALSE.
END.
ON LEAVE OF itemnum IN BROWSE b1
DO:
combo1:VISIBLE IN FRAME f1 = FALSE.
END.
ON VALUE-CHANGED OF toggle1 IN FRAME f1
DO:
toggle1:VISIBLE IN FRAME f1 = FALSE.
IF toggle1:CHECKED THEN BACKORDER:SCREEN-VALUE IN BROWSE b1 = "YES".
ELSE BACKORDER:SCREEN-VALUE IN BROWSE b1 = "NO". APPLY "ENTRY" TO
BACKORDER IN BROWSE b1.
END.
ON VALUE-CHANGED OF combo1 IN FRAME f1
DO:
combo1:VISIBLE IN FRAME f1 = FALSE.
orderline.itemnum:SCREEN-VALUE IN BROWSE b1 = combo1:SCREEN-VALUE.
APPLY "ENTRY" TO orderline.itemnum IN BROWSE b1.
END.
OPEN QUERY q1 FOR EACH orderline.
ASSIGN toggle1:HIDDEN IN FRAME f1 = TRUE
toggle1:SENSITIVE IN FRAME f1 = TRUE
combo1:HIDDEN IN FRAME f1 = TRUE
combo1:SENSITIVE IN FRAME f1 = TRUE .
ENABLE b1 WITH FRAME f1.
WAIT-FOR WINDOW-CLOSE OF CURRENT-WINDOW.
/* Continued on the next page. */
PROCEDURE toggle-placement:
ASSIGN WH = backorder:HANDLE IN BROWS.E b1.
IF wh:X < 0 THEN toggle1:VISIBLE IN FRAME f1 = FALSE.
ELSE toggle1:X IN FRAME f1 = wh:X + b1:X.
IF wh:Y < 0 THEN toggle1:VISIBLE IN FRAME f1 = FALSE.
ELSE toggle1:Y IN FRAME f1 = wh:Y + b1:Y.
IF backorder:SCREEN-VALUE = "" THEN toggle1:CHECKED = FALSE.
ELSE toggle1:SCREEN-VALUE = backorder:SCREEN-VALUE.
IF wh:X >= 0 and wh:Y >= 0 THEN toggle1:VISIBLE IN FRAME f1 = TRUE.
END PROCEDURE.
PROCEDURE combo-placement :
ASSIGN WH = orderline.itemnum:HANDLE IN BROWSE b1.
IF wh:X < 0 THEN combo1:VISIBLE IN FRAME f1 = FALSE.
ELSE combo1:X IN FRAME f1 = wh:X + b1:X.
IF wh:Y < 0 THEN combo1:VISIBLE IN FRAME f1 = FALSE.
ELSE combo1:Y IN FRAME f1 = wh:Y + b1:Y.
IF wh:X >= 0 AND wh:Y >= 0 THEN combo1:visible IN FRAME f1 = TRUE.
combo1:SCREEN-VALUE = orderline.itemnum:SCREEN-VALUE.
END.
PROCEDURE fillCombo:
DEF VAR i AS INTEGER.
DO i=1 TO 100 :
combo1:ADD-LAST(string(i)) IN FRAME f1.
END.
END.
.