joynter |
Отправлено: 02.12.2004, 17:29 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
как определить, является ли компонент наследником класса TCustomEdit? |
|
Gedeon |
Отправлено: 02.12.2004, 17:49 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
У всех наследников TObject есть такой метод ClassParent(TClass cls) вот от него и пляшите.
|
|
AVC |
Отправлено: 02.12.2004, 18:17 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Делал так
CODE |
bool __fastcall AxIsClassNameIs (TObject* obj, const AnsiString& pname)
{
AnsiString name = pname.Trim().UpperCase();
if (!obj || name.IsEmpty()) return false;
AnsiString str = AnsiString(obj->ClassName()).UpperCase();
if (str == name) return true;
for (TClass cls = TClass(obj->ClassParent()); cls; cls = cls->ClassParent())
if (AnsiString(cls->ClassName()).UpperCase() == name) return true;
return false;
}
| |
|
Георгий |
Отправлено: 02.12.2004, 21:30 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
а dynamic_cast использовать нельзя? |
|
AVC |
Отправлено: 03.12.2004, 09:07 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Ага. Погорячился! (понял по пути домой )
Скорее всего его должен устроить dynamic_cast |
|
joynter |
Отправлено: 03.12.2004, 11:00 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
если я вас правильно понял:
CODE |
char cn[256];
GetClassName(hDestWnd,cn,sizeof(cn));
if(dynamic_cast<TCustomEdit>(TClass(cn))) return true;
else return false;
|
но всплыват ошибка : Cannot cast from 'TMetaClass *' to 'TCustomEdit'.
поправьте меня пожалуста |
|
AVC |
Отправлено: 03.12.2004, 11:19 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
CODE |
//TCustomEdit *ce = dynamic_cast<TCustomEdit*>(Pointer_to_Object);
if (dynamic_cast<TCustomEdit*>(Pointer_to_Object)) Ok
else не наследник
| |
|
joynter |
Отправлено: 03.12.2004, 12:15 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
зная дескриптор объекта как получить указатель на объект? |
|