【发布时间】:2012-06-23 06:01:24
【问题描述】:
比如说,我有一个 Image 控件(它似乎是一个无窗口控件),我想确保它位于 TextBox 之上。无论我做什么,图像控件都不会出现在文本框的顶部。
有办法吗?
附:我知道我可以使用 PictureBox,但它不支持透明度,因此我必须拥有 Image 控件。
【问题讨论】:
标签: vb6 windowless
比如说,我有一个 Image 控件(它似乎是一个无窗口控件),我想确保它位于 TextBox 之上。无论我做什么,图像控件都不会出现在文本框的顶部。
有办法吗?
附:我知道我可以使用 PictureBox,但它不支持透明度,因此我必须拥有 Image 控件。
【问题讨论】:
标签: vb6 windowless
无法将图像控件放置在普通文本框上,因为它们被绘制到表单本身上,因此将始终位于任何其他窗口组件下方。
如果您有 VB6 安装媒体,则有绘制(无窗口)版本的控件,包括一个 TextBox,您可以使用它(可能)执行您想要的操作; http://support.microsoft.com/kb/184687
某种类型的自定义用户控件,如果可能更好的话.. 你到底想用什么来覆盖文本框?
【讨论】:
图像控件被认为是图形控件,就像形状一样,所以它总是不如文本控件。如果你真的想要一个透明的图像,你可以使用 Microsoft 2.0 Form 代替(只有你有它)。图像可以在文本框的顶部,您可以通过将 Backstyle 设置为透明(0)使其透明。
【讨论】:
与我的其他答案完全不同的方法(因此是单独的答案),但您可以将 Form 上的 AutRedraw 和 ClipControls 设置为 false,它将允许 Image 控件与窗口控件在同一层上呈现。在某些情况下,您可以进行一些 flakey 重绘,但您可以尝试一下快速解决方案。
【讨论】:
我创建了一个透明的覆盖控件,以便在 VB6 应用程序之上添加一种注释层。我会尝试从记忆中描述它,如果这不能提供足够的信息,那么您可以回帖,我会尝试挖掘代码。
首先,向您的应用程序添加一个新的 USerControl。给它起一个像 ImageEx、PictureEx 或 TransparntImage 这样的名称。您将需要使用几个属性。确保控件是窗口化的,因此它可以位于其他窗口化控件之上。找到 MaskColor 属性并将其设置为青色(或您选择用于指示透明区域的任何颜色。可能有一个附加属性启用掩蔽行为,只需浏览属性即可。将控件背景颜色设置为 MaskColor 的背景颜色。此时您有一个不可见的控件。在我的控件中,我在表面上绘制了注释,但您可以使用 PaintPicture 或者甚至设置图像属性以实现非常简单的方法。
当然,为了使它成为一个可重复使用的控件,您需要在自己的属性中编写代码,以允许设置 MaskColor 和图像等,以便您可以将其中一个拖放到您想要的任何表单上。
一些链接:
【讨论】:
1) 删除所有文本框、标签和...(但在表单中记住它们的名称和位置)
2)转到(项目>组件)并标记(Microsoft Forms 2.0 Object Library)然后单击确定
3) 现在您可以在工具箱的默认控件下看到新控件...
4) 使用其文本框和标签控件而不是默认控件
5) 右键单击您的图像控件,然后单击 (Bring To Front)
【讨论】: