![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание ActiveX... [Delphi]
Dixi © (2005-02-03 13:12:00)Есть проблемка. DAX. Создал ActiveX. Начал пользовать (внедрил, настроил свойства и т.д.), сохранил документ, выгрузил и вновь загрузил. Свойства которые я настраивал сбросились. Ни одна из моих настроек не сохранилась... Кто имеет опыт разратотки ActiveX в Delphi, помогите разобраться, pls.
Dixi (2005-02-07 09:17:00) [1]Спасибо, конечно. Но я собственно и спрашивал про то, почемуоно всегда ложь, а не где<b/> его найти. Все равно спасибо.
Набережных С. (2005-02-04 19:07:00) [2]>Dixi © (04.02.05 15:47) [2]
>есть внутреннее свойство FIsDirty, которое никогда не бывает True
Вообще-то это не свойство, а поле. Но это так, к слову. А вот если сделать поиск в AxCtrls по этому слову, то мгновенно станет ясно, что оно в принципе не может быть истинно. Что это - баг и или вражий умысел - я не знаю, да и не интересно. Я ж те говорю - сам сохраняй.
Есть два пути(может и больше, но я их не знаю). Первый: исправить и перекомпилить AxCtrls. Второй: в своем контроле переопределить все методы, которые интересуют. Выбирай сам, реализуемо и то, и другое.
Dixi (2005-02-04 15:47:00) [3]Есть класс 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-03 17:06:00) [4]Без твоего участия они не сохранятся. Сохраняй сам.