如何在Delphi“VCL Forms的自定义标题栏”中为自定义按钮添加标题或字形?

问题描述 投票:0回答:2

我在自定义按钮上使用 onPaint 事件处理程序,但我不知道要编写什么来获取图像列表或向该按钮添加标题。

 procedure TForm1.TitleBarPanel1CustomButtons0Paint(Sender: TObject);
 begin
   ...
 end;
delphi vcl
2个回答
3
投票

在此事件处理程序中,

Sender
实际上是一个
TSystemTitlebarButton
。您可以施放它来访问他的属性,例如
Canvas
。有了
Canvas
,你就可以画出任何需要的东西。

简单使用示例:

procedure TForm1.TitleBarPanel1CustomButtons0Paint(Sender: TObject);
begin
   (Sender as TSystemTitlebarButton).Canvas.Rectangle(0, 0, 10, 10);
end;

0
投票

为了从 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,现在可以了。 点击后又消失了。 我正在寻找修复方法。

© www.soinside.com 2019 - 2024. All rights reserved.