iTextRange::FindText 方法 (tom.h)

最多搜索 bstr 给出的文本的 Count 字符数。 起始位置和方向也由 Count 指定,匹配条件由 Flags 指定。

语法

HRESULT FindText(
  BSTR bstr,
  long Count,
  long Flags,
  long *pLength
);

参数

bstr

类型: BSTR

要查找的字符串。

Count

类型: long

要搜索的最大字符数。 可以是以下项之一。

tomForward 搜索到文章末尾。 这是默认值。
n (大于 0) cpFirst 开始向前搜索 n 个字符。如果范围本身与 bstr 匹配,则尝试从 cpFirst + 1 进行另一次搜索。
n (小于 0) cpLim 开始向后搜索 n 个字符。如果范围本身与 bstr 匹配,则尝试从 cpLim – 1 进行另一次搜索。
0 (退化范围) 搜索在范围之后开始。
0 (非生成范围) 搜索仅限于 该范围。
 

在所有情况下,如果找到字符串,范围限制将更改为匹配字符串的范围限制,并将 pLength 设置为等于字符串的长度。 如果未找到该字符串,则范围保持不变, 并将 pLength 设置为等于零。

Flags

类型: long

控制比较的标志。 它可以是 0 (默认) 或以下值的任意组合。

tomMatchWord 2 匹配整个单词。
tomMatchCase 4 匹配大小写。
tomMatchPattern 8 匹配正则表达式。

pLength

类型: long*

匹配的字符串的长度。

返回值

类型: HRESULT

方法返回 HRESULT 值。 如果该方法成功,则返回 S_OK。 如果该方法失败,则返回S_FALSE。 有关 COM 错误代码的详细信息,请参阅 COM 中的错误处理

注解

ITextRange::FindText 方法还可以通过使用插入符号 (^) 后跟特殊字母来匹配特殊字符。 有关特殊字符的列表,请参阅 Microsoft Word查找和替换对话框中提供的特殊列表。 例如, ^p 匹配下一个段落标记。 请注意, ^c 可用于表示要替换的字符串中的剪贴板内容。 因此, ^c 在查找字符串中使用 可以搜索富文本。 有关详细信息,请参阅Word帮助文件。

作为与 ITextRange::FindText 方法的比较, ITextRange::FindTextStart 方法从范围的 Start cp 向前或向后搜索, ITextRange::FindTextEnd 方法从范围的 End cp 向前或向后搜索。 有关更多详细信息,请参阅这些方法的说明。

下面是显示 ITextRange::FindText 方法的几个代码片段。

示例 #1。 以下 Microsoft Visual Basic for Applications (VBA) 程序在范围 r 标识的故事中打印所有 /* ... */ 注释。

Sub PrintComments (r As ITextRange)
    r.SetRange 0, 0                                      'r = insertion pt at start of story
    Do While r.FindText("/*") And r.FindTextEnd("*/")    'Select comment
        r.MoveStart tomCharacter, 2                      'But do not include the opening or 
                                                         'closing comment brackets
        r.MoveEnd tomCharacter, -2                       
        Print r                                          'Show the folks
    Loop
End Sub

可以将它们插入另一个编辑实例并保存到文件中,也可以将它们插入到表格或电子表格中的单独单元格中,而不是打印这些注释。

若要打印包含一个或多个“laser”一词匹配项的所有行,请将 循环替换为以下代码:

    While r.FindText("laser")            // Select next occurrence of "laser"
        r.Expand tomLine                // Select enclosing line    
        Print r                    // Print the line
    Wend

示例 #2。 以下程序打印一个电话列表,给定包含地址列表的故事。 地址列表条目由两个或多个段落标记分隔,每个条目具有以下格式。

Person/Business Name
Address (one or more lines)
(area code) telephone number 

请注意,使用 FindText 字符串参数中的 字符^p来查找一对连续的段落标记。

Sub PrintTelephoneList (r As ITextRange)
    r.SetRange 0, 0                 // r = insertion point at start of story
    r.MoveWhile C1_WHITE            // Bypass any initial white space
    Do
        r.EndOf tomParagraph, 1     // Select next para (line): has name
        Print r                    // Print it
        Do
            r.MoveWhile C1_SPACE        // Bypass possible space chars
            If r.Char = Asc("(") Then Exit Do    // Look for start of telephone #
        Loop While r.Move(tomParagraph)    // Go to next paragraph
        r.EndOf tomParagraph, 1        // Select line with telephone number
        Print r                    // Print it
    Loop While r.FindText("^p^p")        // Find two consecutive para marks
End Sub

示例 #3。 以下子例程将字符串 str1 的所有匹配项替换为 str2 的范围:

Sub Replace ( tr As ITextRange, str1 As String, str2 As String )
    Dim r As ITextRange
    r = tr.Duplicate                // Copy tr parameters to r
    r.End = r.Start                    // Convert to insertion point at Start
    While r.FindText(str1, tr.End - r.End)        // Match next occurrence of str
        r = str2                // Replace it with rep
    Wend                        // Iterate till no more matches
End Sub

示例 #4。 以下代码行在 HRESULT 出现的右括号“ (”的第一个匹配项之前插入一个空白。

    If r.FindText("HRESULT") And r.FindText("(") Then r = " ("

若要针对所有此类事件执行此操作,请在上述代码行中将 If 更改为 While/Wend 循环。 这是无法通过“查找”和“替换”对话框运行的 FIND/REPLACE 宏的示例。

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 tom.h
DLL Msftedit.dll

请参阅

概念性

FindTextEnd

FindTextStart

ITextRange

引用

文本对象模型