RM.*_*RM. 5 delphi icons tpagecontrol
我想将标准窗口信息(和警告和错误)图标绘制到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, 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.
Run Code Online (Sandbox Code Playgroud)
正如你可以看到白色边框模糊,我想这是因为TImageList缺乏正确的alpha透明度,但我不知道如何解决这个问题.
解决方案不必使用TImageList,我很乐意使用任何其他方法.请注意,还会有字幕,并且并非所有索引都有图标,并且随着上下文的更改,图标可能会更改/添加/删除.
我正在使用Delphi XE-2,如果有帮助,我也有DevExpress组件.
作为@Sertac说,你看到的是调整窗口的大小shell图标从32×32 16×16,作为解决方法与Windows Vista开始,你可以使用的效果SHGetStockIconInfo功能.传递SHGSI_SMALLICON标志以检索图标的小版本,由SM_CXSMICON和指定SM_CYSMICON.
当前DPI设置的值SM_CXSMICON和SM_CYSMICON取决于当前DPI设置.对于DPI 96是16x16.
样品
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |