C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 241 - АВТОМАТИЗАЦИЯ приложений MS Office (продолжение) / MFC шаг за шагом / Visual C++

Шаг 241 - АВТОМАТИЗАЦИЯ приложений MS Office (продолжение)

Подравняем?

Мы научились выводить текст на страницу. Это неплохо, но для полного счастья не хватает, чтобы этот текст был форматированным. Этим мы сейчас и займемся. Определим константы, необходимые для задания типов выравнивания, и вставки разрыва (соответственно, разрыва страницы и секции)

#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");

К сожалению, я не знаю, как сделать шрифт подчеркнутым.

Для того, чтобы отключить изменение начертания, достаточно просто вызвать соответствующий метод еще раз (совсем как когда мы нажимаем/отжимаем кнопки 241_1.gif (153 b) и 241_2.gif (143 b)).

И в заключении вставим в документ разрыв страницы. Это будет немного сложнее, поскольку метод 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)


| |
Автор Каев Артем.
[AD]