![]() |
Модераторы: mihanik |
![]() ![]() ![]() |
|
gAlexKo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 23.3.2011 Репутация: нет Всего: нет |
Решил позаниматься программированием в OLE на C++(я использую CBULDER) и придумал такую задачу:
Представьте строку в WORD документе из 5 слов с разными (произвольными) стилями Например: one two three four где 1 слово "one" написано нормальным фонтом 2. курсивом 3. утолщенным 4. перечеркнутым Нужно составить отчет и написать какое слово как написано: типа 1 слово - норма 2 слово 0 курсив и т.д. Начал я было делать, launch_word(); my_app.OlePropertySet("Visible",true); my_doc = my_app.OlePropertyGet("Documents"); this_doc = my_doc.OleFunction( "Open", TVariant(dlg_open_word_doc->FileName.c_str()) ); this_doc.OleProcedure("Activate"); my_paras = this_doc.OlePropertyGet("Paragraphs"); my_para = my_paras.OleFunction("Item",1); Что дальше делать? Если кто захочет помочь закончить эту задачу, то я буду очень признателен. Что-то у меня недостаточно материалов на эту тему. |
|||
|
||||
gAlexKo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 23.3.2011 Репутация: нет Всего: нет |
Попробую упростить вопрос уважаемому All и переквалифицировать его. Я копаю конечно сам, но нахожу, что никак не могу найти простой и нужной информации. К примеру, я нашел как анализировать слова параграфа: my_range = my_para.OlePropertyGet("Range"); my_words = my_range.OlePropertyGet("Words"); //слова параграфа my_word_count = my_words.OlePropertyGet("Count"); //число слов for( int i=1; i<=my_word_count; i++ ) //анализируем слова { my_word = my_words.OleFunction( "Item", (Variant) i ); //получаем слово ... } Но дальше я не знаю из каких пропертей состоит к примеру my_word. Где можно посмотеть иерархию объектов MSWord? Типа "параграф состоит из words, words состоит из word, аттрибуты которых имеет такие то и такие проперти. А то получается я в темноте и делаю все на ощупь. Или вынужден искать по интернету примеры, которых часто нет для моих нужд. |
|||
|
||||
ViterAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 7.10.2009 Где: Харьков Репутация: 7 Всего: 7 |
my_word у тебя будет объектом типа Range. Вообще, любой кусок текста — абзац, предложение, слово или буква это объект типа Range.
Все свойства этого объекта ты можешь найти в справке Word для разработчика. Тебе в данном случае нужен шрифт (Font), характеризующий твоё слово. А у шрифта тебе нужно проверить свойства Bold, Italic, Underline и StrikeThrough. Сами эти свойства могут быть принимать три значения: True (1), False (0) и wdUndefined (9999999). Значение wdUndefined будет в том случае, если, например, в слове одна буква наклонная, а другая нет. Тогда у свойства Italic будет значение wdUndefined Как-то так |
|||
|
||||
gAlexKo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 23.3.2011 Репутация: нет Всего: нет |
Да, спасибо я докопался тоже. Вот только проперти объектов я был вынужден смотреть в заголовочном файле word_2k.h. Неужели нигде нет доступной документации в нормальном виде? Кстати, я правильно понял, что нет способа узнать что слов написано обычным шрифтом не сделав впереди анализ исключающий Bold Italic и т.п. Вот цикл анализа слов параграфа который я сделал: for( int i=1; i<=my_word_count; i++ ) //analyse of words { my_word = my_words.OleFunction( "Item", (TVariant) i ); //getting a word astr = AnsiString(my_word.OlePropertyGet("Text")).Trim(); if(astr.IsEmpty()) continue; //если текст начался с пробелов my_word_font = my_word.OlePropertyGet("Font"); my_word_style = my_word.OlePropertyGet("Style"); //теперь анализируем атрибуты слов if(italic_word.IsEmpty()) if(my_word_font.OlePropertyGet("Italic")) { italic_word = my_word.OlePropertyGet("Text") + (AnsiString)" - is italic; "; continue; } if(bold_word.IsEmpty()) if(my_word_font.OlePropertyGet("Bold")) { bold_word = my_word.OlePropertyGet("Text") + (AnsiString)" - is bold; "; continue; } if(cross_word.IsEmpty()) if(my_word_font.OlePropertyGet("StrikeThrough")) {cross_word = my_word.OlePropertyGet("Text") + (AnsiString)" - is crossed; "; continue; } if(norm_word.IsEmpty()) { norm_word = my_word.OlePropertyGet("Text") + (AnsiString)" - is normal; "; continue; } } astr = norm_word + italic_word + bold_word + cross_word; ShowMessage(astr); close_word(); //стандартная процедура закрытия |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование, связанное с MS Office" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |