各位大师,怎么能得到RtfTextBox中的行距啊?API函数有时太难搞懂了。

解决方案 »

  1.   

    Option ExplicitPublic Const MAX_TAB_STOPS = 32&
    Public Const lDefaultTab = 720&Public Enum ERECParagraphLineSpacingConstants
       ercLineSpacingSingle = 0
       ercLineSpacingOneAndAHalf = 1
       ercLineSpacingDouble = 2
       ercLineSpacingTwips = 3
       ercLineSpacingTwipsAnyMinimum = 4
       ercLineSpacingTwentiethLine = 5
    End EnumPublic Type PARAFORMAT2
        cbSize As Integer
        wPad1 As Integer
        dwMask As Long
        wNumbering As Integer
        wReserved As Integer
        dxStartIndent As Long
        dxRightIndent As Long
        dxOffset As Long
        wAlignment As Integer
        cTabCount As Integer
        'rgxTabs(0 To MAX_TAB_STOPS - 1) As Byte
        'lPtrRgxTabs As Long
        lTabStops(0 To MAX_TAB_STOPS - 1) As Long
        dySpaceBefore As Long          ' /* Vertical spacing before para         */
        dySpaceAfter As Long           ' /* Vertical spacing after para          */
        dyLineSpacing As Long          ' /* Line spacing depending on Rule       */
        sStyle As Integer                  ' /* Style handle                         */
        bLineSpacingRule As Byte       ' /* Rule for line spacing (see tom.doc)  */
        bCRC As Byte                   ' /* Reserved for CRC for rapid searching *
        wShadingWeight As Integer          ' /* Shading in hundredths of a per cent  */
        wShadingStyle As Integer           ' /* Nibble 0: style, 1: cfpat, 2: cbpat  */
        wNumberingStart As Integer         ' /* Starting value for numbering         */
        wNumberingStyle As Integer        ' /* Alignment, roman/arabic, (), ), ., etc.*/
        wNumberingTab As Integer           ' /* Space bet 1st indent and 1st-line text*/
        wBorderSpace As Integer            ' /* Space between border and text (twips)*/
        wBorderWidth As Integer           ' /* Border pen width (twips)             */
        wBorders As Integer                ' /* Byte 0: bits specify which borders   */
                                        ' /* Nibble 2: border style, 3: color index*/
    End TypePublic Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function SendMessageStr Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
    Private Const PFM_SPACEBEFORE = &H40&
    Private Const PFM_SPACEAFTER = &H80&
    Private Const PFM_LINESPACING = &H100&
    Private Const PFM_STYLE = &H400&
    Private Const PFM_BORDER = &H800&                   ' /* (*)  */
    Private Const PFM_SHADING = &H1000&                 ' /* (*)  */
    Private Const PFM_NUMBERINGSTYLE = &H2000&          ' /* (*)  */
    Private Const PFM_NUMBERINGTAB = &H4000&            ' /* (*)  */
    Private Const PFM_NUMBERINGSTART = &H8000&         ' /* (*)  */Public Const WM_USER = &H400
    Public Const EM_GETPARAFORMAT = (WM_USER + 61)
    Public Const EM_SETPARAFORMAT = (WM_USER + 71)Public Sub GetParagraphLineSpacing(m_hWnd As Long, _
          ByRef eLineSpacingStyle As ERECParagraphLineSpacingConstants, _
          ByRef ySpacing As Long _
       )
    Dim tCF2 As PARAFORMAT2
    Dim lR As Long
        tCF2.dwMask = PFM_LINESPACING
        tCF2.cbSize = Len(tCF2)
        lR = SendMessage(m_hWnd, EM_GETPARAFORMAT, 0, tCF2)
        eLineSpacingStyle = tCF2.bLineSpacingRule
        ySpacing = tCF2.dyLineSpacing
    End SubPublic Sub SetParagraphLineSpacing(m_hWnd As Long, _
          ByVal eLineSpacingStyle As ERECParagraphLineSpacingConstants, _
          ByVal ySpacing As Long _
       )
    Dim tCF2 As PARAFORMAT2
    Dim lR As Long
        tCF2.dwMask = PFM_LINESPACING
        tCF2.cbSize = Len(tCF2)
        tCF2.bLineSpacingRule = eLineSpacingStyle
        tCF2.dyLineSpacing = ySpacing
        lR = SendMessage(m_hWnd, EM_SETPARAFORMAT, 0, tCF2)
    End Sub窗体代码:
    Option ExplicitPrivate Sub Command1_Click()
        '获取行距(&G)
        Dim lngSpacing As Long
        GetParagraphLineSpacing RichTextBox1.hwnd, ercLineSpacingTwentiethLine, lngSpacing
        Text1.Text = lngSpacing
    End SubPrivate Sub Command2_Click()
        '打开文件(&O)
        CommonDialog1.Filter = "*.rtf|*.rtf|*.*|*.*"
        CommonDialog1.ShowOpen
        RichTextBox1.FileName = CommonDialog1.FileName
    End SubPrivate Sub Command3_Click()
        '设置行距(&S)
        SetParagraphLineSpacing RichTextBox1.hwnd, ercLineSpacingTwentiethLine, Val(Text2.Text)
    End Sub