Kbase 21233: How to align fill-in widgets in Progress
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  10/28/2008 |
|
Status: Verified
GOAL:
How to align fill-in widgets in Progress
FACT(s) (Environment):
Windows
Progress 8.x
Progress 9.x
FIX:
1) Save the following procedure as ALIGN.I:
/************************ START OF ALIGN.I ***********************/
&GLOB EM_SETMARGINS 211
&GLOB EC_LEFTMARGIN 1
&GLOB EC_RIGHTMARGIN 2
&GLOB alLeft 0
&GLOB alRight 1
&GLOB alCenter 2
FUNCTION DIV RETURN INTEGER (INPUT iLeft AS INT, INPUT iRight AS INT):
RETURN INTEGER(TRUNC(iLeft / iRight,0)).
END FUNCTION.
PROCEDURE SendMessageA EXTERNAL "USER32.DLL":
DEFINE INPUT PARAMETER lHandle AS LONG NO-UNDO.
DEFINE INPUT PARAMETER lMessage AS LONG NO-UNDO.
DEFINE INPUT PARAMETER wParam AS LONG NO-UNDO.
DEFINE INPUT PARAMETER lParam AS LONG NO-UNDO.
END PROCEDURE.
PROCEDURE DoALign.
DEFINE INPUT PARAMETER hWidget AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER iAlignment AS INTEGER NO-UNDO.
DEFINE INPUT PARAMETER DoAlLeft AS LOGICAL NO-UNDO.
DEFINE VARIABLE iTextWidth AS INTEGER NO-UNDO.
DEFINE VARIABLE iLeft AS INTEGER NO-UNDO.
ASSIGN iLeft = 0
iTextWidth = FONT-TABLE:GET-TEXT-WIDTH-PIXELS(hWidget:SCREEN-VALUE,hWidget:FONT).
IF (iAlignment = {&alCenter}) AND (DoAlLeft = TRUE) THEN
ASSIGN iLeft = DIV(hWidget:WIDTH-PIXELS, 2) - DIV(iTextWidth,2) - 4.
IF (iAlignment = {&alRight}) AND (DoAlLeft = TRUE) THEN
ASSIGN iLeft = hWidget:WIDTH-PIXELS - iTextWidth - 8.
RUN SendMessageA(hWidget:HWND, {&em_setmargins}, {&ec_leftmargin} + {&ec_rightmargin}, iLeft).
END PROCEDURE.
/****************** END OF ALIGN.I ****************/
2) Include the procedure ALIGN.I in your code.
3) To align fill-in widgets use the following:
RUN DoAlign(FILL-IN-1:HANDLE, {&alLeft}, TRUE). /* Left Align */
RUN DoAlign(FILL-IN-1:HANDLE, {&alRight}, TRUE). /* Right Align */
RUN DoAlign(FILL-IN-1:HANDLE, {&alCenter}, TRUE). /* Center Align */