Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение номера страницы в RichTextBox 
:(
    Опции темы
ProgramerForever
  Дата 20.8.2018, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 551
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Добрый день, уважаемые участники форума.
Подскажите, как определать номер страницы найденного текста, в RichTextBox? Везде говорится про номер строки и метод .GetLineFromCharIndex(position)
Код

'rtb(i) - RichTextBox
'findPos - позиця найденного текста
Dim findPos As Long = rtb(i).Find(txtQuery.Text)
x.subitems(2).text = CStr(rtb(i).GetLineFromCharIndex(findPos)) + " строка"

PM MAIL WWW ICQ   Вверх
diadiavova
Дата 22.8.2018, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5798
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 139



Возможно есть смысл подсчитать в тексте символы Page break


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
ProgramerForever
Дата 25.8.2018, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 551
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Для перехода на новую строку в rtf используется \page . В моём документе этого нет. Видимо текст сплошняком идёт, а при открытии в Word он сам разбивает на страницы.
Пару костылей приходят в голову, но хочется более красивого решения
1) Взять текст, сделать split по \n, суммировать длины получившихся строк, деленных на 80, результат разделить на 45. (45 строк, 80 символов в строке)
2) Загрузить в Word, и там попытаться получить номер страницы. Уверен что в Word это сделать проще.
Пример файла в аттаче

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  КОНВЕНЦИЯ_о_ядерной_безопасности.rtf 185,01 Kb
PM MAIL WWW ICQ   Вверх
diadiavova
Дата 26.8.2018, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5798
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 139



Цитата(ProgramerForever @  25.8.2018,  18:17 Найти цитируемый пост)
Взять текст, сделать split по \n, суммировать длины получившихся строк, деленных на 80, результат разделить на 45. (45 строк, 80 символов в строке)

Тогда уж проще умножить 45 на 80, получить количество символов на странице и разбить документ на блоки такого размера, только что-то мне подсказывает, что это даст неверный результат. Хотя, если учитывать границы слов и тому подобные вещи, то почему бы и не попробовать.

Цитата(ProgramerForever @  25.8.2018,  18:17 Найти цитируемый пост)
 Загрузить в Word, и там попытаться получить номер страницы. Уверен что в Word это сделать проще.

Ну в ворде номер текущей страницы отображается в строке состояния, а если надо программно получить номер страницы, на которой находится курсор или выделение, то можно сделать так
Код

   MsgBox Selection.Information(wdActiveEndPageNumber)
Но, кстати, ворд тоже может делить по-разному, там можно даже параметры деления на страницы задавать. И там учитывается не только количество символов, но и размер шрифта и тому подобные вещи, поскольку страница должна вписываться в определенные размеры. Так что здесь еще неплохо бы выяснить для чего это нужно.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
ProgramerForever
Дата 26.8.2018, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 551
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Понятно что точность подобных методов плюс-минус лапоть, потому и говорю, что костыль. Нужно это всё для поиска по документам. Программа ищет текст в документах и выдаёт результат: что найдено, в каком документе, на какой странице.
PM MAIL WWW ICQ   Вверх
diadiavova
Дата 26.8.2018, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5798
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 139



ProgramerForever, тут вопрос в том, по какому принципу нужно делить документ на страницы. Так как это делает ворд? Тогда вопрос в том, какие настройки использовать, ведь ворд делает это для печати и тому подобных вещей. Если есть возможность загрузить все в ворд, то там можно найти логические разрывы страниц, например так
Код

    Selection.Find.Execute ("^m")
Каждый такой вызов будет перемещать выделение к концу логической страницы, куда можно вставить реальные разрывы. Таким образом можно в цикле обойти загруженный документ, повставлять разрывы и сохранить, тогда в документе уже будут присутствовать реальные разрывы и с ними уже можно будет работать.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
ProgramerForever
Дата 26.8.2018, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 551
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Спасибо. я опробую этот вариант. Всё равно некоторый препроцессинг делается с файлами (переводится в rtf, он быстрее и надёжнее грузится), там и это можно добавить.
PM MAIL WWW ICQ   Вверх
ProgramerForever
Дата 10.9.2018, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 551
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Попробовал такой метод. Не получилось, т.к. в исходном документе нет разрывов страниц, Word их тоже не видит. Открыл в Word вручную и пробовал заменить "^m" на свой текст. Результат - Произведено 0 замен.
PM MAIL WWW ICQ   Вверх
diadiavova
Дата 11.9.2018, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5798
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 139



ProgramerForever, ну я там говорил не об использовании функции замены, а о выполнении приведенного кода в макросе. Но сейчас снова попробовал этот код и что-то он не работает, хотя в тот раз работал. Странно. Наверно надо этот вопрос задавать в разделе, посвященном VBA, там лучше знают как это сделать. Могу перенести тему туда, если хочешь.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Google
  Дата 23.9.2018, 12:02 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1072 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.