Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
#1

Как открыть документ Word для просмотра в OleContainer-е? - Delphi

10.05.2012, 13:08. Просмотров 12995. Ответов 26
Метки нет (Все метки)

Мне нужно всего-навсего открыть в OleContainer-е показать текст документа Word. При этом сам MS Word открывать ни к чему.
Прежде чем создать тему просмотрел все похожие темы на форуме и поискал в инете. В результате добился только того, что документ открывается, но с Word-вским интерфейсом.

Мои мытарства: Если документ открывать в дизайнере, во время работы приложения в контейнере показан только текст, который помещается в области контейнера. Нет полос прокрутки - листать невозможно.
На текущий момент имею такой код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm4.FormShow(Sender: TObject);
begin
  OleContainer1.CreateObject('Word.Application',False);
  OleContainer1.CreateObjectFromFile(
  ExtractFilePath(Application.ExeName)+'Помощь.doc',false);
 
  OleContainer1.DoVerb(ovOpen);
 
  OleContainer1.OleObject.Protect(3); //Инструменты Word - Enabled
end;
 
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  OleContainer1.DestroyObject;
end;
Может у кого есть какой опыт работы с этим компонентом. Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 13:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как открыть документ Word для просмотра в OleContainer-е? (Delphi):

Как открыть документ Word в Delphi
Объясните пожалуйста, по пальцем, как открыть уже готовый документ word в...

Открыть документ Word или Excel
Как написать код для кнопки, при нажатии которой открывался бы нужный мне...

Открыть документ Word-а через OpenDialog
openDialog := TOpenDialog.Create(self); openDialog.InitialDir :=...

Как отключить в Olecontainer служебные сообщения Word?
Как отключить в Olecontainer служебные сообщения Word? А то при открытии файла...

Открыть HTML документ для просмотра на форме
допустим имеется кнопка, при нажатии на которую открывается вторая форма на...

Отображение в OleContainer определенных строк из документа Word
Здравствуйте! Нужно написать прогу для тестирования. В документе Word (2013)...

26
Arcor
4816 / 1817 / 380
Регистрация: 20.11.2009
Сообщений: 5,797
Записей в блоге: 1
10.05.2012, 13:12 #2
как избавиться от панель инструментов MS Word которая появляется при открытии документа???
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
      var
        ev: OleVariant;
        i: integer;
       
      // ...
        OleContainer1.CreateObjectFromFile(myDocName, False);
        OleContainer1.DoVerb(ovShow); { Активизируем OLE объект, причем методом Show }
        ev := 2; { <--- степень защиты OLE - объекта, "только чтение" }
       
        // Проходим по всем тулбарам связанного с контейнером приложения
        // и устанавливаем всем невидимость, чтоб не мешали ...
        for i:=1 to OleContainer1.OleObject.CommandBars.Count do
            if OleContainer1.OleObject.CommandBars.Item[i].Visible then
              OleContainer1.OleObject.CommandBars.Item[i].Visible:=False;
       
          // Ну, и наконец - устанавливаем желаемый уровень защиты
          OleContainer1.OleObject.Protect(ev);
       
      // ну, и все в принципе...
остались линейки от Word. их можно как-нибудь убрать?
Delphi
1
OleContainer1.OleObject.ActiveWindow.ActivePane.DisplayRulers := false;
вот что я нарыл на счет данного вопроса, наверняка ты это видел уже
1
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
10.05.2012, 13:29  [ТС] #3
Спасибо, но чего-то не помогло. Осталось так же как и было. Но всё же теперь есть с чем экспериментировать.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25624 / 17177 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
10.05.2012, 15:28 #4
Цитата Сообщение от Одиночка Посмотреть сообщение
Спасибо, но чего-то не помогло. Осталось так же как и было.
Очень странно. Когда я писал этот код - он работал на всех версиях Дельфи (со всеми версиями Word-а), которые мне были доступны. Кстати, какая у тебя версия Word-а?
1
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
10.05.2012, 15:44  [ТС] #5
UI: MSOffice 2007
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25624 / 17177 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
10.05.2012, 15:53 #6
В 2007-ом тебе надо гасить Ribbon-ы. Как-то вот так:
Delphi
1
OleContainer1.OleObject.ActiveWindow.ToggleRibbon;
2
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
10.05.2012, 17:52  [ТС] #7
Ура, уже лучше. Теперь лента свернулась. Перекрывает пару строк текста.
UI: Может кинешь ссылку, где за эти риббоны можно почитать?
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
15.05.2012, 16:39  [ТС] #8
Вот, что у меня получилось:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
unit Unit4;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtnrs, ComObj, StdCtrls, ComCtrls;
 
type
  TForm4 = class(TForm)
    OleContainer1: TOleContainer;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form4: TForm4;
 
  wdApp, wdDocs, wdDoc : Variant;
implementation
 
{$R *.dfm}
 
procedure TForm4.FormShow(Sender: TObject);
var
  ev : OleVariant;
   i : Integer;
begin
  OleContainer1.CreateObject('Word.Application',False);
  OleContainer1.CreateObjectFromFile(
  ExtractFilePath(Application.ExeName)+'Помощь.doc',false);
 
  OleContainer1.DoVerb(ovOpen);
 
  // Проходим по всем тулбарам связанного с контейнером приложения
  // и устанавливаем всем невидимость, чтоб не мешали ...
  for i:=1 to OleContainer1.OleObject.CommandBars.Count do
  if OleContainer1.OleObject.CommandBars.Item[i].Visible then
  OleContainer1.OleObject.CommandBars.Item[i].Visible:=False;
 
  ev := 2;
  OleContainer1.OleObject.Protect(ev);
end;
 
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  OleContainer1.DestroyObject;
end;
 
end.
1
Изображения
  
alexan0308
61 / 45 / 4
Регистрация: 07.06.2011
Сообщений: 375
Записей в блоге: 2
25.11.2012, 14:38 #9
Мне эта тема пригодилась. Пригодится может еще кому-то. Поэтому добавлю -
Delphi
1
OleContainer1.OleObject.ActiveWindow.ActivePane.View.Zoom.PageFit:= wdPageFitBestFit;
(сделать вид текста по ширине)
Тогда страница по ширине целиком умещается в форме... Актуально, когда форма не на все окно...
1
Halbblut
0 / 0 / 1
Регистрация: 04.06.2014
Сообщений: 9
06.06.2014, 12:53 #10
Одиночка, если не трудно, то не могли бы Вы помочь
Хотел повторить Ваш код у себя, но появляются ошибки, поэтому хотел бы спросить, что должно располагаться на форме кроме Ole?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25624 / 17177 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
06.06.2014, 14:16 #11
Ничего, на форме только OleContainer, это прекрасно видно по содержимому класса формы. Что именно не получается, какие ошибки появляются?
1
Halbblut
0 / 0 / 1
Регистрация: 04.06.2014
Сообщений: 9
06.06.2014, 14:36 #12
UI, при запуске такие возникают
Как открыть документ Word для просмотра в OleContainer-е?
Как открыть документ Word для просмотра в OleContainer-е?
0
droider
Universal
Эксперт Pascal/Delphi
4384 / 2432 / 762
Регистрация: 04.10.2012
Сообщений: 8,847
06.06.2014, 15:57 #13
Цитата Сообщение от Halbblut Посмотреть сообщение
что должно располагаться на форме кроме Ole?
модуль ComObj подключен?
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
06.06.2014, 20:03  [ТС] #14
Halbblut,
Сделай архив проекта и выложи сюда. Прикрепить: скрепка в панели редактора.
0
Halbblut
0 / 0 / 1
Регистрация: 04.06.2014
Сообщений: 9
06.06.2014, 21:54 #15
droider, да, конечно

Одиночка,Word-delphi.rar
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25624 / 17177 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
06.06.2014, 21:58 #16
Halbblut, у тебя в инспекторе объектов неправильно связаны события с обработчиками. Убери из OnCreate формы, и назначь на OnShow/OnClose соответствующие обработчики...
1
FIL
Модератор
3409 / 2547 / 725
Регистрация: 19.09.2012
Сообщений: 7,908
06.06.2014, 21:58 #17
Halbblut, у тебя обработчики не назначены.
1
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
06.06.2014, 22:02  [ТС] #18
Откуда у тебя там OnCreate формы взялось не понятно. А обработчики событий формы OnShow и OnClose не привязаны к самой форме. Знаешь как их привязывать через инспектор объектов?
1
Вложения
Тип файла: rar Units for Word-delphi.rar (968 байт, 114 просмотров)
Halbblut
0 / 0 / 1
Регистрация: 04.06.2014
Сообщений: 9
06.06.2014, 22:43 #19
Одиночка, для OnShow - FormShow, а для OnClose - FormClose? Или я не прав в этом?
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
06.06.2014, 22:56  [ТС] #20
Когда в инспекторе объектов на вкладке Events делаешь двойной щелчок в поле выбранного события - в коде появляется заготовка процедуры обработки этого события. А в поле - имя процедуры. Если бы ты делал это при отсутствии кода - так бы и нужно было создавать эти обработчики. Поскольку у тебя уже есть обработчики этих событий - ты просто напротив соответствующих событий в инспекторе открываешь список предлагаемых обработчиков. Выбираешь для OnShow - FormShow и OnClose - FormClose - это естественно. При отсутствии обработчиков Delphi создаёт их имена именно таким образом - комбинируя имя объекта и имя события.
В присланных тебе модулях я уже связал события с кодом. Распакуй архив и вставь мои модули вместо своих. Откроешь проект и посмотришь.

Не по теме:

Чтобы увидеть ответ сразу - нужно обновлять страницу.

1
06.06.2014, 22:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 22:56
Привет! Вот еще темы с решениями:

При закрытии OleContainer Word остается висеть в процессах
Открываю Word в OleContainer procedure TForm1.Button13Click(Sender: TObject);...

Как привязать документ Word к проге
Подскажите пожалуйста, как привязать документ расширением .Docx к проге. При...

Как открыть текстовый документ при нажатии на кнопку?
Как открыть текстовый документ при нажатии на кнопку?

Как разбить документ Word на несколько файлов
Здравствуйте Уважаемые! Подскажите. Имеется документ Word, состоящий из &quot;n&quot;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru