0
Miffka
19.11.09
✎
15:51
|
Добрый ден!
Интегрирую FoxIt в 1С-ку (Foxit Reader SDK ActiveX 3.0).
В нём есть метод
BOOL FindFirst(BSTR search_string, BOOL bMatchCase, BOOL bMatchWholeWord)
Но он всегда ищет с первой страницы (в этом можно убедиться через событие
Void OnSearchProgress (long pageNumber, long pageCount)), а мне чётко известно, на какой странице находится слово. Соответственно, поиск иногда на 90 страницах впустую.
Пробовал метод
void SearchAndHighlightAllTextOnPage(BSTR searchstring, BOOL bMatchCase, BOOL bMatchWholeWord,long PageNo); //PRO-version
Он прекрасно выделяет указанное слово на нужной странице, НО не переходит к нему (т.е. если слово в конце страницы, а масштаб не позволяет увидеть конец страницы, выделение можно увидеть только если пролистать вниз).
Как решить дилему?
P.s. Всё начиналось с Adobe Reader ActiveX, но там был извращенский способ через SendKey. Не всегда срабатывает...
|
|
2
Miffka
19.11.09
✎
16:35
|
Перед тем, как использовать FindNext, необходимо вызвать FindFirst.
BOOL FindNext(BOOL bSearchDown)
Соль в том, что по хорошему бы этот метод (FindNext) должен понимать, на какой странице сейчас стоим, чтобы искать, начиная с неё. Но...
Есть ещё метод
FindFirstEx
The extension of the FindFirst function. Provides an interface to search for a string in the document.
Prototype:
BOOL FindFirstEx(const VARIANT FAR& search_string, BOOL bMatchCase,
BOOL bMatchWholeWord)
Насколько я понимаю, здесь говорится про то, что он связан с интерфейсом, но я пробовал его вызвать, типа FindFirstEx("Слово"), он ищет опять же с 1-й страницы, и, что самое интересное - не находит (хотя слово точно есть!), а FindFirst("Слово") - находит.
|
|