|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.08.2009, 19:09 | #1 |
Форумчанин
Регистрация: 12.08.2009
Сообщений: 118
|
Как перейти selection-ом в конец документа?
Ввожу текст в документ. Периодически меняю количество столбцов.
Затем формирую несколько текстовых блоков: for (int i = 0; i < 5; ++i) { Word::ShapePtr textBox = m_WordDocument->Shapes->AddTextbox (Office::msoTextOrientationHorizont al, m_AppWord->CentimetersToPoints(5 + i*3), m_AppWord->CentimetersToPoints(5), 100, 100); Word::TextFramePtr textFrame = textBox->GetTextFrame(); if (!textFrame) return ; Word::RangePtr textRange = textFrame->GetTextRange(); if (!textRange) return ; textRange->Select(); m_AppWord->GetSelection()->TypeText(L"param pam pam"); } После этого каретка установлена в последнем текстовом боксе. Перевожу ее к основному тексту: Word::SelectionPtr sel = m_AppWord->GetSelection(); sel->GoTo(); Здесь хочу сделать переход на новус страницу: CComVariant variant(Word::wdSectionBreakNextPag e); m_AppWord->GetSelection()->InsertBreak(&variant); Но каретка стоит в начале страницы. Если я выполню последние 2 строчки кода, выше введенный текст перепрыгнет на следующую страницу. Как перевести каретку в конец основного введенного текста? Пробую методом selection-a MoveRight, но я точно не подсчитываю сколько чего я ввел. Что здесь можно сделать? |
25.08.2009, 19:48 | #2 |
Форумчанин
Регистрация: 12.08.2009
Сообщений: 118
|
пробую:
после основного текста Word::RangePtr range = m_AppWord->GetSelection()->GetRange(); ... добавляю текстовые блоки ... m_AppWord->GetSelection()->GoTo(); m_AppWord->GetSelection()->SetRange(range->GetStart(), range->GetEnd()); все нормально, но если основного текста нет - текстовые блоки перепрыгивают на след страницу. Что здесь можно сделать? |
25.08.2009, 20:41 | #3 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Код:
Код:
Еще замечания. Чтобы добавить текст в диапазон (Range) его совершенно необязательно выделять. Вот это: Код:
Range.Text = "заменяем содержимое указанного диапазона" Range.InsertAfter "добавляем текст после диапазона" Range.InsertBefore "Добавляем текст перед диапазоном" По всей видимости должно быть так: Код:
Код:
В случае, если ты работаешь с Selection, тебе необходимо показать приложение и документы в нем, чтобы что-то с ними делать. В случае же с Range и приложение и документы могут оставаться невидимыми, пока ты не закончишь свое черное дело. Могу привести пример такой работы c Word программой SolidWorks: она формирует сведения о проекте в виде документа Word, но при этом показывает готовый результат, а не заставляет пользователя наблюдать за процессом последовательного заполнения документа. Пишу это тебе, Diego__, потому что чувствую, что семена упадут в благодатную почву.
Лучше день потерять — потом за пять минут долететь!©
Последний раз редактировалось viter.alex; 26.08.2009 в 03:51. |
26.08.2009, 17:38 | #4 |
Форумчанин
Регистрация: 12.08.2009
Сообщений: 118
|
Спасибо, viter.alex. Вы, мне здорово помогли.
Вопросик по поводу быстродействия: насколько Range лучше/быстрее чем Selection? В С++ у меня получается работать через Selection с невидимым документом. В каких случаях лучше использовать каждый из этих объектов? |
26.08.2009, 18:16 | #5 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Насколько быстрее, сказать не могу. Но быстрее, ведь действия с Range не требуют не прорисовываются на экране. Я подумаю над тестовой программкой.
Я всегда работаю с Range. Selection использовал в двух случаях: для определения объединенных ячеек в таблице (через Range не работает) и для вставки разделителя стилей (у Range нет такого метода). А также тогда, когда нужно получить выделенный объект от пользователя (таблицу там, рисунок и пр.)
Лучше день потерять — потом за пять минут долететь!©
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как перейти на сайт | kuzmich | Общие вопросы Delphi | 2 | 01.06.2009 21:12 |
Как перейти на адрес сайта? | eldar | PHP | 11 | 29.05.2009 21:06 |
Как перейти на ячейку | komar73 | Microsoft Office Excel | 2 | 09.02.2009 13:30 |
Как перейти по ссылке (URL) | Avron | Общие вопросы Delphi | 3 | 22.12.2008 16:56 |
Как перейти на следущюю строку? | nikleb | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 16.06.2008 21:19 |