Главная страница
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.47 MB
Время: 0.046 c
14-1130133309
TUser
2005-10-24 09:55
2005.11.13
Квантовая телепортация


8-1118673537
nWind
2005-06-13 18:38
2005.11.13
Сравнение gif ов


1-1129705116
Skunk
2005-10-19 10:58
2005.11.13
Каким компонентом сделать бегущую строку?


9-1119898434
Felicheta
2005-06-27 22:53
2005.11.13
гром и молния


11-1111072940
uuzh
2005-03-17 18:22
2005.11.13
2 ECM Порт FBL под KOL