- Offizieller Beitrag
Nachdem ich gestern wie blöd einen Fehler in meinem Programm gesucht habe, entdeckte ich den Fehler in "wNim/wImageList".
Sowohl "getBitmap" als auch "getIcon" sind fehlerhaft!
In beiden Fällen wird der übergebene Index nicht beachtet, sondern stattdessen immer mit "Index 0" gearbeitet.
Die Original-Prozedur sieht so aus:
Code
proc getIcon*(self: wImageList, index: int): wIcon {.validate, property.} =
## Create the icon from specified index.
if index <= self.getImageCount():
var hIcon = ImageList_GetIcon(self.mHandle, 0, ILD_TRANSPARENT)
result = Icon(hIcon, copy=false)
Der zweite Parameter von "ImageList_GetIcon" muss eigentlich der Index sein, stattdessen steht da "0".
Und in der Prozedur "getBitmap" das Gleiche:
Code
proc getBitmap*(self: wImageList, index: int): wBitmap {.validate, property.} =
## Create the bitmap from specified index.
var
width, height: int32
info: IMAGEINFO
bm: winimx.BITMAP
# need to create new bitmap, don't just warp info.hbmImage
if index <= self.getImageCount() and
ImageList_GetIconSize(self.mHandle, &width, &height) != 0 and
ImageList_GetImageInfo(self.mHandle, 0, &info) != 0 and
GetObject(info.hbmImage, sizeof(winimx.BITMAP), &bm) != 0:
result = Bitmap(width, height, int bm.bmBitsPixel)
let
hdc = CreateCompatibleDC(0)
prev = SelectObject(hdc, result.mHandle)
defer:
SelectObject(hdc, prev)
DeleteDC(hdc)
discard ImageList_Draw(self.mHandle, index, hdc, 0, 0, 0)
Alles anzeigen
Der zweite Parameter von "ImageList_GetImageInfo" muss ebenfalls den Index enthalten, stattdessen "0".
Ich habe die "getIcon"-Prozedur jetzt so geändert:
Code
proc newGetIcon*(self: wImageList, index: int): wIcon =
if index <= self.getImageCount():
var hIcon = ImageList_GetIcon(self.mHandle, cast[int32](index), ILD_TRANSPARENT)
result = Icon(hIcon, copy=false)
So arbeitet sie einwandfrei!
Analog dazu kann man auch die "getBitmap"-Prozedur anpassen.