delphi – 如何将标准窗口信息图标很好地绘制到pagecontrol选项
发布时间:2020-12-15 04:14:33 所属栏目:大数据 来源:网络整理
导读:我想将标准窗口信息(和警告和错误)图标绘制到pagecontrol的选项卡的索引.但是,如果窗口背景颜色不是白色,则结果看起来很糟糕. program Project111;uses Vcl.Forms,Vcl.Controls,Vcl.Graphics,Winapi.Windows,Vcl.ComCtrls,Vcl.ImgList;{$R *.res}var mainFor
我想将标准窗口信息(和警告和错误)图标绘制到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开始,你可以使用
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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |