我想将标准窗口信息(和警告和错误)图标绘制到pagecontrol的选项卡的索引.但是,如果窗口背景颜色不是白色,则结果看起来很糟糕.
program Project111; uses Vcl.Forms,Vcl.Controls,Vcl.Graphics,Winapi.Windows,Vcl.ComCtrls,Vcl.ImgList; {$R *.res} var mainForm: TForm; imageList: TImageList; icon: TIcon; pageControl: TPageControl; tabSheet: TTabSheet; begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm,mainForm); imageList := TImageList.Create(mainForm); imageList.ColorDepth := cd32bit; icon := TIcon.Create; try icon.Handle := LoadImage( 0,IDI_INFORMATION,IMAGE_ICON,16,{LR_DEFAULTSIZE or} LR_SHARED ); imageList.AddIcon(icon); finally icon.Free; end; pageControl := TPageControl.Create(mainForm); pageControl.Parent := mainForm; pageControl.Images := imageList; tabSheet := TTabSheet.Create(mainForm); tabSheet.Parent := pageControl; tabSheet.PageControl := pageControl; tabSheet.ImageIndex := 0; Application.Run; end.
正如你可以看到白色边框模糊,我想这是因为TImageList缺乏正确的alpha透明度,但我不知道如何解决这个问题.
解决方案不必使用TImageList,我很乐意使用任何其他方法.请注意,还会有字幕,并且并非所有索引都有图标,并且随着上下文的更改,图标可能会更改/添加/删除.
我正在使用Delphi XE-2,如果有帮助,我也有DevExpress组件.
解决方法
正如@Sertac所说,你看到的是将windows shell图标的大小从32×32调整为16×16的效果,从Windows Vista开始,你可以使用
传递SHGSI_SMALLICON标志以检索SM_CXSMICON和SM_CYSMICON指定的图标的小版本.
SHGetStockIconInfo
功能.
传递SHGSI_SMALLICON标志以检索SM_CXSMICON和SM_CYSMICON指定的图标的小版本.
SM_CXSMICON和SM_CYSMICON的值取决于当前的DPI设置.对于DPI 96是16×16.
样品
LIcon := TIcon.Create; try LIcon.Handle := 0; if TOSVersion.Check(6,0) then begin ZeroMemory(@LSHStockIconInfo,SizeOf(LSHStockIconInfo)); LSHStockIconInfo.cbSize := sizeof(LSHStockIconInfo); if SHGetStockIconInfo(SIID_INFO,SHGSI_ICON or SHGSI_SMALLICON,LSHStockIconInfo) = S_OK then begin LIcon.Handle := LSHStockIconInfo.hIcon; imageList.AddIcon(LIcon); end; end; finally LIcon.Free; end;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。