Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Corba";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Вниз

ActiveX-компонент+ Word   Найти похожие ветки 

 
just   (2005-09-26 17:40) [0]

Здравствуйте!
Пишу ActiveX-компонент для встраивания его в Word (и последующего его использования). Знаю COM-технологию (в частности разработка DLL"ек на базовом интерфейсе IUnknown и их использование), но писать OLE-объект для встраивания его в Word или Excel не приходилось. Здесь необходимо, как я понял, знать интерфейс IDispatch.
В общем, делаю так:
- File->New->ActiveX Library.
- File->New->Active Form.
- Создаю методы в TLB, потом код прописываю для них.
- Регистрирую и компилирую созданную библиотеку OCX. Как компонент ее пока не оформлял (DPK), чтоб он был на вкладке ActiveX в Delphi.
В Word этот объект можно добавить 2 способами:
1. Элемент управления->Элемент управления OCX->и из выбираешь из списка свой объект.
2. Программно:
  WordApplication1.Visible:=true;
  WordApplication1.Documents.Add(EmptyParam, EmptyParam,EmptyParam,EmptyParam);
  ClassType:="My_Object.Grid";
  WordApplication1.ActiveDocument.InlineShapes.AddOLEControl(ClassType,EmptyParam);
Все замечательно работает. Но...
Пока что возникли следующие проблемы:
1. Свойства (состояние) вставленного и измененного OLE-объекта не сохраняются. Просмотрев форумы, стало ясно, что сохранение не предусмотрено, его нужно прописать программно. Но конкретного решения данной проблемы не нашел. А это просто необходимо.
2. Как программно запретить (если это возможно, конечно): удаление и перемещение OLE-объекта в Word"е? Еще - в Word"е есть: Элемент управления -> Конструктор форм, как пользователю запретить переходить в режим конструктора объекта? Знаю только, как убрать панель "Элемент управления": WordApplication1.ActiveDocument.CommandBars["Control Toolbox"].Set_Visible(false);
3. Как можно обращаться в свойствам объекта, находящегося в Word, из клиентского приложения? Допустим, свойство Name есть по умолчанию, если я создаю OLE-объект (не важно программно или нет), то оно становится равным My_Object1, следующее - My_Object2 и т.д. Как его изменить его программно и как его считать?  Еще: как вызывать методы объекта, находящегося в Word, из клиентского приложения?
Надеюсь на помощь, заранее спасибо!
P.S. Если решу проблемы, то обязательно сообщу об этом.


 
just   (2005-10-14 13:17) [1]

никто не сталкивался хотя бы с первой проблемой? Главное во всех учебниках и статьях по созданию ActiveX в delphi - не описывается этот важный момент! Скачивал даже исходники примеров из одной книги, другие примеры - так у них тоже не сохраняется ничего!


 
just   (2005-10-27 10:40) [2]

а со второй порблемой кто-нибудь сталкивался:
2. Как программно запретить (если это возможно, конечно): удаление и перемещение OLE-объекта в Word"е? Еще - в Word"е есть: Элемент управления -> Конструктор форм, как пользователю запретить переходить в режим конструктора объекта? Знаю только, как убрать панель "Элемент управления": WordApplication1.ActiveDocument.CommandBars["Control Toolbox"].Set_Visible(false);


 
wal ©   (2005-10-31 10:38) [3]

1. Нужно реализовать IPersist... интерфейсы


 
just   (2005-10-31 12:57) [4]

2wal ©   (31.10.05 10:38) [3]

имеешь ввиду IPersistPropertyBag - про него везде написано. Реализовал как у Елмановой написано в ее книге "Delphi и COM":
http://www.piter.com/chapt.phtml?id=978594723149
Все то же. не помогло.


 
wal ©   (2005-10-31 14:14) [5]

IPersistPropertyBag - используется только веб-браузерами в конструкции типа

<OBJECT classid="http://www.miamachina.it/analogclock.py">
<PARAM name="height" value="40" valuetype="data">
<PARAM name="width" value="40" valuetype="data">

</OBJECT>

Есть еще IPersistFile, IPersistStorage, IPersistStream, IPersistStreamInit, IPersistTextStream. Кого из них использует ворд, я не в курсе, скорее всего IPersistStorage.

С уважением


 
just   (2005-11-01 09:57) [6]

а что прописывать в функциях IPersistStorage?
   function IPersistStorage.IsDirty = PersistStorageIsDirty;
   function IPersistStorage.InitNew = PersistStorageInitNew;
   function IPersistStorage.Load = PersistStorageLoad;
   function IPersistStorage.Save = PersistStorageSave;
   function IPersistStorage.SaveCompleted = PersistStorageSaveCompleted;
   function IPersistStorage.HandsOffStorage = PersistStorageHandsOffStorage;
   function IPersistStorage.GetClassID = PersistStorageGetClassID;

   function PersistStorageIsDirty: HResult; stdcall;
   function PersistStorageInitNew(const stg: IStorage): HResult; stdcall;
   function PersistStorageLoad(const stg: IStorage): HResult; stdcall;
   function PersistStorageSave(const stgSave: IStorage; fSameAsLoad: BOOL): HResult; stdcall;
   function PersistStorageSaveCompleted(const stgNew: IStorage): HResult; stdcall;
   function PersistStorageHandsOffStorage: HResult; stdcall;
   function PersistStorageGetClassID(out classID: TCLSID): HResult; stdcall;


У Елмановой про  IPersistPropertyBag написано, а про IPersistStorage не нашел. Кто-нить знает?


 
wal ©   (2005-11-01 10:54) [7]

Дык в виндовском хелпе описано



Страницы: 1 вся ветка

Форум: "Corba";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
15-1173086710
Mozart
2007-03-05 12:25
2007.04.01
Проблема с загрузкой windows


4-1163413288
--= Eagle =--
2006-11-13 13:21
2007.04.01
Узнать марку привода


2-1173305867
ДжекиМайер
2007-03-08 01:17
2007.04.01
достучатся до свойств


1-1170938140
linox
2007-02-08 15:35
2007.04.01
Форма и панель задач


4-1163412977
--= Eagle =--
2006-11-13 13:16
2007.04.01
Как получить информацию S.M.A.R.T. диска?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский