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."