首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何克服VB6中TX文本控件ActiveX的不一致行为?

如何克服VB6中TX文本控件ActiveX的不一致行为?
EN

Stack Overflow用户
提问于 2014-05-19 22:08:54
回答 2查看 1.1K关注 0票数 0

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

有问题的文档包含一个表,其中包含所有文本。

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

代码语言:javascript
复制
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文本控件在选择单元格内容时的不一致行为。有时,它会选择整个行,而不仅仅是单元格内容。

为了演示这一不一致之处,我创建了一个演示,可以是downloaded from here

有什么办法可以克服这个bug吗?

提亚

Yogi Yang

EN

回答 2

Stack Overflow用户

发布于 2014-05-21 05:55:14

是。转储"TX文本控件“并使用VB6 RTF控件。您可以通过直接访问TOM来诱使此控件支持1.0以后的版本(由于与早期版本的VB向后兼容,它被削弱了)。(我借用this link作为我的解释。)

除了RichTextBox引用之外,还需要添加对TOM的引用(如果没有作为可用引用列出,请浏览到riched20.dll)。

代码语言:javascript
复制
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微软的TOM引用。玩得开心!:)

票数 1
EN

Stack Overflow用户

发布于 2014-05-21 14:02:21

我用一种不同的方式解决了这个问题。

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

现在,我正在TX文本控件中加载文档,并以编程方式删除添加的(第二列),然后一切似乎都很正常。

我的初步测试表明,至少对于有问题的文档,问题已经解决了。

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

致以敬意,

Yogi Yang

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23739977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档