このページをあきらめようとしていたとき、解決策にたどり着きました:
http://delphihaven.wordpress.com/2010/09/06/custom-drawing-on-glass-2/
どうやら、32x32 より大きいアイコンを Delphi7 の timagelist に追加しようとすると、VCL は「無効な画像サイズ」エラーを表示しますが、himagagelist API を呼び出すだけで簡単に処理できます。
完全なソリューションは次のとおりです。
unit ImageListFix;
interface
uses CommCtrl, Graphics, ImgList;
type
TImageListFixer = class(TCustomImageList)
public
function AddIcon(Image: TIcon): Integer;
end;
implementation
function TImageListFixer.AddIcon(Image: TIcon): Integer;
begin
if Image = nil then
Result := Add(nil, nil)
else
begin
Result := ImageList_AddIcon(Handle, Image.Handle);
Change;
end;
end;
end.
そして、システムのイメージリストにアイコンを追加するためのコード:
DocumentImgList:=TImageListFixer(GetSystemLargeIconsList);
IconToAdd:=TIcon.Create;
try
IconToAdd.Handle := LoadImage(0, 'c:\Ico1.ico', IMAGE_ICON, DocumentImgList.Width, DocumentImgList.Height, LR_LOADFROMFILE);
DocumentImgList.AddIcon(IconToAdd);
IconToAdd.Handle := LoadImage(0, 'c:\Ico2.ico', IMAGE_ICON, DocumentImgList.Width, DocumentImgList.Height, LR_LOADFROMFILE);
DocumentImgList.AddIcon(IconToAdd);
finally
IconToAdd.Free;
end;