如何克服VB6中TX Text Control ActiveX的不一致行为?

时间:2014-05-19 14:08:54

标签: vb6 activex txtextcontrol

在我正在开发的软件中,我必须允许用户选择.RTF格式的文档并将其加载到TX Text Control中。然后从每一行(第2列)中提取数据并将其保存到另一个TX文本控件。

有问题的文件包含一个表格,其中包含所有文字。

以下是我用于从每行的第二列中提取文本的代码:

With TXTextControl1

    .SetFocus
    .ResetContents
    .LoadSaveAttribute(txLoadImages) = True
    .Load fn, 0, 5
    DoEvents

    I = .TableNext(I, CurTableID)
    If CurTableID = 0 Then
      MsgBox "Document Format is NOT Proper", vbInformation, App.Title
      Screen.MousePointer = vbNormal
      Exit Sub
    End If

    For J = 1 To .TableRows(CurTableID) - 1 'Step 7 'Loop through all Rows
      .SelStart = .TableCellStart(CurTableID, J, 2) - 1
      .SelLength = .TableCellLength(CurTableID, J, 2)
      Debug.Print "Row: " & J, .TableColAtInputPos
      List1.AddItem "Row: " & J & " Col Cnt: " & .TableColAtInputPos & IIf(.TableColAtInputPos = 0, " <= Problem Here", "")
      TXTextControl2.SelText = J & vbCrLf
      TXTextControl2.RTFSelText = .RTFSelText
      TXTextControl2.SelText = vbCrLf
      DoEvents
    Next J
  End With

但是这段代码似乎表明TX Text Control在选择Cell内容时表现不一致。有时它会选择整行,而不仅仅是单元格内容。

为了证明这种不一致,我创建了一个可以downloaded from here的演示版。

任何想法如何克服这个错误?

TIA

Yogi Yang

2 个答案:

答案 0 :(得分:1)

是。转储&#34; TX文本控件&#34;并使用VB6 RTF控件。您可以通过直接访问TOM来欺骗此控件以支持1.0之后的版本(它因为与早期版本的VB的向后兼容而瘫痪)。 (我从this link借用我的解释。)

与RichTextBox引用一起,您需要添加对TOM的引用(如果未列为可用引用浏览到riched20.dll)。

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

SendMessage rtbText.hwnd, EM_GETOLEINTERFACE, 0&, myIUnknown
Set tomDoc = myIUnknown

这将使您直接参考RTF控件中TOM的底层实现。 ITextDocument是顶级对象,here's是Microsoft的TOM参考。玩得开心! :)

答案 1 :(得分:0)

我以不同的方式解决了这个问题。

我所做的是在MS Word中打开有问题的文档,并在第一列之后添加了一个额外的列并保存文档。

现在我在TX Text Control中加载文档并以编程方式删除添加的(第二列),然后一切似乎都运行良好。

我的主要测试表明问题至少已解决了相关文档。

感谢大家提供宝贵的提示,技巧和提示。

此致

Yogi Yang