Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не получается изменить толщину обрамления в таблиц, при редактировании документа Word 
:(
    Опции темы
=Женек=
Дата 19.8.2012, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

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



Код

VWord=CreateOleObject("Word.Application");
VWord.OlePropertySet("Visible",true);
VWord.OlePropertyGet("Documents").OleProcedure("Add");

VDoc=VWord.OlePropertyGet("Documents").OleFunction("Item",1);
VDoc.OlePropertyGet("Paragraphs").OleProcedure("Add");

text_temp="Отчет системы о дежурстве охраны за "+IntToStr(day)+"."+IntToStr(month)+"."+IntToStr(year)+" года.";
VDoc.OlePropertyGet("Paragraphs").OleFunction("Item",1).OlePropertyGet("Range").OlePropertyGet("Font").OlePropertySet("Bold",1);
VDoc.OlePropertyGet("Paragraphs").OleFunction("Item",1).OlePropertyGet("Range").OlePropertyGet("Font").OlePropertySet("Size",29);
VDoc.OlePropertyGet("Paragraphs").OleFunction("Item",1).OlePropertyGet("Range").OlePropertySet("Text",text_temp.c_str());
VDoc.OlePropertyGet("Paragraphs").OleFunction("Item",1).OlePropertyGet("Range").OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", 1);

VDoc.OlePropertyGet("Paragraphs").OleProcedure("Add");
VDoc.OlePropertyGet("Tables").OleProcedure("Add",
VDoc.OlePropertyGet("Paragraphs").OleFunction("Item",2).OlePropertyGet("Range"), 1+REPORT.bypasses_count*REPORT.checkpoints_count+REPORT.bypasses_count, //кол-во строк
4, //кол-во столбцов
1, //если ноль - то у таблицы невидимые границы
0); //если единица - то таблица не растягивается на всю страницу по ширине

VDoc.OlePropertyGet("Tables").OleFunction("Item",1).OlePropertyGet("Range").OlePropertyGet("Font").OlePropertySet("Bold",0);
VDoc.OlePropertyGet("Tables").OleFunction("Item",1).OlePropertyGet("Range").OlePropertyGet("Font").OlePropertySet("Size",10);


VTable=VDoc.OlePropertyGet("Tables").OleFunction("Item",1);


VTable.OlePropertyGet("Borders").OlePropertyGet("wdBorderLeft").OlePropertySet("LineWidth","wdLineWidth050pt"); // в этой строке засада....



Таблицу рисует нормально, но вот эта строка: 
VTable.OlePropertyGet("Borders").OlePropertyGet("wdBorderLeft").OlePropertySet("LineWidth","wdLineWidth225pt");
приводит Word в недоумение - пишет, неизвестное имя. Где я ошибся?

PM MAIL   Вверх
korian
Дата 19.8.2012, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 17



VTable.OlePropertyGet("Borders").OlePropertyGet("wdBorderLeft").OlePropertySet("LineWidth", 18 /* wdLineWidth050pt */);
PM   Вверх
=Женек=
Дата 19.8.2012, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

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



Цитата(korian @ 19.8.2012,  11:31)
VTable.OlePropertyGet("Borders").OlePropertyGet("wdBorderLeft").OlePropertySet("LineWidth", 18 /* wdLineWidth050pt */);

Все равно пишет - неизвестное имя.
PM MAIL   Вверх
volvo877
Дата 20.8.2012, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 13
Всего: 116



Проверять, какое именно имя неизвестно - не пробовал? В данном случае ты неправильно обращаешься к wdBorderLeft. Надо вот так:

Код

VTable.OlePropertyGet("Borders").OleFunction("Item", -2 /* wdBorderLeft */).OlePropertySet("LineWidth", 4 /* wdLineWidth050pt */);

PM MAIL   Вверх
=Женек=
Дата 21.8.2012, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

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



А на будущее - как проверить что за имя неизвестно?
PM MAIL   Вверх
volvo877
Дата 21.8.2012, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 13
Всего: 116



Как всегда: разбивать длинные выражения на короткие, и смотреть, где программа вылетает. Было бы так:
Код
Variant borders = VTable.OlePropertyGet("Borders");
Variant item = borders.OlePropertyGet("wdBorderLeft"); // <--- Вылет тут
item.OlePropertySet("LineWidth", 18 /* wdLineWidth050pt */);

- сразу понятно, что к чему
PM MAIL   Вверх
=Женек=
Дата 21.8.2012, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

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



А как изменить толщину сразу всех границ? 
Я перебрал все варианты цифр - были и правая граница и нижняя и меж ячеек, как только внешнюю границу таблицы сделать жирной? ПОиск в интернете не помогает...
PM MAIL   Вверх
volvo877
Дата 21.8.2012, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 13
Всего: 116



Перебрать все нужные границы:
Код
    for(int k = 1; k <= 4; k++)
    {
        VTable.OlePropertyGet("Borders").OleFunction("Item", -k).OlePropertySet("LineWidth", 18 /*wdLineWidth225pt*/);
    }

PM MAIL   Вверх
=Женек=
Дата 22.8.2012, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

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



Да я так и сделал, просто предполагаю наличие более изящного варианта. Тем более, что в самом ворде кнопка такая есть.
PM MAIL   Вверх
volvo877
Дата 22.8.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 13
Всего: 116



Кнопка в самом Ворде работает именно таким образом: перебирает все границы, и зарисовывает те, которые выбраны. Можешь убедиться: запиши макрос во время изменения Borders and Shading, и посмотри, что он делает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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