Kbase 20976: How to Display Images (In a Widget) On The Fly From A Directory
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  16/10/2008 |
|
Status: Unverified
GOAL:
How to to display image files in a widget on the fly from a directory
FACT(s) (Environment):
Progress 9.x
FIX:
The particular functions and methods used to accomplish this include:
INPUT FROM OS-DIR: Specifies a new input source.
IMPORT: Reads information from the directory with OS-DIR.
LOAD-IMAGE(): Reads the image contained in a specified file.
The example works with any .GIF or .JPG file names found in the specified directory, first populate a selection-list. Then, as the user scrolls through and selects each file, the corresponding image is loaded into an Image widget for previewing. (Only .GIF and .JPG files are processed in this example).
To run the sample program:
1) Copy the code below into a new procedure window.
2) Save the code as wpictureviewer.w.
3) Run the code.
4) In the fill-in labeled "Directory", enter the full path to a folder containing .jpg or .gif files.
****IMPORTANT
Once this code is placed in the procedure editor, 3 adjustments must be made before it will pass syntax check. Press Shift-F2 to syntax check. When the editor brings you to the offending line, delete the carriage return so that the code is part of the previous line. Continue the syntax check and make this correction two additional times.
-------------------------Wpictureviewer.w-----------------------------
&ANALYZE-SUSPEND _VERSION-NUMBER AB_v9r12 GUI ADM2
&ANALYZE-RESUME
&Scoped-define WINDOW-NAME wWin
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS wWin
CREATE WIDGET-POOL.
DEF STREAM dirlist.
DEF VARIABLE f-name AS CHARACTER FORMAT "x(14)".
DEFINE VARIABLE list_contents AS CHARACTER FORMAT "x(200)".
DEFINE TEMP-TABLE reslist
FIELD dFILENAME AS CHARACTER
FIELD fpathname AS character
FIELD dfiletype AS CHARACTER.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
&Scoped-define PROCEDURE-TYPE SmartWindow
&Scoped-define DB-AWARE no
&Scoped-define ADM-CONTAINER WINDOW
&Scoped-define ADM-SUPPORTED-LINKS Data-Target,Data-Source,Page-Target,Update-Source,Update-Target,Filter-target,Filter-Source
&Scoped-define FRAME-NAME fMain
&Scoped-Define ENABLED-OBJECTS FILL-IN-1 BUTTON-3 SELECT-1 IMAGE-1
&Scoped-Define DISPLAYED-OBJECTS FILL-IN-1 SELECT-1
&ANALYZE-RESUME
/* Define the widget handle for the window */
DEFINE VAR wWin AS WIDGET-HANDLE NO-UNDO.
/* Definitions of the field level widgets*/
DEFINE BUTTON BUTTON-3
LABEL "Go"
SIZE 7 BY 1.14.
DEFINE VARIABLE FILL-IN-1 AS CHARACTER FORMAT "X(256)":U
LABEL "Directory"
VIEW-AS FILL-IN
SIZE 50 BY 1 TOOLTIP "Make sure the path ends in ~"\~"" NO-UNDO.
DEFINE IMAGE IMAGE-1
SIZE 78 BY 5.48.
DEFINE VARIABLE SELECT-1 AS CHARACTER
VIEW-AS SELECTION-LIST SINGLE SCROLLBAR-VERTICAL
SIZE 57 BY 6.91 NO-UNDO.
DEFINE FRAME fMain
FILL-IN-1 AT ROW 1.95 COL 19 COLON-ALIGNED
BUTTON-3 AT ROW 1.95 COL 72
SELECT-1 AT ROW 3.38 COL 3 NO-LABEL
IMAGE-1 AT ROW 11.48 COL 2
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 80 BY 16.71.
/* *** Procedure Settings **/
&ANALYZE-SUSPEND _PROCEDURE-SETTINGS
&ANALYZE-RESUME _END-PROCEDURE-SETTINGS
&ANALYZE-SUSPEND _CREATE-WINDOW
IF SESSION:DISPLAY-TYPE = "GUI":U THEN
CREATE WINDOW wWin ASSIGN
HIDDEN = YES
TITLE = "Picture Viewer"
HEIGHT = 16.71
WIDTH = 80
MAX-HEIGHT = 28.81
MAX-WIDTH = 146.2
VIRTUAL-HEIGHT = 28.81
VIRTUAL-WIDTH = 146.2
RESIZE = no
SCROLL-BARS = no
STATUS-AREA = no
BGCOLOR = ?
FGCOLOR = ?
THREE-D = yes
MESSAGE-AREA = no
SENSITIVE = yes.
ELSE {&WINDOW-NAME} = CURRENT-WINDOW.
/* END WINDOW DEFINITION
*/
&ANALYZ.E-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB wWin
/* ****** Included-Libraries ***** */
{src/adm2/containr.i}
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
/* Runtime Attributes and AppBuilder Settings */
&ANALYZE-SUSPEND _RUN-TIME-ATTRIBUTES
/* SETTINGS FOR WINDOW wWin VISIBLE,,RUN-PERSISTENT*/
/* SETTINGS FOR FRAME fMain*/
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(wWin)
THEN wWin:HIDDEN = yes.
/* _RUN-TIME-ATTRIBUTES-END */
&ANALYZE-RESUME
/* ********* Control Triggers***** */
&Scoped-define SELF-NAME wWin
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL wWin wWin
ON END-ERROR OF wWin /* Picture Viewer */
OR ENDKEY OF {&WINDOW-NAME} ANYWHERE DO:
IF THIS-PROCEDURE:PERSISTENT THEN RETURN NO-APPLY.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL wWin wWin
ON WINDOW-CLOSE OF wWin /* Picture Viewer */
DO:
APPLY "CLOSE":U TO THIS-PROCEDURE.
RETURN NO-APPLY.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME BUTTON-3
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL BUTTON-3 wWin
ON CHOOSE OF BUTTON-3 IN FRAME fMain /* Go */
DO:
EMPTY TEMP-TABLE reslist.
IF NOT FILL-IN-1:SCREEN-VALUE MATCHES "*\" THEN ASSIGN
FILL-IN-1:SCREEN-VALUE = FILL-IN-1:SCREEN-VALUE + "\".
INPUT STREAM dirlist FROM OS-DIR (FILL-IN-1:SCREEN-VALUE).
rep-blk:
REPEAT:
CREATE reslist.
IMPORT STREAM dirlist reslist NO-ERROR.
IF NOT ERROR-STATUS:ERROR THEN DO:
IF dfiletype MATCHES "*D*" OR NUM-ENTRIES(dfilename,".") <
2 THEN DO:
DELETE reslist.
NEXT rep-blk.
END.
IF NOT CAN-DO("jpg,GIF", ENTRY(2,dfilename,".")) THEN DO:
DELETE reslist.
NEXT rep-blk.
END.
END.
END.
select-1:LIST-ITEMS = "".
FOR EACH reslist.
SELECT-1:ADD-LAST(dfilename).
END.
INPUT CLOSE.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME FILL-IN-1
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL FILL-IN-1 wWin
ON RETURN OF FILL-IN-1 IN FRAME fMain /* Directory */
DO:
APPLY "CHOOSE" TO button-3.
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&Scoped-define SELF-NAME SELECT-1
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CONTROL SELECT-1 wWin
ON VALUE-CHANGED OF SELECT-1 IN FRAME fMain
DO:
IMAGE-1:load-image( FILL-IN-1:SCREEN-VALUE +
select-1:SCREEN-VALUE).
END.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&UNDEFINE SELF-NAME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK wWin
/* ************** Main Block ***************** */
/* Include custom Main Block code for SmartWindows. */
{src/adm2/windowmn.i}
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
/* ******** Internal Procedures *********** */
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE adm-create-objects wWin _ADM-CREATE-OBJECTS
PROCEDURE adm-create-objects :
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE disable_UI wWin _DEFAULT-DISABLE
PROCEDURE disable_UI :
/* Delete the WINDOW we created */
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(wWin)
THEN DELETE WIDGET wWin.
IF THIS-PROCEDURE:PERSISTENT THEN DELETE PROCEDURE THIS-PROCEDURE.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE enable_UI wWin _DEFAULT-ENABLE
PROCEDURE enable_UI :
DISPLAY FILL-IN-1 SELECT-1
WITH FRAME fMain IN WINDOW wWin.
ENABLE FILL-IN-1 BUTTON-3 SELECT-1 IMAGE-1
WITH FRAME fMain IN WINDOW wWin.
{&OPEN-BROWSERS-IN-QUERY-fMain}
VIEW wWin.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE exitObject wWin
PROCEDURE exitObject :
APPLY "CLOSE":U TO THIS-PROCEDURE.
RETURN.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
.