Ok, werde ich in Zukunft machen.
Ich habe jetzt in der JVCL ein TJvListView entdeckt, das (glaube ich) alles kann, was ich brauche.
Für die Interessierten, hier mein Code:
(Ja, es klappt, nur noch nicht mit der Transparenz)
Wenn ihr das nicht in eine Kompo packen wollt, müsst ihr überall Self ersetzen, ist aber sauberer, in einer eigenen Klasse ...
Delphi-Quellcode:
procedure TSortListView.SetGlyph(Index: Integer; Glyph: TBitmap);
var
hHeader: HWND;
HDItem: THDItem;
Buf: array[0..MAX_PATH]of char;
begin
hHeader := Listview_GetHeader(Self.Handle);
HDItem.Mask := HDI_FORMAT or HDI_IMAGE or HDI_ORDER or HDI_TEXT or HDI_WIDTH;
HDItem.pszText := Buf;
HDItem.cchTextMax := SizeOf (Buf);
Header_GetItem(hHeader, Index, HDItem);
HDItem.Mask := HDItem.Mask or HDI_BITMAP;
HDItem.fmt := HDItem.fmt or HDF_BITMAP or HDF_BITMAP_ON_RIGHT;
HDItem.hbm := Glyph.Handle;
Header_SetItem(hHeader, Index, HDItem);
end;
procedure TSortListView.DelGlyph(Index: Integer);
var
hHeader: HWND;
HDItem: THDItem;
Buf: array[0..MAX_PATH]of char;
begin
hHeader := Listview_GetHeader(Self.Handle);
HDItem.Mask := HDI_BITMAP or HDI_FORMAT or HDI_IMAGE or HDI_ORDER or HDI_TEXT or HDI_WIDTH;
HDItem.pszText := Buf;
HDItem.cchTextMax := SizeOf (Buf);
Header_GetItem(hHeader, Index, HDItem);
HDItem.fmt := HDItem.fmt and not HDF_BITMAP and not HDF_BITMAP_ON_RIGHT;
Header_SetItem(hHeader, Index, HDItem);
end;