Project

General

Profile

start.p

Alexandru Lungu, 03/04/2026 06:28 AM

Download (2.99 KB)

 
1
/* dyn100buttons.p
2
   Progress OpenEdge ABL (GUI) - dynamically create 100 buttons, each with a different BMP.
3
*/
4

    
5
DEFINE VARIABLE hFrame     AS HANDLE     NO-UNDO.
6
DEFINE VARIABLE hBtn       AS HANDLE     NO-UNDO.
7
DEFINE VARIABLE i          AS INTEGER    NO-UNDO.
8
DEFINE VARIABLE r          AS INTEGER    NO-UNDO.
9
DEFINE VARIABLE c          AS INTEGER    NO-UNDO.
10
DEFINE VARIABLE btnW       AS DECIMAL    NO-UNDO INITIAL 12.  /* width in chars */
11
DEFINE VARIABLE btnH       AS DECIMAL    NO-UNDO INITIAL 2.8. /* height in chars */
12
DEFINE VARIABLE padX       AS DECIMAL    NO-UNDO INITIAL 0.3.
13
DEFINE VARIABLE padY       AS DECIMAL    NO-UNDO INITIAL 0.2.
14
DEFINE VARIABLE cols       AS INTEGER    NO-UNDO INITIAL 10.  /* 10x10 = 100 */
15
DEFINE VARIABLE imgDir     AS CHARACTER  NO-UNDO.
16
DEFINE VARIABLE imgPath    AS CHARACTER  NO-UNDO.
17
DEFINE VARIABLE imgOk      AS LOGICAL    NO-UNDO.
18
define var w2 as handle.
19

    
20
define frame fr.
21
def var nr as integer view-as fill-in.
22
def button btn.
23
enable btn nr with frame fr.
24

    
25

    
26
def var st as int.
27
on choose of btn do:
28
    assign nr.
29
    st = etime(yes).
30
    
31
    create window w2.
32
    
33
    w2:width-chars = 150.
34
    w2:height-chars = 50.
35
    
36
    /* Display and wait */
37
    
38
    /* Point this to your folder containing img001.bmp ... img100.bmp */
39
    ASSIGN imgDir = "images\".
40

    
41
    /* Create a host frame (in the current window). */
42
    CREATE FRAME hFrame
43
      ASSIGN
44
        PARENT       = w2
45
        NAME         = "frButtons"
46
        ROW          = 1
47
        COL          = 1
48
        WIDTH-CHARS  = 140
49
        HEIGHT-CHARS = 40
50
        VISIBLE      = TRUE
51
        SCROLLABLE   = FALSE.
52
    
53
    hFrame:MOVE-TO-TOP().
54
    
55
    /* Create 100 buttons dynamically */
56
    DO i = 1 TO nr:
57
    
58
      /* Grid position */
59
      ASSIGN
60
        r = TRUNCATE((i - 1) / cols, 0)
61
        c = (i - 1) MOD cols.
62
    
63
      /* Build image filename */
64
      ASSIGN imgPath = imgDir + SUBSTITUTE("img&1.bmp", STRING(i, "999")).
65
    
66
      /* Create the button */
67
      CREATE BUTTON hBtn
68
        ASSIGN
69
          FRAME        = hFrame
70
          NAME         = SUBSTITUTE("btn&1", i)
71
          LABEL        = ""                   /* keep label empty; show only image */
72
          ROW          = 1 + (r * (btnH + padY))
73
          COL          = 1 + (c * (btnW + padX))
74
          WIDTH-CHARS  = btnW
75
          HEIGHT-CHARS = btnH
76
          VISIBLE      = TRUE
77
          SENSITIVE    = TRUE.
78
    
79
      /* Load a unique BMP into the button */
80
      imgOk = hBtn:LOAD-IMAGE(imgPath).
81
    
82
      /* If the image can't be loaded, show a fallback label */
83
      IF NOT imgOk THEN DO:
84
        hBtn:LABEL = SUBSTITUTE("&1", i).
85
        /* Optional: make it visually obvious it failed */
86
        /* hBtn:BGCOLOR = 12. */ /* depends on your color table */
87
      END.
88
    
89
    END.
90
    
91
    enable all with frame hframe in window w2.
92
    
93
    message nr etime.
94
    WAIT-FOR 'i' OF w2.
95
    delete object w2.
96
end.
97

    
98
WAIT-FOR CLOSE OF CURRENT-WINDOW.