uses
Form, ImgList, CommCtrl;
procedure SetHeaderImage(const AListView: TListView;
const AImageList: TImageList;
const AColIdx, AImgIdx: Integer;
const AShowImage, ARightImage: Boolean);
var
hndHD: HWND;
HDI: THDITEM;
OIL: TCustomImageList;
begin
if AListView = nil then Exit;
if AImageList = nil then Exit;
if (AColIdx < 0) or (AColIdx >= AListView.Columns.Count) then Exit;
if (AImgIdx < 0) or (AImgIdx >= AImageList.Count) then Exit;
OIL := AListView.SmallImages;
AListView.SmallImages := AImageList;
try
hndHD := SendMessage(AListView.Handle, LVM_GETHEADER, 0, 0);
with HDI do
begin
Mask := HDI_IMAGE or HDI_FORMAT;
if AShowImage then
begin
iImage := AImgIdx;
fmt := HDF_STRING or HDF_IMAGE;
if ARightImage then
fmt := fmt or HDF_BITMAP_ON_RIGHT;
end else begin
fmt := HDF_STRING;
end;
fmt := fmt or Ord(AListView.Column[AColIdx].Alignment);
end;
SendMessage(hndHD, HDM_SETITEM, AColIdx, Integer(@HDI));
Application.ProcessMessages;
finally
if OIL <> nil then
AListView.SmallImages := OIL;
end;
end;