Delphi 是否可以在运行时更改模式窗体和非模式窗体标题栏中的窗体图标?
使用Delphi2010 我正在寻找(可能)一个函数或过程,它可以传递一个TForm&a图像(TImage或TBitmap),它可以更改表单图标,或者覆盖当前图标,或者在特定位置写入新图标,必要时调整标题。必须同时使用模态和非模态形式 例如: 程序变更表(AForm:TForm;AIcon:TBitmap 欢迎所有其他建议Delphi 是否可以在运行时更改模式窗体和非模式窗体标题栏中的窗体图标?,delphi,delphi-2010,Delphi,Delphi 2010,使用Delphi2010 我正在寻找(可能)一个函数或过程,它可以传递一个TForm&a图像(TImage或TBitmap),它可以更改表单图标,或者覆盖当前图标,或者在特定位置写入新图标,必要时调整标题。必须同时使用模态和非模态形式 例如: 程序变更表(AForm:TForm;AIcon:TBitmap 欢迎所有其他建议 Thanx像这样的东西应该可以满足您的需要。我假设您正在使用32bpp位图,可能是alpha混合。如果您想使用基于遮罩的透明度,则需要重新编写代码以创建适当的遮罩位图 pro
Thanx像这样的东西应该可以满足您的需要。我假设您正在使用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;
类似这样的操作应该可以满足您的需要。我假设您使用的是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;