使用图像制作按钮的最简单方法

时间:2011-03-10 08:26:20

标签: delphi vcl delphi-xe

我正在使用Delphi XE,我想制作一个按钮,只显示提供的PNG图像,背景透明,没有任何额外的边距。

我尝试用TButton做这个,但是我得到了一个带有bsPushButton风格的丑陋灰色背景。如果我使用bsCommandLink样式,虽然我的所有ImageMargins设置都设置为0,但是有一个10像素的上边距。

实现这一目标的最简单方法是什么?

编辑:它不必看起来像一个按钮。我只需要它看起来与它所分配的图像完全一样。最好它应该是一个制表位并具有各种状态(启用,禁用,悬停......),这样我就可以为每个州分配合适的图像。

3 个答案:

答案 0 :(得分:6)

你想要的是一个透明的控件,它继承自TWinControl,因为你希望它能够检索焦点,这从来都不是一件容易的事。然而,由于Embarcadero最近的版本提供了一个提供此功能的控件。 TCustomTransparentControlTWinControl后代,可让您轻松完成任务。

那么,我要做的是创建一个新组件,并从TCustomTransparentControl继承它,那么我要做的就是覆盖这样的Paint方法:

procedure TMyTransparentButton.Paint;
var
  rc: TRect;
begin
  if not (csDestroying in ComponentState) then
  begin
    // Specify size and location of the image.
    rc := Rect(0, 0, pngImage.Width, pngImage.Height);

    // Draw the image on the canvas.
    pngImage.Draw(Canvas, rc);
  end;
end;

通过这种方法,您应该能够获得所需的透明度和半透明度。但是,您仍然需要处理按钮被禁用,按下等情况

答案 1 :(得分:5)

您可以使用TImage并指定OnClick事件来模仿按钮。这取决于你是否需要获得焦点。

答案 2 :(得分:1)

您可以使用TPanel并指定OnClick事件来模仿按钮。将面板边框设置为“平面”,使其看起来没有面板。

它类似于stukelly提出的解决方案,但实现启用和悬停功能更容易。例如,在悬停时,您可以使面板看起来像3D。

相关问题