https://lehome.ru/katalog/stylia/?f_product_color_blue=on.
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
AddObject, добавление и извлечение объекта класса
tvs_spb
Отправлено: 23.08.2004, 12:36


Ученик-кочегар

Группа: Участник
Сообщений: 20



Есть объект класса,наслед. от TADOQuery:

TAccessDb *lpDataBase;
lpDataBase = new TAccessDb(Application);

Есть итем в ListView куда этот объект надо запихать а потом достать:

TListItem *li;
li = ListView->Items->Add();
int Count = ListView->Items->Count;
li->Caption = IntToStr(Count)+". ";
li->SubItems->AddObject((TObject*)lpDataBase);

подозреваю,что уже здесь он не помещается

А когда достаю:
TAccessDb * lpdb;
lpdb=(TAccessDb*)ListView->Selected->Data;

там NULL....
MDM
Отправлено: 23.08.2004, 14:18


Ученик-кочегар

Группа: Участник
Сообщений: 23



QUOTE (tvs_spb @ 23/08/2004, 13:38)
Есть объект класса,наслед. от TADOQuery:

TAccessDb *lpDataBase;
lpDataBase = new TAccessDb(Application);

Есть итем в ListView куда этот объект надо запихать а потом достать:

TListItem *li;
li = ListView->Items->Add();
int Count = ListView->Items->Count;
li->Caption = IntToStr(Count)+". ";
li->SubItems->AddObject((TObject*)lpDataBase);

подозреваю,что уже здесь он не помещается

А когда достаю:
TAccessDb * lpdb;
lpdb=(TAccessDb*)ListView->Selected->Data;

там NULL....

Правильно подозреваешь потому, что в ListView->Selected->Data Ты ничего не помещаешь.

А это точно компилится?
li->SubItems->AddObject((TObject*)lpDataBase);

SubItems- св-во типа:
__property Classes::TStrings* SubItems
у TStrings есть метод AddObject(const AnsiString S, System::TObject* AObject), а такого нет AddObject(TObject* AObject):
где первый параметр?

Ладно может опечатка, тогда доставай так
TAccessDb * lpdb;
lpdb=(TAccessDb*)ListView->Selected->SubItems->Objects[Index];

Ну а почему просто не сделать
TListItem *li;
li = ListView->Items->Add();
li->Data = (TObject*)lpDataBase;
или нужно хранить данные для каждого SubItem-a?
Doga
Отправлено: 23.08.2004, 14:26


Мастер участка

Группа: Участник
Сообщений: 575



Это прямо как в анекдоте — искать не там, где потерял а там, где светлее biggrin.gif

Вы пытаетесь засунуть свой объект в SubItems, а достать его хотите из Data! Конечно же там ничего не будет! К тому же SubItems не предназначен для хранения каких либо объектов отличных от TStrings:

__property Classes::TStrings* SubItems = {read=FSubItems, write=SetSubItems};


Что бы достать что либо из Data, надо сначала туда это "что либо" положить! smile.gif

CODE

li->Data = (void *)lpDataBase;


Вы что думаете, когда фокусник достаёт кролика из пустого ящика, там действительно до этого ничего не было? smile.gif Ах, он Вам показывал? biggrin.gif

Вы просто не так смотрели!!! biggrin.gif biggrin.gif

Вернуться в Вопросы программирования в C++Builder