Consultor Eletrônico



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.


.