Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, GladiatorX, Вы писали:
GX>>На Дельфи написана ActiveX-кнопка с дополнительным свойством Command. Я хочу сохранять значение свойства в файле контейнера через IStorage, IStream или др.
GX>>К примеру, контейнером является Excel-документ (файл xls), куда вставляется моя кнопка. Как это реализовать?
Vi2>Нужно реализовать IPersistXXXX интерфейсы, такие как IPersistStorage, IPersistStream (IPersistStreamInit), IPersistPropertyBag etc. Контейнер запросит тот интерфейс, по которому он умеет сохраняться.
Сделал следующее:
TButtonX = class(TActiveXControl, IButtonX, ISpecifyPropertyPages, IPersistStreamInit)
...
// IPersistStreamInit
function IPersistStreamInit.IsDirty = IPersistStreamInit_IsDirty;
function IPersistStreamInit_IsDirty: HResult; stdcall;
function IPersistStreamInit.Load = IPersistStreamInit_Load;
function IPersistStreamInit_Load(const stm: ActiveX.IStream): HResult; stdcall;
function IPersistStreamInit.Save = IPersistStreamInit_Save;
function IPersistStreamInit_Save(const stm: ActiveX.IStream; fClearDirty: BOOL): HResult; stdcall;
function IPersistStreamInit.GetSizeMax = IPersistStreamInit_GetSizeMax;
function IPersistStreamInit_GetSizeMax(out cbSize: Largeint): HResult; stdcall;
function IPersistStreamInit.InitNew = IPersistStreamInit_InitNew;
function IPersistStreamInit_InitNew: HResult; stdcall;
...
// IPersistStreamInit
function TButtonX.IPersistStreamInit_IsDirty: HResult; stdcall;
begin
result := S_OK;
end;
function TButtonX.IPersistStreamInit_Load(const stm: ActiveX.IStream): HResult; stdcall;
begin
result := S_OK;
end;
function TButtonX.IPersistStreamInit_Save(const stm: ActiveX.IStream;
fClearDirty: BOOL): HResult; stdcall;
begin
result := S_OK;
end;
...
После этого перестали сохраняться и загружаться стандартные свойства кнопки.
Как мне сохранять и считывать все свойства моей кнопки?