Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > OLE (MS Word)


Автор: Vex 13.2.2003, 11:20
У меня есть задача: загрузить в приложение документ *.doc, чтобы его нельзя было скопировать или сохранить в другом файле. Делаю стандартно:

Код

OleContainer1.CreateObjectFromFile(FileName, false)


в контейнер загружается документ, но вот как сделать:
1. Чтоб там был скроллинг
2. Чтобы при двойном клике в контейнер не загружался Word?
2.1 Ладно, допустим, пусть загружается, но тогда надо не дать пользователю скопировать текст
и даже его выделить, и изменить, ну это ИМХО большой гемор smile.gif


Автор: Baa 13.2.2003, 17:46
Скопировать текст можно всегда... %) ты по таймеру буфер обмена чисть wink.gif
А вообще, все даже проще smile.gif
При копировании текста контролу посылается WM_COPY, дык вот и чисть буфер при получении такого сообщения.

Автор: Vex 13.2.2003, 19:25
Спасибо, буду пробовать smile.gif Но как то некрасиво весь буфер чистить, а вдруг там пользователь файлы хранит smile.gif

Автор: weiss 13.2.2003, 19:40
чтоб не загружался укажи AllowActiveDoc=false;

Автор: Baa 13.2.2003, 19:42
А ты его не чисть тогда, а заменяй скопированный текст на че-нить вроде: "Защищено от копирования" smile.gif
И овцы сыты и волки целы smile.gif

Автор: weiss 13.2.2003, 21:20
можно ещё AutoActivate Manual поставить

Автор: Vex 14.2.2003, 22:40
Код

type
 TForm1 = class(TForm)
 private
   { Private declarations }
    procedure WMCopy(var a:TWMCopy); message WM_COPY;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

TForm1.WMCopy(var a:TWMCopy);
begin
ShowMessage('alert :)');
end;

...


Не работает, что я не так сделал?

Автор: SmaLL 14.2.2003, 22:52
Цитата(Vex @ 14.2.2003, 14:40)

Не работает, что я не так сделал?

Так будет ловиться сообщение WM_COPY направленное именно объекту Form1.
Сообщения направленные другим объектам ловиться не будут.

Хотя.... может быть я и ошибаюсь.
Эй профессионалы где вы ?? baaa.gif
Куда-то Vit делся.

Автор: Vex 14.2.2003, 23:02
Я тоже так думаю, я хотел сделать объект, потомок TOleContainer, и добавить туда эту процедуру, но...
см. топик "Error, ООП"

Автор: Serebrus 18.8.2007, 08:46
Цитата(weiss @ 13.2.2003,  21:20)
можно ещё AutoActivate Manual поставить

Это работает

Автор: yogin 10.9.2010, 19:10
Ребята, поднимаю тему.

Гружу ворд док так:
(на форме лежит TOleContainer)

Код

procedure TTheoryForm.FormCreate(Sender: TObject);
begin
  OleCon.DoubleBuffered := TRUE;
  OleCon.AutoVerbMenu := FALSE;
  OleCon.AllowActiveDoc := FALSE;
  OleCon.AutoActivate := aaManual;
end;

procedure BtnClick;
begin
  OleCon.CreateObjectFromFile('test.doc', FALSE);
end;


Как разрешить следующую проблему:
Почему загружается только первая страница вордовского документа? как грузить все страницы документа?

По теме:
Прокрутку организовал путём помещения Оле контейнера на скролл бокс.

PS: 
как программно прокрутить скролл бокс до упора вверх? (нужно при загрузке нового документа, а то скрол остаётся на старом месте и новый док открывается и показывается снизу например)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)