Windows Small System Icon Height Incorrect -
i'm running on windows 10, using delphi 7 (yes, know it's quite old).
i want use system icons in windows , have gone defining timagelist
called systemicons
initialize follows:
var fileinfo: tshfileinfo; begin systemicons.handle := shgetfileinfo('', 0, fileinfo, sizeof(fileinfo), shgfi_icon or shgfi_smallicon or shgfi_sysiconindex); ...
i have systemicons
properties set statically timagelist
component width , height set 16.
elsewhere, wish retrieve icon image list given valid shell object's image index. because these "small system icons", expect them 16x16. result of calling getsystemmetrics(sm_cysmicon)
yields 16. oddly, dimensions depend upon whether retrieve them bitmap or icon.
... var icon: ticon; bm: tbitmap; begin ... icon := ticon.create; systemicons.geticon(imgindex, icon); bm := tbitmap.create; systemicons.getbitmap(imgindex, bm);
the imgindex
correct , same in both cases. image retrieved same in each case, expected. dimensions of bitmap (bm.width
, bm.height
) expected: 16x16. however, dimensions of icon (icon.width
, icon.height
) not. 32x32.
when paint icon on canvas appears 16x16. it's height
, width
values appear incorrect. odd.
why these different?
the images 32x32 begin with.
internally, timagelist.geticon()
retrieves hicon
chosen image directly underlying win32 imagelist api, using imagelist_geticon()
, , assigns ticon.handle
property.
timagelist.getbitmap()
, on other hand, bit different. sizes tbitmap
dimensions of timagelist
(16x16), , stretch draws chosen image onto tbitmap.canvas
using timagelist.draw()
, in turn uses imagelist_drawex()
.
Comments
Post a Comment