使用Delphi 2010.
我正在寻找(可能)一个可以通过TForm&图像(TImage或TBitmap),它可以更改表单图标,覆盖当前图标,或在特定位置写入新图标,必要时调整标题。必须适用于模态和非模态形式。
示例:
程序ChangeFormIcon(AForm:TForm; AIcon:TBitmap;
欢迎所有其他建议
感谢名单
答案 0 :(得分:4)
这样的事情应该做你想要的。我假设您正在使用32bpp位图,可能是alpha混合。如果要使用基于掩码的透明度,则需要重新编写代码以创建适当的掩码位图。
procedure CopyBitmapToIcon(Bitmap: TBitmap; Icon: TIcon);
var
MonoBitmap: HBITMAP;
IconInfo: TIconInfo;
IconHandle: HICON;
begin
MonoBitmap := CreateBitmap(Bitmap.Width, Bitmap.Height, 1, 1, 0);
Try
FillChar(IconInfo, SizeOf(IconInfo), 0);
IconInfo.fIcon := True;
IconInfo.hbmMask := MonoBitmap;
IconInfo.hbmColor := Bitmap.Handle;
IconHandle := CreateIconIndirect(IconInfo);
if IconHandle=0 then begin
RaiseLastOSError;
end;
Icon.Handle := IconHandle;
Finally
DeleteObject(MonoBitmap);
End;
end;
procedure TMyForm.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
Icon: TIcon;
begin
Icon := Self.Icon;
Bitmap := TBitmap.Create;
try
Bitmap.PixelFormat := pf32bit;
Bitmap.SetSize(Icon.Width, Icon.Height);
Bitmap.Canvas.Brush.Style := bsSolid;
Bitmap.Canvas.Brush.Color := clRed;
Bitmap.Canvas.FillRect(Rect(0, 0, Icon.Width, Icon.Height));
CopyBitmapToIcon(Bitmap, Icon);
finally
Bitmap.Free;
end;
end;