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

2024-03-25

我正在使用 Delphi XE,我想制作一个按钮,仅显示提供的具有透明背景的 PNG 图像,并且没有任何类型的附加边距。

我尝试使用 TButton 执行此操作,但我得到了 bsPushButton 样式的难看的灰色背景。如果我使用 bsCommandLink 样式,则尽管我所有的 ImageMargins 设置都设置为 0,但上边距为 10 像素。

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

EDIT:它不必看起来像一个按钮。我只需要它看起来与分配的图像一模一样。最好它应该能够成为制表位并具有各种状态(启用、禁用、悬停...),以便我可以为每个状态分配适当的图像。


你想要的是一个继承自的透明控件TWinControl http://docwiki.embarcadero.com/VCL/en/Controls.TWinControl因为你希望它能够重新获得焦点,所以这从来就不是一件容易的事。然而,从最近的版本开始,Embarcadero 提供了一个可以实现这一点的控件。这TCustomTransparentControl http://docwiki.embarcadero.com/VCL/en/Controls.TCustomTransparentControl is a 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;

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅用图像制作按钮的最简单方法 的相关文章

  • Delphi 拼写检查器

    您好 我正在寻找一个与 Delphi 7 2010 一起使用的免费拼写检查器 任何人都可以给我一个指向吗 我想添加我们在 SynProject 编辑器中使用的 HunSpell 库 它包含在该 GPL 工具的源代码中 http synops
  • Delphi COM 对象中的早期绑定和后期绑定在性能方面哪个更好

    在delphi中 如果要创建COM对象 可以通过两种方式来完成 第一个是早期绑定 例如 uses MSScriptControl TLB MS Script Control var obj IScriptControl begin obj
  • 德尔福XE5安卓。硬件后退按钮按下

    如何模拟硬件后退按钮按下来关闭应用程序 我需要通过代码关闭应用程序 但 Application Terminate Close Hide 和 DisposeOf 不起作用 所以我想到模拟硬件后退按钮按下来实现我的目标 IFDEF ANDRO
  • Delphi 远程调试器冻结

    我有运行 Delphi 2007 应用程序的 Windows Server 2008 R2 计算机 Update 当前无法切换 Delphi 版本 我有 Delphi XE 但在进行任何切换之前需要检查超过 300 000 行代码 我遇到了
  • 如何发送/接收 JSON?

    我知道这是一个愚蠢的问题 但我通常不进行 Web 编程 并且被要求发送一些 JSON 数据并接收一些回报 我用谷歌搜索 很清楚如何编码和解码 JSON 数据 但我对此很陌生 我不知道如何与给定的 URL 进行通信并说 这里有一些数据 请发回
  • 在设计时存储“记录数组”的最佳方式

    我需要在设计时存储一组数据 以便在运行时构造一组组件的内容 像这样的事情 type TVulnerabilityData record Vulnerability TVulnerability Name string Description
  • 德尔福:idHttp+SSL

    请解释一下如何使用 SSL https 从服务器下载文件 我在互联网上没有找到合适的答案 每个人都说 TIdSSLIOHandlerSocket 但我只有 TIdSSLIOHandlerSocketOpenSSL 如果我使用 TIdSSLI
  • Delphi XE2 中的 TDataModule.ClassGroup 伪属性到底有什么作用?

    我尝试将一个组件从一个数据模块复制并粘贴到 Delphi XE2 中的另一个数据模块中 该组件是一个 Fast Report 数据源链接组件 数据模块是全新的 刚刚在 XE2 中创建 其他人也遇到了同样的问题并报告了质量中心为106369
  • 以与文件大小相同的格式获取类或对象的大小?

    如何从内存中最好地确定类的大小 这是一个可以使用的基本示例类 请注意 这些变量除了用于示例之外没有其他用途 type TMyClass class public fString1 string fString2 string fIntege
  • Delphi LZMA减压样本

    我发现在this https stackoverflow com questions 4344976 lzma or 7zip in delphi的线程链接delphi压缩包 https github com ccy delphi zip具
  • TWebbrowser 大量内存泄漏:到目前为止还没有解决方案

    我有一个使用的应用程序TWebbrowser定期导航到特定 URL 并提取一些数据 该应用程序 24x7 持续运行 并在页面中进行大量导航 问题是TWebbrowser有一个众所周知的内存泄漏问题 每次导航到新页面时 应用程序使用的内存都会
  • TEdit onclick 全选?

    每当用户单击 TEdit1 或单击选择其中的某些文本时 如何选择 TEdit1 的所有文本 执行超出默认行为的任何操作都可能非常危险TEdit控制 您的用户知道标准 Windows 控件的行为方式 任何偏离此的行为都可能导致混乱 默认情况下
  • 如何将接口类型传递给过程

    如何将接口类型传递给过程参数 type Hello PortType interface ISoapInvokable 243CBD89 8766 F19D 38DF 427D7A02EAEE function GetDeneme s st
  • delphi中生成随机数

    我想在delphi中创建一个随机数并将其分配给文件作为文件名 我设法做到了这一点 但是当我单击按钮生成数字时 它总是以 0 开头 知道如何修复它 procedure TForm1 Button1Click Sender TObject va
  • DELPHI win32 的 ORM [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道 Delphi Win32 的 ORM 或类似的东西吗 Marco Cantu 是 Insta
  • 如何修复 Delphi Prism ASP.NET 错误:“解析器错误消息:‘Oxygene’不是受支持的语言”

    我在 Delphi Prism 中编写了一个 ASP NET Web 应用程序 不是网站 在我的开发机器上一切正常 但是当我将其安装在测试服务器上时 出现以下错误 Server Error in MyApp Application Pars
  • 在主表单之前显示登录表单

    我在表单之间导航时遇到问题 我使用 Delphi XE5 创建了一个 Android Firemonkey 移动应用程序 我目前有一个登录表单和主表单 现在我想要有关如何处理登录表单以显示在主表单之前的建议 在 项目选项 中的表单下 选择要
  • 如何在 TList 中存储动态数组?

    我需要存储未知数量的组 每个组都有未知数量的元素 项目 这是我的 小组 TGroup array of Integer lt dynamic array as you can see 我想使用 TList 来保存我的组 我的想法是 我可能想
  • Delphi - 将字符串从 UTF-8 转换回来

    我在将 UTF 8 编码字符串转换回 delphi 可用的字符串时遇到问题 该应用程序是用 XE8 编写的 并部署在 Windows 和 OSX 上 该应用程序分别在 Windows 和 OSX 上使用 LimeLM API dll 和 d
  • Delphi - 相当于C#的三元运算符? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi 中是否存在或者将来是否存在条件运算符 https stackoverflow com questions 2108609 is there or is there ever going

随机推荐

  • 为什么没有 64 位版本的 Visual Studio 2010?

    我在msdn下载中只看到x86版本 里科 马里亚尼 http blogs msdn com ricom archive 2009 06 10 visual studio why is there no 64 bit version aspx
  • 私有与受保护 - 可见性良好实践问题[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直在寻找 我知道理论上的区别 public 任何类 函数都可以访问该方法 属性 受保护的 只有此类和任何子类可以访问方法 属性 privat
  • 在启动 Express 服务器之前等待几个数据库连接?

    我正在开发一个 Express 应用程序 启动时 它连接到 Redis 服务器和 PostgreSQL 服务器 我想在启动 Express 服务器之前等待两个连接都成功 现在 如果我只是等待one回调 我可以在该回调中启动 Express
  • F#:管道与作曲与......作曲?

    我对一切都很陌生 F 一般编程以及这个社区 我是一名数学家 在本科期间曾短暂接触过计算机科学 我正在尝试用 F 完成一些任务 F 备忘单 http dungpa github io fsharp cheatsheet 展示了三种不同的函数组
  • Jetpack 仅撰写粗体字符串占位符

    我有一个像这样的字符串资源
  • 这段代码如何使用保留关键字作为字段名称?

    我在遗产中发现了以下结构java字节码在尝试解决服务器应用程序启动问题时 我的 IDE 反编译了一些第三方库 我很好奇这如何有效 以前从未见过keywords可以用作字段名称在字节码中 字节码版本为 48 0 Java 1 4 public
  • 使用 pydev 中的 unittest 在 Python 中对整个项目层次结构进行单元测试

    我正在使用 unittest 模块对一些使用 Pydev 在包的分层结构中创建的 python 代码进行单元测试 当我尝试在 pydev 中对实际源代码及其单元测试使用单独的源文件夹时 问题就出现了 project src com myse
  • IBAN 验证检查

    我需要使用 JavaScript 进行 IBAN 验证检查 我需要遵循的规则是 验证 IBANIBAN 的验证方法是将其转换为整数并对其执行基本 mod 97 运算 如 ISO 7064 中所述 如果 IBAN 有效 则余数等于 1 检查国
  • Flexbox:居中元素,两侧有空间元素

    我正在使用 Flexbox 设置一个由七个组成的菜单 li 具有不同宽度的元素 我想要我的中间 源顺序中的第四个 li li 元素始终作为一种锚点水平居中 第 1 3 个元素 li li 元素占据居中左侧的空间 li li 第 5 7 个占
  • 如何将 LESS 集成到 ZendFramework 2 中

    我已经发现本教程 https stephen rees carter net thought integrating less with zend framework the easy way这是为了Zend框架1 我下载少了放在下面项目
  • 如何知道特定的 launchd .plist 文件位置?

    是否可以知道由加载的 plist 文件位置launchctl命令 标签名称列出为launchctl list其内容可以通过以下方式查看launchctl list LABEL 但我找不到 plist 文件位置 我知道它将位于 Library
  • 关于使用 iostream 进行解析的准则是什么?

    我发现自己最近写了很多解析代码 大部分是自定义格式 但并不真正相关 为了增强可重用性 我选择将解析函数基于 I O 流 以便我可以将它们与诸如boost lexical cast lt gt 然而 我意识到我从未在任何地方读过有关如何正确执
  • ASP.NET MVC 如何在不重写 URL 的情况下处理 Application_Error 的 404 错误

    我创建了一个非常简单的 ASP NET MVC 5 应用程序 我想在其中处理我的 404 异常Application Error如图所示这个问题 https stackoverflow com questions 7501810 net m
  • 有没有办法阻止 pandas to_json 添加 \?

    我正在尝试将 pandas 数据帧发送到 json 但我遇到了一些日期问题 我得到了一个额外的 以便我的记录看起来像Updated 09 06 2016 03 09 44 是否可以不添加这个额外的 我假设它是某种转义字符 但我无法找到与此相
  • Laravel 5.3 - InvalidArgumentException 查看 [索引] 未找到 [重复]

    这个问题在这里已经有答案了 I 已经部署我的 Laravel 应用程序到我的VPS 它在本地主机上运行良好 我认为错误出在我的路由中 或者可能是控制器中 因为路径仍然进入我的本地计算机目录 请参阅错误消息第 2 行 但我确实看不到代码中的问
  • 在 MySQL 中使用 JOIN 时避免出现不明确的列错误

    我的查询如下所示 sql SELECT u s FROM bands u inner join statuses s on u status id s id WHERE u status id 1 ORDER BY u band name
  • CGBitmapContextCreate:不支持的参数组合

    我正在尝试创建一个 8 位灰度上下文 如下所示 CGColorSpaceRef colorSpace CGColorSpaceCreateDeviceGray CGContextRef context CGBitmapContextCrea
  • Interface Builder:如何清理已删除的约束?

    我使用命令删除来删除 IB 中地图视图小部件的一些约束 正如附图所示 约束实际上只是褪色 而不是完全删除 我已经尝试过保存文件并重新打开项目 但似乎它们不会被 XCode 删除 我怎样才能将它们删除 EDIT 这是我在尺寸检查器窗口中看到的
  • 连续输入时不要引发 TextChanged

    我有一个相当大的文本框 TextChanged事件处理程序 在正常打字条件下 性能还不错 但当用户执行长时间连续操作时 例如按住退格按钮一次删除大量文本 它可能会明显滞后 例如 事件需要 0 2 秒才能完成 但用户每 0 1 秒执行一次删除
  • 仅用图像制作按钮的最简单方法

    我正在使用 Delphi XE 我想制作一个按钮 仅显示提供的具有透明背景的 PNG 图像 并且没有任何类型的附加边距 我尝试使用 TButton 执行此操作 但我得到了 bsPushButton 样式的难看的灰色背景 如果我使用 bsCo