0

私が開発しているソフトウェアでは、ユーザーが .RTF 形式のドキュメントを選択して TX Text Control にロードできるようにする必要があります。次に、各行 (列 2) からデータを抽出し、別の TX テキスト コントロールに保存します。

問題のドキュメントには、すべてのテキストが含まれる 1 つのテーブルが含まれています。

各行の2番目の列からテキストを抽出するために使用しているコードは次のとおりです。

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 の一貫性のない動作を示しているようです。セルの内容だけでなく、行全体を選択する場合があります。

この矛盾を実証するために、ここからダウンロードできるデモを作成しました。

このバグを克服する方法はありますか?

ティア

ヨギ・ヤン

4

2 に答える 2

1

はい。「TX テキスト コントロール」をダンプし、VB6 RTF コントロールを使用します。TOM に直接アクセスすることで、このコントロールをだまして 1.0 より後のバージョンをサポートすることができます (以前のバージョンの VB との下位互換性のために無効になっています)。(説明のためにこのリンクからお借りしています。)

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 は最上位のオブジェクトであり、Microsoft の TOM リファレンスは次のとおりです。楽しむ!:)

于 2014-05-20T21:55:13.917 に答える
0

私は別の方法で問題を解決しました。

私がしたことは、MS Word で問題のドキュメントを開き、最初の列の後に列を追加して、ドキュメントを保存することでした。

現在、ドキュメントを TX Text Control にロードし、追加された (2 番目の列) をプログラムで削除すると、すべてがうまく機能しているようです。

私の最初のテストでは、少なくとも問題のドキュメントについては問題が解決されていることが示されています。

貴重なヒント、コツ、ヒントをありがとうございます。

よろしく、

ヨギ・ヤン

于 2014-05-21T06:02:20.740 に答える