Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание таблицы в Word-е, Перенос проги с Delphi на C++ 
:(
    Опции темы
GraNit
Дата 21.12.2009, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте, Уважаемые господа!

Столкнулся с проблемой переноса кода Delphi на C++ Builder 5.
Мне по наследству досталась прога на С++, приходится поддерживать. Суть в следующем: требуется создать таблицу в ВОРДЕ и запихать туда данные. На Дельфях это выглядет вполне просто:
Код

     // y - строки
     // x - столбцы
      WordApplication1.Selection.Tables.Add(WordApplication1.Selection.Range, y,x,EmptyParam, EmptyParam);
      Tbl := WordApplication1.Selection.Tables.Item(1);
      Tbl.Borders.InsideLineStyle := wdLineStyleSingle;
      Tbl.Borders.OutsideLineStyle := wdLineStyleSingle;

ну и так далее... Все замечательно работает.
А на С++ не могу.
Код

        // Вставляем таблицу
        My_Word_App->Selection->Tables->Add(My_Word_App->Selection->Range, 1,6,EmptyParam, EmptyParam);
        // Вот здесь собака и порылась. Две следующие строки не правильные.
        Table *Tbl = new Table(this);
        Tbl = *My_Word_App->Selection->Tables->Item(1);


На объявление Tbl компилятор ругается: Cannot create instance of abstract class 'Table'
Прошу помощи, Уважаемые господа!!!
PM MAIL   Вверх
smoke_man
Дата 21.12.2009, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А если так:
Код

RangePtr MyRange = My_Word_App->Selection->Range;
TablePtr MyTable = MyRange->Tables->Add(MyRange, 1, 6, EmptyParam, EmptyParam);
MyTable->Columns->Item(1)->SetWidth(125, wdAdjustNone);



--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
vikaz
Дата 21.12.2009, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А может надо так?
Код

TTable *Tbl = new TTable(this);



--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Usper
Дата 21.12.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Обязательно использовать стандартные компоненты Borland`а?  Вот вариант без них:
Код
#include  <ComObj.hpp>
void Foo (void)
{
    Variant VWord;
    Variant VDoc;
    Variant VTable;
    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");
    VDoc.OlePropertyGet("Tables").OleProcedure("Add",
        VDoc.OlePropertyGet("Paragraphs").OleFunction("Item",1).OlePropertyGet("Range"), // здесь указываем место куда надо вставить таблицу (в данном случае параграф 1)
        3, //кол-во строк
        9, //кол-во столбцов
        1, //если ноль - то у таблицы невидимые границы
        0); //если единица - то таблица не растягивается на всю страницу по ширине
    VTable=VDoc.OlePropertyGet("Tables").OleFunction("Item",1);
        VTable.OleFunction("Cell",1,2).OlePropertyGet("Range"). OlePropertySet("Text","Данные"); //Запихиваем в таблицу данные
}



Это сообщение отредактировал(а) Usper - 11.1.2010, 12:04


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
GraNit
Дата 21.12.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



2 vikaz

Пробовал, не пойдет. TTable это не Table. Тоже думал, что Table может оказаться каким-нить там родителем для TTable. Компилятор ругается. Грит, что не может преобразовать Table в TTable.

2 smoke_man
Цитата(smoke_man @ 21.12.2009,  09:38)
А если так:
Код

RangePtr MyRange = My_Word_App->Selection->Range;
TablePtr MyTable = MyRange->Tables->Add(MyRange, 1, 6, EmptyParam, EmptyParam);
MyTable->Columns->Item(1)->SetWidth(125, wdAdjustNone);

А TablePtr объявим как? Так?
Код

Table *TablePtr = new Table (this);

Ошибка будет та же. У меня проблема с объявлением класса (или объекта, как правильно?), а потом мне нужно наследовать все свойства от My_Word_App->Selection->Tables->Item(1).
Или что-то я не понимаю?

2 Usper

Так не обязательно, но в OLE классе я пока не разбирался.
Понимаю, что это подходящий момент... но видите, даже с нормальным объявлением класса разобраться не могу smile

Это сообщение отредактировал(а) GraNit - 21.12.2009, 10:59
PM MAIL   Вверх
smoke_man
Дата 21.12.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Посмотри тут. Там приведена статья по работе с msword из Builder`а.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
GraNit
Дата 21.12.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(smoke_man @ 21.12.2009,  10:59)
Посмотри тут. Там приведена статья по работе с msword из Builder`а.

Интересная штука TablePtr. Только не понятная, откуда она взялась? smile
Все работает, Уважаемые господа!
Приношу извинения smoke_man-у. Совет был правильный. Из-за незнания не проверил.
Вопрос закрыт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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