如何在VB6的文本框控件中设置左边距

4

这是回忆起很久以前的事情了,一个遗留应用程序,VB6,在表单上使用标准的文本框控件。

当你开始输入文本时,它紧贴在左边缘。我想设置一个左边距,使第一个字符向内缩进一些。

网上有十几个示例,都是相同的,但没有一个能为我改变左边距。我可能做错了什么?

以下是标准示例和我正在使用的示例:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const EM_SETMARGINS = &HD3
Private Const EC_LEFTMARGIN = &H1
Private Const EC_RIGHTMARGIN = &H2

' Set the TextBox's margins.
Private Sub SetMargin(nLeft As Integer, nRight As Integer, lhWnd As Long)
Dim lLongValue As Long

    'nRight needs to be in the hi-word, so we multiply by 65536
    lLongValue = (&H10000 * nRight) + nLeft

    SendMessage lhWnd, EM_SETMARGINS, EC_LEFTMARGIN Or EC_RIGHTMARGIN, lLongValue
End Sub

这绝对不会改变我在TextBox中文本的左边距。我尝试将值设置为10、100、1000和10000,但没有任何变化。TextBox的Alignment属性被设置为LeftJustify。我试过将Multiline设置为True或False。(某些示例表明必须将其设置为True)我尝试在Form_Load以及其他位置调用SetMargin()函数。
我一定是错过了什么很愚蠢的东西。但我已经查看并搜索了几个小时,无法找到缺失的部分。有没有人有任何想法?
添加我的测试情况。一个空的窗体,在其中只有一个TextBox和以下代码:
Option Explicit

Private Sub Form_Load()
    SetMargin 100, 100, txtMargin.hwnd
End Sub

Empty Form with Only TextBox


1
你的代码对我有效。我在表单上放置了一个 TextBox,然后在 Form_Load 中写下 SetMargin 100, 100, Text1.hwnd - Brian M Stafford
谢谢Brian。嗯,可能有什么不同之处?我尝试创建一个全新的表单,其中唯一的代码是Form_Load(),其中包含SetMargin调用。但它不起作用。根据MSDN文档,EM_SETMARGIN没有返回值。所以我无法检查状态。如果我无论如何检查SendMessage的状态,返回值都为零。如何解决这个问题? - JJJones_3860
1
是的,Alignment=LeftJustify和Multiline=False。我在不改变任何属性的情况下删除了控件。 - Brian M Stafford
1
我不确定问题在哪里或者如何进行调试。 - Brian M Stafford
1
更新:我已经退出了我的旧项目,并创建了一个新的VB6项目,其中包含1个表单和1个文本框。它可以工作!在我的当前系统上,100相当于一个明显的1.5英寸左边距。那么,现在的问题是,“我的旧项目中可能会覆盖这个的原因是什么?”请记住,我至少在旧项目上创建了一个全新的表单,所以它不会受到现有表单上其他任何内容的影响。嗯。 - JJJones_3860
显示剩余2条评论
1个回答

4

我不知道为什么,但我想出了一个方案,在我的传统VB6项目中可以实现这个功能。

在此之前,当它不能工作时,我在标准VB模块(.bas)中声明了SendMessage函数。 我也将Public SetMargin()方法放在那个模块中。然后从我的表单调用它。 当我这样做时,它不起作用。

现在,我将声明,定义的常量和SetMargin()方法放在我的表单的本地代码中。然后,就完成了!

下面是一个图像,其中左边距设置为30。你可以看到我为什么需要它。我想将一个图片控件叠加在文本框上,并让输入从其右侧开始。

左边距设置为30的示例


更新:我确信我已经尝试过这个了。但是退出VB6 IDE,关闭并重新启动我的虚拟机,现在代码在我的BAS模块中可以工作了。唉... - JJJones_3860
你真的在任何文本框控件中使用 Comic Sans MS 字体,还是这只是一个恶作剧? - wqw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接