Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
3-1127972501
Слава-АБС
2005-09-29 09:41
2005.11.13
Некорректное заполнение поля даты в DBF, как обойти?


1-1129285334
ZEWS
2005-10-14 14:22
2005.11.13
Как заскиновать ListBox


2-1130244687
Begin
2005-10-25 16:51
2005.11.13
Floating Point


4-1126100827
Unit1
2005-09-07 17:47
2005.11.13
WM_MOUSEMOVE


2-1130054251
Yegorchic
2005-10-23 11:57
2005.11.13
Работа с памятью




   Наверх