我在自定义按钮上使用 onPaint 事件处理程序,但我不知道要编写什么来获取图像列表或向该按钮添加标题。
procedure TForm1.TitleBarPanel1CustomButtons0Paint(Sender: TObject);
begin
...
end;
在此事件处理程序中,
Sender
实际上是一个TSystemTitlebarButton
。您可以施放它来访问他的属性,例如 Canvas
。有了Canvas
,你就可以画出任何需要的东西。
简单使用示例:
procedure TForm1.TitleBarPanel1CustomButtons0Paint(Sender: TObject);
begin
(Sender as TSystemTitlebarButton).Canvas.Rectangle(0, 0, 10, 10);
end;
为了从 TImageList 中获得图标:
procedure TfFPer.TitleBarPanel1CustomButtons0Paint(Sender: TObject);
begin
const c=(Sender as TSystemTitlebarButton).Canvas;
const xPos=1;
const yPos=1;
const imageIndexInTImageList=10;
CsColor.i.Draw(c,xPos,yPos,imageIndexInTImageList);
end;
为了使其居中:
procedure TfFPer.TitleBarPanel1CustomButtons0Paint(Sender: TObject);
begin
const c=(Sender as TSystemTitlebarButton).Canvas;
const w=CsColor.i.Width;
const h=CsColor.i.Height;
var xPos := (c.ClipRect.Width-w) div 2;
var yPos := (c.ClipRect.Height-h) div 2;
const imageIndexInTImageList=10;
CsColor.i.Draw(c,xPos,yPos,imageIndexInTImageList); // CsColor.i is my TImageList
end;
但是在运行它时,我发现了一个奇怪的行为:自定义按钮画布 ClipRect 改变了它的大小! 第一次运行时,它是 0,0,183,30。所以它是不可见的。 当鼠标悬停时,它是0,0,46,30,现在可以了。 点击后又消失了。 我正在寻找修复方法。