Module cImageList.pkg
1Use vdfBase.pkg
2Use Commctrl.pkg
3Use WinGDI.pkg
4
5// Note these constants are also defined in cStatusPane.pkg!! This should be moved somewhere else.
6Define IMAGE_BITMAP for 0
7Define IMAGE_ICON for 1
8Define IMAGE_CURSOR for 2
9
10Define LR_DEFAULTSIZE for |CI$0040
11Define LR_LOADFROMFILE for |CI$0010
12
13Define clDefault for |CI$FF000000
14Define clNone for |CI$FFFFFFFF
15
16// Changes 12.1
17// ------------
18// [JvH] Fixed RemoveAllImages method. Previously sending this message raised an error and did nothing.
19
20Enum_List // cImageList.peDrawingStyle
21 Define dsNormal
22 Define dsFocus
23 Define dsSelected
24 Define dsTransparent
25End_Enum_List
26
27Enum_List // cImageList.peImageType
28 Define itImage
29 Define itMask
30End_Enum_List
31
32
33{ HelpTopic=cImageList }
34Class cImageList is a cObject
35 Procedure Construct_Object
36 Forward Send Construct_Object
37
38 { Visibility=Private }
39 Property Integer private_piBackColor clNone // -1
40 { Category=Behavior }
41 Property Integer piMaxImages 0
42 { DesignTime=False }
43 Property Handle phImageList 0
44 { Category=Appearance }
45 Property Integer piImageWidth 16
46 { Category=Appearance }
47 Property Integer piImageHeight 16
48
49 // These properties are not implemented yet...
50 // Property Integer piBlendColor clNone // -1
51 // Property Integer peDrawingStyle c_dsNormal // c_dsNormal, c_dsFocus, c_dsSelected, c_dsTransparent
52 // Property Integer peImageType c_itImage // c_itImage, c_itMask
53 // Property Integer pbMasked True
54 End_Procedure
55
56 { MethodType=Property }
57 { PropertyType=Color }
58 { EnumList= "clScrollBar, clBackground, clActiveCaption, clInactiveCaption, clMenu, clWindow, clWindowFrame, clMenuText, clWindowText, clCaptionText, clActiveBorder, clInactiveBorder" }
59 { EnumList+="clAppWorkSpace, clHighlight, clHighlightText, clBtnFace, clBtnShadow, clGrayText, clBtnText, clInactiveCaptionText, clBtnHighlight, cl3DDkShadow, cl3DLight, clInfoText, clInfoBk, clDefault, clNone" }
60 { EnumList+="clAqua, clBlack, clBlue, clDkGray, clFuchsia, clGray, clGreen, clLime, clLtGray, clMaroon, clNavy, clOlive, clPurple, clRed, clSilver, clTeal, clWhite, clYellow" }
61 { Category=Appearance }
62 { InitialValue=clNone }
63 Procedure Set piBackColor Integer iColor
64 Integer iVoid
65 Handle hImageList
66
67 Set Private_piBackColor to iColor
68 Get phImageList to hImageList
69
70 If hImageList Move (ImageList_SetBkColor(hImageList, iColor )) to iVoid
71 End_Procedure
72
73 { MethodType=Property }
74 Function piBackColor Returns Integer
75 Function_Return (Private_piBackColor(Self))
76 End_Function
77
78 { MethodType=Event }
79 Procedure OnCreate
80 // Add images here
81 End_Procedure
82
83 Procedure End_Construct_Object
84 Integer iVoid
85
86 Send DoCreate
87 Send OnCreate
88 Set piBackColor to (Private_piBackColor(Self))
89
90 Forward Send End_Construct_Object
91 End_Procedure
92
93 { Visibility=Private }
94 Procedure DoCreate
95 Integer cx cy dwFlags icInitial iGrowBy
96
97 Get piImageHeight to cy
98 Get piImageWidth to cx
99 Get piMaxImages to iGrowBy
100
101 Move (ILC_COLOR + ILC_MASK) to dwFlags // only 16-color bitmaps are supported here.
102
103 Set phImageList to (ImageList_Create(cx, cy, dwFlags, 0, iGrowBy))
104 End_Procedure
105
106 { MethodType=Event NoDoc=True }
107 Procedure Destroy_Object
108 Integer iVoid
109
110 If (phImageList(Self)) Move (ImageList_Destroy(phImageList(Self))) to iVoid
111 Forward Send Destroy_Object
112 End_Procedure
113
114 Function AddTransparentImage String sImage Integer iTransparentColor Returns Integer
115 Handle hBitmap
116 Integer iVoid iImage
117
118 Move -1 To iImage // assume inability to add
119
120 Move (LoadImage(GetModuleHandle(0), sImage, IMAGE_BITMAP, 0, 0, 0)) To hBitmap
121 If (hBitmap =0) Begin // the bitmap was not in the EXE resource
122 Get_File_Path sImage To sImage // find path in DFPATH, if appropriate
123 If (sImage <>"") Begin // The image was found!
124 Move (LoadImage(0, sImage, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)) To hBitmap
125 End
126 End
127
128 If hBitmap Begin
129 Move (ImageList_AddMasked(phImageList(self), hBitmap, iTransparentColor)) To iImage
130 Move (DeleteObject(hBitmap)) To iVoid
131 End
132
133 Function_Return iImage
134 End_Function
135
136 Function AddImage String sImage Returns Integer
137 Handle hBitmap
138 Integer iVoid iImage
139
140 Move -1 To iImage // assume inability to add
141
142 Move (LoadImage(GetModuleHandle(0), sImage, IMAGE_BITMAP, 0, 0, 0)) To hBitmap
143 If (hBitmap =0) Begin // the bitmap was not in the EXE resource
144 Get_File_Path sImage To sImage // find path in DFPATH, if appropriate
145 If (sImage <>"") Begin // The image was found!
146 Move (LoadImage(0, sImage, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)) To hBitmap
147 End
148 End
149
150 If hBitmap Begin
151 Move (ImageList_AddMasked(phImageList(self), hBitmap, 0)) To iImage
152 Move (DeleteObject(hBitmap)) To iVoid
153 End
154
155 Function_Return iImage
156 End_Function
157
158 Function ImageCount Returns Integer
159 Handle hImageList
160 Integer icImage
161
162 Move 0 to icImage
163 Get phImageList to hImageList
164 If hImageList Move (ImageList_GetImageCount(hImageList)) to icImage
165
166 Function_Return icImage
167 End_Function
168
169 Procedure RemoveImage Integer iIndex
170 Handle hImageList
171 Boolean bRemoved
172
173 Get phImageList to hImageList
174 If hImageList Move (ImageList_Remove(hImageList, iIndex)) to bRemoved
175 End_Procedure
176
177 Procedure RemoveAllImages
178 Handle hImageList
179 Boolean bRemoved
180
181 Get phImageList to hImageList
182 If hImageList Move (ImageList_Remove(hImageList, -1)) to bRemoved //JVH
183 End_Procedure
184
185 { MethodType=Property Visibility=Private }
186 Function Window_Handle Returns Integer
187 // This is required for TreeView support!
188 Function_Return (phImageList(Self))
189 End_Function
190End_Class