Consultor Eletrônico



Kbase 22085: How To Change Placement of a Widget Label on the Screen
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   6/24/2002
SUMMARY:

By default, a regular Progress widget has its label displayed to the left on the screen (except for toggle-box widgets). Developers and/or end-users may wish to have right-side label widgets instead. This Solution shows you how to change placement of a Progress widget label in the field-group of a frame.

SOLUTION:

The sample code below changes the label placement of five different Progress widgets -- fill-in, combo-box, selection-list, radio-set, and slider -- on the screen.

DEFINE VARIABLE COMBO-BOX-1 AS CHARACTER FORMAT "X(256)":U
LABEL "Combo"
VIEW-AS COMBO-BOX INNER-LINES 5
LIST-ITEMS "Item 1"
DROP-DOWN-LIST
SIZE 14 BY 1 NO-UNDO.

DEFINE VARIABLE FILL-IN-1 AS CHARACTER FORMAT "X(256)":U
LABEL "Fill-in 1"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.

DEFINE VARIABLE FILL-IN-2 AS CHARACTER FORMAT "X(256)":U
LABEL "Fill-in 2"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.

DEFINE VARIABLE FILL-IN-3 AS CHARACTER FORMAT "X(256)":U
LABEL "Fill-in 3"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.

DEFINE VARIABLE RADIO-SET-1 AS INTEGER
VIEW-AS RADIO-SET VERTICAL
RADIO-BUTTONS
"Item 1", 1,
"Item 2", 2
SIZE 14 BY 2 NO-UNDO LABEL "Radio-Set".

DEFINE VARIABLE SELECT-1 AS CHARACTER
VIEW-AS SELECTION-LIST SINGLE SCROLLBAR-VERTICAL
SIZE 14 BY 2 NO-UNDO LABEL "Select".

DEFINE VARIABLE SLIDER-1 AS INTEGER INITIAL 0
VIEW-AS SLIDER MIN-VALUE 0 MAX-VALUE 100 VERTICAL
TIC-MARKS NONE
SIZE 9 BY 3 NO-UNDO LABEL "Slider".

DEFINE BUTTON BUTTON-1
LABEL "Change side of widgets' labels"
SIZE 30 BY 1.14.

DEFINE FRAME DEFAULT-FRAME
FILL-IN-1 AT ROW 1.95 COL 19 COLON-ALIGNED
RADIO-SET-1 AT ROW 1.95 COL 50 COLON-ALIGNED
FILL-IN-2 AT ROW 3.14 COL 19 COLON-ALIGNED
SLIDER-1 AT ROW 3.86 COL 50 COLON-ALIGNED
FILL-IN-3 AT ROW 4.33 COL 19 COLON-ALIGNED
COMBO-BOX-1 AT ROW 5.52 COL 19 COLON-ALIGNED
SELECT-1 AT ROW 6.71 COL 19 COLON-ALIGNED
button-1 AT ROW 7.71 COL 50 COLON-ALIGNED
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 85 BY 10.

ASSIGN CURRENT-WINDOW:WIDTH = 85
CURRENT-WINDOW:HEIGHT = 10.

ON CHOOSE OF button-1
DO:
RUN changeLabelSide(FRAME DEFAULT-FRAME:HANDLE) NO-ERROR.
IF ERROR-STATUS:ERROR THEN
RETURN.
ASSIGN SELF:SENSITIVE = FALSE.
END.

ENABLE ALL WITH FRAME DEFAULT-FRAME.
WAIT-FOR CLOSE OF THIS-PROCEDURE.

PROCEDURE changeLabelSide:
DEFINE INPUT PARAMETER phFldGrp AS HANDLE NO-UNDO.

DEFINE VARIABLE vhWidget AS HANDLE NO-UNDO.
DEFINE VARIABLE vhLabel AS HANDLE NO-UNDO.
DEFINE VARIABLE viFont AS INTEGER NO-UNDO.

IF phFldGrp:TYPE = "FRAME":U THEN
ASSIGN phFldGrp = phFldGrp:CURRENT-ITERATION.
ELSE
IF phFldGrp:TYPE <> "FIELD-GROUP":U THEN
DO:
MESSAGE "Cannot change side of widgets' labels." SKIP
"Unknown field-group handle passed to"
"changeLabelSide procedure."
VIEW-AS ALERT-BOX ERROR.
RETURN ERROR.
END.

ASSIGN vhWidget = phFldGrp:PARENT
viFont = vhWidget:FONT
vhWidget = phFldGrp:FIRST-CHILD.

DO WHILE VALID-HANDLE (vhWidget):
IF CAN-SET (vhWidget, "SIDE-LABEL-HANDLE":U) THEN
DO:
vhLabel = vhWidget:SIDE-LABEL-HANDLE NO-ERROR.
IF VALID-HANDLE (vhLabel) THEN
ASSIGN vhWidget:X = vhLabel:X
vhLabel:X = vhWidget:X +
vhWidget:WIDTH-PIXELS +
SESSION:PIXELS-PER-COLUMN
vhWidget:LABEL = ":" + vhWidget:LABEL
vhLabel:WIDTH-P = FONT-TABLE:GET-TEXT-WIDTH-PIXELS
(vhWidget:LABEL,viFont).
END.
vhWidget = vhWidget:NEXT-SIBLING.
END.
END PROCEDURE.


References to Written Documentation:

Progress Knowledge Base Solution 22038, "How To Change Placement of a Toggle-Box Label on the Screen."