Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Создание ActiveX...   Найти похожие ветки 

 
Dixi ©   (2005-02-03 13:12) [0]

Есть проблемка. DAX. Создал ActiveX. Начал пользовать (внедрил, настроил свойства и т.д.), сохранил документ, выгрузил и вновь загрузил. Свойства которые я настраивал сбросились. Ни одна из моих настроек не сохранилась... Кто имеет опыт разратотки ActiveX в Delphi, помогите разобраться, pls.


 
Набережных С. ©   (2005-02-03 17:06) [1]

Без твоего участия они не сохранятся. Сохраняй сам.


 
Dixi ©   (2005-02-04 15:47) [2]

Есть класс TActiveXControl. Он сам все делает, умеет сохранять себя и т.д. и т.п. (методы соответствующих интерфейсов реализованы и, на первый взляд, должны работать). У него есть внутреннее свойство FIsDirty, которое никогда не бывает True. Есть метод Close:

function TActiveXControl.Close(dwSaveOption: Longint): HResult;
begin
 if (dwSaveOption <> OLECLOSE_NOSAVE) and FIsDirty and
   (FOleClientSite <> nil) then FOleClientSite.SaveObject;
 ...
end;

в котором никогда не выполнится FOleClientSite.SaveObject.

По поводу моего участия: я должен только сообщить контейнеру, что какие-то из моих свойств изменились и необходимо сохранить объект. Контейнер должен вызвать соответствующий метод интерфейса IPersist*, реализация которого есть в базовом классе (TActiveXControl).

Дело все в том, что IPersistStreamInit.IsDirty всегда возвращает S_False и контейнер думает, что сохранение не требуется...

Получается, что Borland не дает возможности разработчикам ActiveX писать полноценные компоненты (по крайней мере наследоваться от TActiveXControl), или я чего-то не понимаю? Может это не проблема вовсе, может тут какой-то специальный подход нужен?

Кто сталкивался с подобной проблемой, напишите. Заранее спасибо.

PS:
Тестировал ActiveX, созданный как обертка над TMemo (Delphi7). Внедрял в MS Word 2003. Настраивал: менял имя, размеры. При новой загрузке настройки были по умолчанию, а не те, которые я настроил.


 
Набережных С. ©   (2005-02-04 19:07) [3]

>Dixi ©   (04.02.05 15:47) [2]
>есть внутреннее свойство FIsDirty, которое никогда не бывает True

Вообще-то это не свойство, а поле. Но это так, к слову. А вот если сделать поиск в AxCtrls по этому слову, то мгновенно станет ясно, что оно в принципе  не может быть истинно. Что это - баг и или вражий умысел - я не знаю, да и не интересно. Я ж те говорю - сам сохраняй.
 Есть два пути(может и больше, но я их не знаю). Первый: исправить и перекомпилить AxCtrls. Второй: в своем контроле переопределить все методы, которые интересуют. Выбирай сам, реализуемо и то, и другое.


 
Dixi ©   (2005-02-07 09:17) [4]

Спасибо, конечно. Но я собственно и спрашивал про то, почему оно всегда ложь, а не где<b/> его найти. Все равно спасибо.



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

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.074 c
1-1129780400
Kulakov_an
2005-10-20 07:53
2005.11.13
Печать на принтере с разбиением на страницы


2-1129892892
ne0n
2005-10-21 15:08
2005.11.13
нужна помощь по работе с текстовыми файлами


11-1110826662
dimaxx
2005-03-14 21:57
2005.11.13
Несколько вопросов по KOL


2-1129802515
Андрей__
2005-10-20 14:01
2005.11.13
DBLookUpComboBox


5-1108826527
Dmitry_04
2005-02-19 18:22
2005.11.13
Как сделать компонент невидимим при клике по нему?