在richtextbox中对齐文本

时间:2016-01-28 22:28:16

标签: textbox vb6 richtextbox justify

我知道如何在文本框和richtextbox中为正确的中心和左边辩护,我搜索到的内容并没有找到答案是否可以像单词或所有其他程序一样理解文本?我尝试使用word pad然后复制它并且工作正常它只是当我不能单击一个命令按钮并证明文本以使所有行排成一行时我停止了, 我正在使用的代码就在这里

{StatusCode: 400, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Connection: close
  Date: Fri, 29 Jan 2016 13:36:01 GMT
  ETag: IzeHlNLRTewC8+btLeGxXA
  Server: Microsoft-IIS/8.5
  Access-control-allow-headers: origin, content-type, accept, x-requested-with
  Access-control-allow-origin: *
  X-content-type-options: nosniff
  X-frame-options: SAMEORIGIN
  X-xss-protection: 1; mode=block
  Content-Length: 11
  Content-Type: text/html
}}

3 个答案:

答案 0 :(得分:1)

您必须向基础RichEdit控件发送EM_SETPARAFORMAT消息,并将指针传递给PARAFORMAT2 structure wAlignment = PFA_JUSTIFY

或使用TOM和ITextPara.Alignment = tomAlignJustify(请参阅tomAlignJustify)或其他内容。

或者除此之外,查看RTF标记并使用.SelRTF

好的,你必须打开"高级断行和行格式化"第一。之后,这是非常平常的航行:

Option Explicit

Private Const WM_USER As Long = &H400&
Private Const EM_GETOLEINTERFACE As Long = WM_USER + 60
Private Const EM_SETTYPOGRAPHYOPTIONS As Long = WM_USER + 202
Private Const TO_ADVANCEDTYPOGRAPHY As Long = 1

Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" ( _
    ByVal hWnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long

Private Document As tom.ITextDocument

Private Sub cmdJustify_Click()
    'Justify the text of the first paragraph:

    'Select first paragraph in the document.
    With Document.Range(0, 0)
        .MoveEnd tomParagraph, 1
        .Para.Alignment = tomAlignJustify 'Apply justification.
        .Collapse tomStart 'Collapse the selection.
    End With
End Sub

Private Sub Form_Load()
    Dim Unknown As Object

    SendMessage RTB.hWnd, EM_GETOLEINTERFACE, 0, VarPtr(Unknown)
    Set Document = Unknown
    SendMessage RTB.hWnd, _
                EM_SETTYPOGRAPHYOPTIONS, _
                TO_ADVANCEDTYPOGRAPHY, _
                TO_ADVANCEDTYPOGRAPHY

    RTB.LoadFile "Resources\Sample1.rtf"
End Sub

答案 1 :(得分:0)

仅通过设置属性是不可能的。你必须做更多的工作并完成你的功能。

Private 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
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWND As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_USER = &H400
Const EM_SETTYPOGRAPHYOPTIONS = WM_USER + 202
Const TO_ADVANCEDTYPOGRAPHY = 1
Const EM_SETPARAFORMAT = WM_USER + 71
Private Const PFA_LEFT = 1
Private Const PFA_RIGHT = 2
Private Const PFA_CENTER = 3
Private Const PFA_JUSTIFY = &H4
Const MAX_TAB_STOPS = 32
Private Type PARAFORMAT2
    cbSize                     As Long
    dwMask                     As Long
    wNumbering                 As Integer
    wEffects                   As Integer
    dxStartIndent              As Long
    dxRightIndent              As Long
    dxOffset                   As Long
    wAlignment                 As Integer
    cTabCount                  As Integer
    rgxTabs(MAX_TAB_STOPS - 1) As Long
    dySpaceBefore              As Long
    dySpaceAfter               As Long
    dyLineSpacing              As Long
    sStyle                     As Integer
    bLineSpacingRule           As Byte
    bOutlineLevel              As Byte
    wShadingWeight             As Integer
    wShadingStyle              As Integer
    wNumberingStart            As Integer
    wNumberingStyle            As Integer
    wNumberingTab              As Integer
    wBorderSpace               As Integer
    wBorderWidth               As Integer
    wBorders                   As Integer
End Type
Public Enum ERECParagraphAlignmentConstants
   ercParaLeft = PFA_LEFT
   ercParaCentre = PFA_CENTER
   ercParaRight = PFA_RIGHT
   ercParaJustify = PFA_JUSTIFY
End Enum
Private Const PFM_ALIGNMENT = &H8&

Private Function SetAlignment(lHwnd As Long, ByVal eAlign As ERECParagraphAlignmentConstants)
    Dim tP2 As PARAFORMAT2
    Dim lR As Long
    tP2.dwMask = PFM_ALIGNMENT
    tP2.cbSize = Len(tP2)
    tP2.wAlignment = eAlign
    lR = SendMessageLong(lHwnd, EM_SETTYPOGRAPHYOPTIONS, TO_ADVANCEDTYPOGRAPHY, TO_ADVANCEDTYPOGRAPHY)
    lR = SendMessage(lHwnd, EM_SETPARAFORMAT, 0, tP2)
End Function

用法

  

SetAlignment RichTextBox1.HWND,ercParaJustify

我从VBForums

的代码库部分选择了此代码

我在这里发布相同的代码,因为这是一个非常有用的代码。

答案 2 :(得分:0)

VB6中的RichText控件只直接支持富文本1.0,它不支持对齐。正如Bob77建议的那样,你可以使用TOM来做到这一点。从本质上讲,您正在欺骗控件直接暴露其iRichTextOLE接口,这使您可以访问以后的RTF版本。这是我使用的代码:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_USER = &H400&
Private Const EM_GETOLEINTERFACE = (WM_USER + 60)

Dim myIUnknown As IUnknown   
Dim tomDoc As ITextDocument  

Sub Form_Load()
    SendMessage(rtcMyControl.hwnd, EM_GETOLEINTERFACE, 0&, myIUnknown)
    tomDoc = myIUnknown
End Sub

这与Bob77获取ITextDocument引用的代码基本相同,只是另一个版本。我只是把它放在显示对应于他的答案的“使用TOM”部分的部分,以防它有助于澄清这一点。就个人而言,如果我需要做任何你正在做的事情,TOM就是我的方式。