我想把超出Lable边界的部分用省略号"..."代替。
可是不知该从字符串的什么位置开始替换。
请高手指教。

解决方案 »

  1.   

    我没试过,但我想说一下 我的想法:
       Lable的字体大小你应该知道吧,长度也知道了,Lable的Width与以上两个有个简单的算法不就能实现了吗?希望这对你有用。
      

  2.   

    利用textwidth方法,可以自己编一子程来实现该功能
      

  3.   

    Type Rect
     Left       As Long
     Top        As Long
     Right      As Long
     Bottom     As Long
    End TypeDeclare Function DrawText& Lib "User32" Alias "DrawTextA" (ByVal HDC As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As Rect, ByVal wFormat As Long)根据Rect返回值,得到基本宽度,然后再作处理
      

  4.   

    for i = 1 to len(label1.caption)
    if textwidth(left(label1),i))+textwidth("...")>label1.width then 
    label1.caption=left((label1),i-1) & "..."
    exit for
    endif
    next
      

  5.   

    问题: 如何得到一个某种字体的字符串是多少个象素的长度? 不是len(string)!
    解答: 编成函数,借用一个 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.Weight
          Set PictureX.Font = FontX
          GetTextWidth = PictureX.ScaleX(PictureX.TextWidth(TextX), FromScale, ToScale)
          '恢复
          Set PictureX.Font = Temp
          End Function
          '测试
          Private 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
      

  6.   

    For i = 1 To Len(Label1.Caption)
    If TextWidth(Left(Label1.Caption, i)) + TextWidth("...") > Label1.Width Then
    Label1.Caption = Left((Label1), i - 1) & "..."
    Exit For
    End If
    Next
    刚才的符号错误了,我的程序肯定可以达到他的要求。
    playyuer(心上人),你看错了我用len的用途了。:)
      

  7.   

    len不是用来获得它的长度,而是label中字符的数量,形成循环来判断裁剪的位置。
    而长度是用textwidth函数来获得的,不信,你运行看看,绝对满足要求的说。
      

  8.   

    楼上的代码太多了,本来很简单的问题搞得那么复杂
    介绍一个API给你认识一下吧:
    GetTabbedTextExtent 函数返回文本在设备中的宽度和高度。
    然后用一个循环判断大小就可以了嘛。
    而且费尽心思的不就是要知道文本的大小信息吗,如果多加一个Label控件,把Label.AutoSize属性设为True,在把Visidle属性设为False,不就是作为取得字符串大小的空件吗?通过设置Caption和读取Width属性,然后进行判断不就可以了吗?