![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поинтер на интерфейс [D6, D7, Win2k]
elserpiente © (2007-06-13 15:10:00)Можно ли переменной-указатель (Pointer) указать поинтер интерфейса? и как с такой переменной можно потом прочитать интерфейс
Romkin (2007-06-13 16:25:00) [1]И есть возможность написать свой потомок TTreeNode :)
В D6 и выше - OnCreateNodeClass есть.
jack128 (2007-06-13 16:15:00) [2]elserpiente (13.06.07 15:57) [8]
а вообще може кто то сталкивался с проблемой удаления из TTreeNode данных по ссылке data? можно как-нибудь автоматизироваться этот процес?чтоб при удалении TreeNode данные тоже убивались
есть событие соответствующее. OnDeleting чтоли.. В нем и освобждай свои данные...
Сергей М. (2007-06-13 16:00:00) [3]А в чем проблема ?
elserpiente (2007-06-13 15:57:00) [4]а вообще може кто то сталкивался с проблемой удаления из TTreeNode данных по ссылке data? можно как-нибудь автоматизироваться этот процес?чтоб при удалении TreeNode данные тоже убивались
elserpiente (2007-06-13 15:50:00) [5]угу, пасибо, разобрались ;)
jack128 (2007-06-13 15:34:00) [6]jack128 © (13.06.07 15:33) [5]
begin
...
IUnknown(TreeView1.Items[0].Data)._Release;
TreeView1.Items[0].Data := nil;
end;
точнее
if TreeView1.Items[0].Data <> nil then
begin
IUnknown(TreeView1.Items[0].Data)._Release;
TreeView1.Items[0].Data := nil;
end;
jack128 (2007-06-13 15:33:00) [7]elserpiente (13.06.07 15:28) [4]
это нужно для хранении данных в TTreeView, а именно в TTreeNode.Data
Ну тогда лудше так:
var
Intf: IUnknown;
begin
...
TreeView1.Items[0].Data := Pointer(Intf);
Intf._AddRef;
end;
begin
...
IUnknown(TreeView1.Items[0].Data)._Release;
TreeView1.Items[0].Data := nil;
end;
elserpiente (2007-06-13 15:28:00) [8]это нужно для хранении данных в TTreeView, а именно в TTreeNode.data
Сергей М. (2007-06-13 15:23:00) [9]А за каким лешим нужны эти хитромудрые преобразования ?
Почему переменную p не сделать типа IInterface ?
elserpiente (2007-06-13 15:20:00) [10]ну что типа этого
var
p: pointer;
i: IMyInt;
...
i := TMyInt.Create;
p:= @i;
IMyInt(p).MyField := 0;
Сергей М. (2007-06-13 15:15:00) [11]
> Можно ли переменной-указатель (Pointer) указать поинтер
> интерфейса?
Можно.
MyPointerVariable := MyInterface;
Но не нужно.
> как с такой переменной можно потом прочитать интерфейс
>
Что значит "прочитать интерфейс" ?