'编成函数 '借用一个 PictureBox 'Object: Form1、Picture1、Command1 Option Explicit Public Function GetTextWidth(TextX As String, FontX As stdole.StdFont, PictureX As VB.PictureBox, Optional FromScale As VBRUN.ScaleModeConstants = vbHimetric, Optional ToScale As VBRUN.ScaleModeConstants = vbPixels) As Double '保留原值 Clone 该字体为今后恢复,也可能没必要 Dim Temp As New stdole.StdFont Temp.Bold = FontX.Bold Temp.Charset = FontX.Italic Temp.Name = FontX.Name Temp.Size = FontX.Size Temp.Strikethrough = FontX.Strikethrough Temp.Underline = FontX.Underline Temp.Weight = FontX.WeightSet PictureX.Font = FontX GetTextWidth = PictureX.ScaleX(PictureX.TextWidth(TextX), FromScale, ToScale) '恢复 Set PictureX.Font = Temp End FunctionPrivate Sub Command1_Click() 'VBA.MsgBox Me.ScaleX(Me.TextWidth("aa"), vbHimetric, vbPixels) 'VBA.MsgBox GetTextWidthPixels("aa", Me.Font, Picture1) Dim x As New stdole.StdFont x.Size = 12 VBA.MsgBox GetTextWidth("a阿", x, Picture1) End Sub
我自己的计算方法Public Function GetWidth(mstr As String, fontsize As Single) As Single '-----------get the width of string in screen or printer Dim i As Integer GetWidth = LenB(StrConv(mstr, vbFromUnicode)) * fontsize * 10 End Function
MsgBox Picture1.TextWidth("ABCDEF")
卧推150斤!引体向上一组15个,付卧撑一组80个轻而一举的MM呢?
其实要得到一个字符串的准确宽度,用DrawTextEx最好啦。:)
并调用API GetTextExtend 来获取象素单位的长度。有一种变通的方法是用label来装载一个字符串,并设为autosize,然后取其长度就行了
在vb中用WIN32 API有时结果不准确。用lable却是一个即简单又好用的方法。
'借用一个 PictureBox
'Object: Form1、Picture1、Command1
Option Explicit
Public Function GetTextWidth(TextX As String, FontX As stdole.StdFont, PictureX As VB.PictureBox, Optional FromScale As VBRUN.ScaleModeConstants = vbHimetric, Optional ToScale As VBRUN.ScaleModeConstants = vbPixels) As Double
'保留原值 Clone 该字体为今后恢复,也可能没必要
Dim Temp As New stdole.StdFont
Temp.Bold = FontX.Bold
Temp.Charset = FontX.Italic
Temp.Name = FontX.Name
Temp.Size = FontX.Size
Temp.Strikethrough = FontX.Strikethrough
Temp.Underline = FontX.Underline
Temp.Weight = FontX.WeightSet PictureX.Font = FontX
GetTextWidth = PictureX.ScaleX(PictureX.TextWidth(TextX), FromScale, ToScale)
'恢复
Set PictureX.Font = Temp
End FunctionPrivate Sub Command1_Click()
'VBA.MsgBox Me.ScaleX(Me.TextWidth("aa"), vbHimetric, vbPixels)
'VBA.MsgBox GetTextWidthPixels("aa", Me.Font, Picture1)
Dim x As New stdole.StdFont
x.Size = 12
VBA.MsgBox GetTextWidth("a阿", x, Picture1)
End Sub
icbcnbxs(我来灌水) TMD就认定我是女的了!:-(
'-----------get the width of string in screen or printer
Dim i As Integer
GetWidth = LenB(StrConv(mstr, vbFromUnicode)) * fontsize * 10
End Function
我有给分啊,可是这些每次点给分按钮后就说找不能网页啊!以所总是给不了分啊。
虽然我来csnd完全出于学习而对分数并不关心,但我对于信用我还是看重的啊,所以我每次都给分的啊。还有各位,这个问题已解决了,不过还是希望大家提出好的方法。