我正在使用Delphi XE,我想制作一个按钮,只显示提供的PNG图像,背景透明,没有任何额外的边距。
我尝试用TButton做这个,但是我得到了一个带有bsPushButton风格的丑陋灰色背景。如果我使用bsCommandLink样式,虽然我的所有ImageMargins设置都设置为0,但是有一个10像素的上边距。
实现这一目标的最简单方法是什么?
编辑:它不必看起来像一个按钮。我只需要它看起来与它所分配的图像完全一样。最好它应该是一个制表位并具有各种状态(启用,禁用,悬停......),这样我就可以为每个州分配合适的图像。
答案 0 :(得分:6)
你想要的是一个透明的控件,它继承自TWinControl
,因为你希望它能够检索焦点,这从来都不是一件容易的事。然而,由于Embarcadero最近的版本提供了一个提供此功能的控件。 TCustomTransparentControl
是TWinControl
后代,可让您轻松完成任务。
那么,我要做的是创建一个新组件,并从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)
答案 2 :(得分:1)
您可以使用TPanel并指定OnClick事件来模仿按钮。将面板边框设置为“平面”,使其看起来没有面板。
它类似于stukelly提出的解决方案,但实现启用和悬停功能更容易。例如,在悬停时,您可以使面板看起来像3D。