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