Мы научились выводить текст на страницу. Это неплохо, но для полного счастья не хватает, чтобы этот текст был форматированным. Этим мы сейчас и займемся. Определим константы, необходимые для задания типов выравнивания, и вставки разрыва (соответственно, разрыва страницы и секции)
#define AL_LEFT 0 #define AL_CENTER 1 #define AL_RIGHT 2 #define AL_JUST 3 #define BR_PAGE 0 #define BR_SECT 1
Для изменения выравнивания текста у текущего выделения есть метод void SetAlignment(long nNewValue), в качестве параметра которому передается требуемое выравнивание.
Обратите внимание, что при задании строчек вывода мы по-прежнему можем пользоваться символами табуляции и перевода строки.
В продолжении предыдущего шага пишем:
oPar.SetAlignment(AL_CENTER); oSel.TypeText("Этот текст будет выравнен по центру\n"); oPar.SetAlignment(AL_RIGHT); oSel.TypeText("Этот текст будет выравнен по правому краю\n"); oPar.SetAlignment(AL_LEFT); oSel.TypeText("Этот текст будет выравнен по левому краю\n"); oPar.SetAlignment(AL_JUST); oSel.TypeText("Этот текст будет выравнен по по обоим краям\n");
Теперь поменяем начертание шрифта. Для этого используем методы BoldRun() и ItalicRun():
oSel.BoldRun(); oSel.TypeText("Этот текст будет жирным\n"); oSel.ItalicRun(); oSel.TypeText("Этот текст будет наклонным\n");
К сожалению, я не знаю, как сделать шрифт подчеркнутым.
Для того, чтобы отключить изменение начертания, достаточно просто вызвать соответствующий метод еще раз (совсем как когда мы нажимаем/отжимаем кнопки и ).
И в заключении вставим в документ разрыв страницы. Это будет немного сложнее, поскольку метод InsertBreak требует в качестве параметра переменную типа COleVariant. Но мы можем воспользоваться простым конструктором с параметром для преобразования наших констант в требуемый тип:
COleVariant сovBreakType((long)BR_PAGE); //вставить разрыв страницы oSel.InsertBreak(covBreakType);
В настоящее время редкий документ обходится без картинок. Не будем и мы лишать себя удовольствия немного разнообразить скучный текст.
Для начала добавим две переменный типа COleVariant с начальными значениями TRUE и FALSE.
COleVariant covTrue((short)TRUE), covFalse((short)FALSE);
Теперь точно также, как раньше, добавляем 2 класса, которые отвечают за "внедренные фигуры". Первый класс, как обычно, коллекция, второй - одиночная фигура.
InlineShapes oShps; InlineShape oShp;
Получаем текущюю коллекцию, и добавляем в нее новую фигуру. Для этого используем метод LPDISPATCH AddPicture(LPCTSTR FileName, VARIANT* LinkToFile, VARIANT* SaveWithDocument, VARIANT* Range);. Обратите внимание на параметры. Первый - это местоположение вставляемой картинки на диске, второй - вставлять картинку в текст как она есть на момент вставки или установить связь с картинкой таким образом, чтобы при изменении изображения оно обновлялось и в документе. Третий параметр - сохранять ли картинку внутри документа. Последний параемтр мы игнорируем.Эти параметры похожи на те, которые мы настраиваем в Word`e
//добавим параграф oSel.TypeParagraph(); oShps = oSel.GetInlineShapes(); oShp = oShps.AddPicture("d:\\winnt\\Rhododendron.bmp",covFalse,covTrue,covOptional);
Естественно, на Вашей машине путь к картинке будет другим :)
Мы можем изменять параметры нашей картинки, например, ее ширину и высоту. Например, увеличим размер вставленной картинки в 1.5 раза.
float width = oShp.GetWidth(); float height = oShp.GetHeight(); oShp.SetWidth(width*1.5); oShp.SetHeight(height*1.5);
Если попытаться закрыть наш красивый документ, то выясниться, что имя-то мы ему не задали, и автоматически не сохранили. Пользователю приходится самому придумывать, куда записывать и какое имя давать отчету. Давайте избавим пользователя от лишних вопросов. Для этого у нас есть функция... правильно, void SaveAs(VARIANT* FileName, VARIANT* FileFormat, VARIANT* LockComments, VARIANT* Password, VARIANT* AddToRecentFiles, VARIANT* WritePassword, VARIANT* ReadOnlyRecommended, VARIANT* EmbedTrueTypeFonts, VARIANT* SaveNativePictureFormat, VARIANT* SaveFormsData, VARIANT* SaveAsAOCELetter);, опять-таки со множеством параметров. Можно настроить все, что угодно, включая пароль.
_Document oActiveDoc; oActiveDoc = app.GetActiveDocument(); oActiveDoc.SaveAs(COleVariant("c:\\doc1.doc"), COleVariant((short)0), covFalse, COleVariant(""), covTrue, COleVariant(""), covFalse, covFalse, covFalse, covFalse, covFalse);
На этом пока ;) все.
Шаг прислал Yegor A. Blackheel (blackheel@rlt.ru)