我的问题类似于这里的想法:在delphi中替换组件类.
但我需要根据需要更改特定的组件类.
这是一些伪演示代码:
unit Unit1;
TForm1 = class(TForm)
ImageList1: TImageList;
ImageList2: TImageList;
private
ImageList3: TImageList;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ImageList3 := TImageList.Create(Self);
// all instances of TImageList run as usual
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Unit2.MakeSuperImageList(ImageList2);
Unit2.MakeSuperImageList(ImageList3);
// from now on ONLY ImageList2 and ImageList3 are TSuperImageList
// ImageList1 is unchanged
end;
Run Code Online (Sandbox Code Playgroud)
unit Unit2;
type
TSuperImageList = class(Controls.TImageList)
protected
procedure DoDraw(Index: Integer; Canvas: TCanvas; X, Y: Integer;
Style: Cardinal; Enabled: Boolean = True); override;
end; …Run Code Online (Sandbox Code Playgroud) 我花了几个小时来完成这个(简单的)并且找不到解决方案:/
我正在使用D7和TImageList.ImageList被分配给工具栏.当我在设计时填充ImageList时,图标(具有部分透明度)看起来很好.但我需要在运行时填充它,当我这样做时,图标看起来很糟糕 - 完全松散了部分透明度.
我只是尝试从.res文件中加载图标 - 结果相同.我尝试过第三方图像列表也没有成功.我不知道我能做什么:/谢谢2所有;)
编辑:
说实话,我不知道到底发生了什么.Alpha混合是相关术语......这里有两个屏幕:
在设计时添加的图标: 替代文字http://shs-it.de/tmp/icon-designtime.JPG
在运行时添加的图标: 替代文字http://shs-it.de/tmp/icon-runtime.JPG
您不支持Alpha混合的评论带来了解决方案:我在编辑器中编辑了图像并删除了"alpha混合"像素 - 现在它看起来很好.但是,在运行时添加图标而不是设计时,图标看起来仍然很奇怪.如果你(或其他人)可以解释它,我会很高兴;)感谢您的支持!
多年来,Delphi一直支持"应用程序设置"选项卡上的" 启用运行时主题"开关.但是,这仅适用于可执行文件.假设DLL从其父应用程序接管主题(和其他)设置.
不幸的是,Microsoft Office在那里玩得不好.他们的"主题"外观是使用自定义控件实现的,而不是通过Windows自己的通用控件实现的.
在MSDN文章830033中 - 如何将Windows XP主题应用于Office COM加载项 Microsoft解释了如何将清单应用于DLL,使其成为隔离感知,以便忽略来自父进程的设置.
基本上,它分为两个步骤:
我认为我已经确定了(1)已经确定了,尽管我不确定brcc32是将整个资源ID作为整数还是作为文字字符串.真正的问题在于(2).据推测,这个定义改变了几个DLL函数绑定.
有人在Delphi中解决了这个问题吗?我是否应该进一步研究这条路线,我应该尝试手动创建激活上下文,还是有其他优雅的解决方案来解决这个问题?