powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Индексированные свойства в OLE объектах
3 сообщений из 3, страница 1 из 1
Индексированные свойства в OLE объектах
    #40115199
vdix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, коллеги! Подскажите пожалуйста, верно ли я понимаю, что тип свойства "Read | Write | Write By Ref" должен позволять настроить индексированное свойство а-ля TString.Items[] ? Когда добавляется свойство такого вида, в дизайнере появляется сразу 3 свойства: "Read Only", "Write Only", "Read | Write", но с имплементацией какая-то беда. По идее для того же Items[] нужно сделать как-то так:

read property:
Index: long [in]
Value: BSTR* [out,retval]

write property:
Index: long [in]
Value: BSTR* [in]

read/write property:
Index: long [in]
Value: BSTR* [in,out]

Но когда в дизайнере настраиваешь write property она дублирует свои настройки на read/write и наоборот. Как-то так. Вот и вопрос: а можно ли вообще добиться индексированного свойства в делфовом OLE объекте, или тип "Read | Write | Write By Ref" предназначен для чего-то иного?
...
Рейтинг: 0 / 0
Индексированные свойства в OLE объектах
    #40115222
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делфевый редактор давно запросил, потому какие кнопки нажимать не скажу. В idl должно получится так

Код: plaintext
1.
2.
3.
4.
[propget]
HRESULT _stdcall Items([in] long AIndex, [out, retval] BSTR * AVal);
[propput]
HRESULT _stdcall Items([in] long AIndex, [in] BSTR AVal);

Тип первого параметра может быть любым. По нему и будет индекс. Более того, этих параметров может быть несколько, тогда индекс будет составной.

В _TLB.pas получатся такие строки
Код: pascal
1.
2.
3.
function Get_Items(AIndex: Integer): WideString; safecall;
procedure Set_Items(AIndex: Integer; const AVal: WideString); safecall;
property Items[AIndex: Integer]: WideString read Get_Items write Set_Items; 

И в реализации нужно будет реализовать два метода Get_Items и Set_Items.

Чтобы свойство было default, т.е. можно было обращаться как
Код: pascal
1.
Obj[2] := 'ABC';

нужно этому свойству установить dispid = 0
Код: plaintext
1.
2.
3.
4.
[propget, id(0)]
HRESULT _stdcall Items([in] long AIndex, [out, retval] BSTR * AVal);
[propput, id(0)]
HRESULT _stdcall Items([in] long AIndex, [in] BSTR AVal);


По идее, в редакторе ван нужно добавить одно Read | Write свойство
...
Рейтинг: 0 / 0
Индексированные свойства в OLE объектах
    #40115273
vdix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю, буду пробовать! :)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Индексированные свойства в OLE объектах
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]