Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/67: Рейтинг темы: голосов - 67, средняя оценка - 4.57
Гость

Управление Word-м из С++ Builder 6

03.12.2006, 18:57. Показов 12689. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дали задание в институте научиться управлять MS Word из С++ BUILDER 6 с использованием COM технологии. Может у кого есть примеры по созданию такой программы.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2006, 18:57
Ответы с готовыми решениями:

Управление Excel из С++ Builder 6
Друзья спаите, помогите!!! Нужно написать метод записи строки в ячейку Exsel. class ExServer { public: ExServer(); ...

Управление роутером средствами C++ Builder
Необходимо создать программу, которая будет управлять роутером (я использую Upvel UR-325BN). Программа должна уметь блокировать и...

Управление Web-страницей из C++ Builder
Доброго всем времени суток !!! Если кто-то знает, подскажите, пожалуйста, потому, что ковыряюсь уже не одни сутки и не могу найти...

8
Администратор
 Аватар для mik-a-el
87883 / 53204 / 249
Регистрация: 10.04.2006
Сообщений: 13,766
04.12.2006, 16:44
Находите библитотеку типов ворда - ее и использовать.
0
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
28.03.2007, 19:49
Дали задание в институте научиться управлять MS Word из С++ BUILDER 6 с использованием COM технологии. Может у кого есть примеры по созданию такой программы.


А мне дали задание написать программу снятия и установки кодовой защиты для документов MS Word. У меня такие вопросы:
Что понимать под кодовой защитой (установка пароля на открытие и (или) на запись; или же шифрование документа по криптоалгоритму)? (препод в отпуске спросить не у кого?)
Что со всем этим делать (идей полно, а начать не могу). Потому что они расплывчатые.
И еще более конкретный вопрос:
Свойство FileName диалога OpenDialog (для выбора файла) хранит путь и имя файла в Ansi String.
Функция StgIsStorageFile(wсhar_t *) для определения является ли файл структурированным хранилищем (коим является Word-документ) требует параметр типа wсhar_t *. Что надо сделать и как, чтобы передать имя выбранного файла с помощью диалога в эту функцию.
Следующее не помогло:
C++
1
2
3
4
5
        void *uk;
        wchar_t *wh;
        uk=(void*)(&S);
        wh=(wchar_t*)uk;
        LONG l = StgIsStorageFile(wh);
какой бы я файл не выбирал функция возвращает одно и тоже значение (File not found).
0
сам себе админ и инженер
 Аватар для Pricolist
1345 / 99 / 11
Регистрация: 07.09.2006
Сообщений: 1,573
28.03.2007, 21:33
если файл не найден, то проблема может крыться в неправельном адресе файла
0
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
30.03.2007, 00:34
Отвечаю на свой вопрос, может кому тоже пригодиться.
C++
1
2
3
4
5
6
7
8
9
10
    //выбрать файл
        OpenDialog1->Execute();
        S=OpenDialog1->FileName;
    //Проверка - является ли указанный файл структурированным хранилищем.
        int bufsize; //размер, который будет занимать строка wchar_t
        wchar_t *wh; // это понятно указатель
        str=&S;
        bufsize=str->WideCharBufSize(); //собственно сам метод из //AnsiString для определения размера массива после преобразования
         wh=new wchar_t [bufsize]; //выделение памяти под этот массив
         wh=str->WideChar(wh,bufsize);//само преобразование.
Вобщем, просто так эти типы друг к другу не приводятся.
0
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
05.04.2007, 22:01
Находите библитотеку типов ворда - ее и использовать.
Пробую работать с этой библиотекой, но вот что получается (точнее не получается):

кинул на форму один WordApplication и один WordDocument из вкладки Office2k. В соответстующих местах появились необходимые заголовки и объявления.
С помощью такого кода
C++
1
2
3
4
5
6
7
8
9
// TWordApplication *MSWord;
// TWordDocument *WordDoc;
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  MSWord->set_Visible(true);
  MSWord->Dialogs->Item(wdDialogFileOpen)->Show();
  WordDoc->ConnectTo(MSWord->ActiveDocument);
}
надеялся вызвать word, выбрать любой документ, сделав его активным.
Далее с ним надо проделать следующие манипуляции - задать пароль на открытие и закрыть. Но до этого не дошло, потому что на этапе компиляции выскакивают следующие ошибки:
[C++ Error] Unit1.cpp(23): E2015 Ambiguity between 'wdDialogFileOpen' and 'Word_2k::wdDialogFileOpen'
[C++ Error] Unit1.cpp(23): E2285 Could not find a match for 'Word_2k:ialogs::Item(WdWordDialog)'
Код брал из примера Русской справки по Builder Архангельского. Почему он у меня не работает и что надо сделать чтобы заработал?
0
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
09.04.2007, 00:59
1.Ответьте пожалуйста, всегда ли загруженный Ворд с помощью Connect(), если с ним разрывать связь пользуясь Disconnect() при закрытии программы написанной в Builder6 будет закрываться.
Можно ли каким-нибудь образом оставить его (Ворд) работающим при закрытии моей проги.
Использую компоненты TWordApplication и TWordDocument. Свойства AutoConnect, AutoQuit = false.

2. Где-то прочитал, что вызов любого свойства или метода TWordApplication автоматически вызывает метод Connect(). По опыту понял, что это действительно так. Еще один момент - при добавлении на форму компонента TWordApplication в классе формы появляется описание соответствующего указателя. Но по тексту программы ни где память для него не выделяется явным образом. В связи с этим догадка №1 - " при вызове метода Connect() выделяется память и с ней связывается указатель".

3. Логично было бы предположить, что метод Disconnect() должен был бы эту память освобождать.
Делаем дисконнект, оставляя работающим сервер. Но почему при повторном вызове Connect(), даже если ConnectKind=ckNewInstance приложение связывается с уже запущенным сервером Word.
А если применить к указателя метод Free(), то при повторном вызове Connect() связаться с сервером уже не может. Как же так выделяя память раньше он не может выделить теперь?

Пожалуйста поясните логику работы этих методов и посоветуйте как сделать так чтобы из приложения запустив Ворд, далее он не закрывался при закрытии проги.
0
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
18.05.2007, 13:38
надеялся вызвать word
C этим я справился, уже не помню как, извините.
У меня теперь другой вопрос. Надеюсь, что на него я получу ответ раньше чем сам найду.
Ладно по сути.
У меня есть форма, на ней поле . В него вводится пароль. Есть кнопка Button. при нажатии на которую берется введеный в поле пароль и передается в открытый документ Word. И сразу же это изменение сохраняется. Так я устанавливаю пароль на документ.
Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TPassword::SetPas_ButtonClick(TObject *Sender)
{
    if(N)
      {
          int bufsize;
          AnsiString s=Password_Edit->Text;
          bufsize=s.WideCharBufSize();
          wchar_t *wh=new wchar_t [bufsize];
          AnsiString s1(WordDoc->FullName);
          if(Application->MessageBox(s1.c_str(), "подтверждение пароля", MB_YESNO)==IDYES)
            {
                wh=s.WideChar(wh,bufsize);
                WordDoc->set_Password(wh);
                WordDoc->Save();
            }
          else
            {
              delete wh;
              return;
            }
          delete wh;
      }
}
Если же сразу заглянуть в меню сервис\параметры на вкладку безопасность в Worde.
Мы это изменение будем лицезреть.
Мы можем ввести в поле другой пароль, нажать SetPas_Button и снова увидеть измененный пароль.
Но вот горе, я не могу найти способ как таким же нажатием на UnsetPas_Button (другая кнопка для снятия пароля) снять этот пароль. Пытался оставлять пустую строку и снова нажимать на SetPas_Button - это не приводит к изменениям, пароль какой был на документе такой и остается. Пытался делать так:
C++
1
2
wh=L"";  
WordDoc->set_Password(wh);
Ничего не помогает. Посоветуйте что можно еще сделать.
0
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 4
09.06.2007, 13:01
Народ, кто-нибудь знает, как объекты Equation в JPG перевести???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2007, 13:01
Помогаю со студенческими работами здесь

Ole Word, управление печатью
Добрый день. Подскажите правильный формат команды дабы можно было управлять печатью с помощью OLE. Я делал так: int Bounds =...

Word и Excel в C++ Builder
Всем привет! Заранее скажу, что только начинаю изучать С++ и поэтому буду рад любой помощи. Появилась необходимость с помощью...

Работа с Word в C++Builder v6.0
- Здравствуйте Завсегдатаи! Обращаюсь к Вам с вот таким вопросом: Подскажите пожалуйста, где можно почитать Хелп по свойствам и методам...

C++Builder Вывод Form1 в Word
можно ли поместить в вордовский документ вывод (Form1) с С++?

Работа с таблицей Word в C++Builder
Работа через OLE с документом Word, Нужно выделить 1 ячейку таблицы и скопировать в буфер обмена Ниже обозначено WA:-объект...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru