2015-10-16 158 views
0

我知道有一个方法textwidth来计算字符串的文本宽度。如何计算vb6中的文本宽度

但我们有两种形式,它有自己的单独列表框。但是我们要维护一个常见的.bas文件,它包含它的代码。

例如,让表单名称为form1和form2。宽度可以通过form1.TextWidth(ListBox.list(i))和form2.TextWidth(ListBox.list(i))来计算。

现在的问题是,由于我们正在为这两个项目维护一个通用的bas文件, form2项目不知道什么是form1。

建议我一些想法来获取字符串的宽度。

总的来说,我需要添加水平滚动条到列表框,如果它超过了字符串的最大宽度。因此,如果maxwidth> listboxWidth,那么我将调用horizo​​ntalscroll bar方法来启用它。

回答

0

这工作:) ListBox.Parent.TextWidth(ListBox.List(I))

+0

当然,这不能给出正确的结果,除非ListBox和其家长有完全一样的字体设置。否则,如手册中的示例代码所示,这是显而易见的方法。 – Bob77

0

您将使用WINAPI功能,使水平滚动条,所以你不会需要从像素做转换为缇,对?。

所有你需要的是像这样的一个功能:

function StringWidth(pStr as string) as long 
    dim sz as SIZE 
    hdc=CreateCompatibleDC(0) 
    oldFont=SelectObject(hdc,ifont.handle) 
    call GetTextExtentPoint32 (hdc,pStr,len(pstr), sz) 
    oldFont=SelectObject(hdc,oldFont) 
    call DeleteDC(hdc) 

    StringWidth=sz.cx 
end function 
+0

这是一个原型不完全工作的功能 – milevyo