Форум: "Corba";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
ВнизСоздание 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 вся ветка
Форум: "Corba";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c