|
예전에 VC++을 쓰던 과장님하고..
클래스의 타입을 알아낼수 있는가 하는 문제로 내기를 한적이 있었습니다.
아래 예제는 빌더의 헬프에서 퍼온것입니다.
이걸로 해결이 될것 같군요..
---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for (int i = 0; i < ComponentCount; i++)
ListBox1->Items->InsertObject(0,
Components[i]->Name,
(TObject *)Components[i]);
}
void __fastcall TForm1::ListBox1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button == mbRight)
{
TClass ClassRef;
int Index = ListBox1->ItemAtPos(Point(X,Y), true);
// only components that are controls have a position
// make sure the component is a control
for (ClassRef = ListBox1->Items->Objects[Index]->ClassType();
ClassRef != NULL;
ClassRef = ClassRef->ClassParent())
if (String(ClassRef->ClassName()) == "TControl")
{
TControl *TheObject = (TControl *)ListBox1->Items->Objects[Index];
StatusBar1->SimpleText =
TheObject->Name + " is at (" +
IntToStr(TheObject->Left) + ", " +
IntToStr(TheObject->Top) + ")";
break;
}
if (ClassRef == NULL) // if it wasn't a control
MessageBeep(0);
}
}
만해 님이 쓰신 글 :
: 안녕하세요 만해 입니다.
:
: 지난번 부터 계속 ~
:
: 근 두달이 다되어 가네요~
:
: HTML Parser를 지금 이용중인데요
:
: 아마 지난번에도 질문올렸던것 같은데
:
: HTML Parser 델파이 컴포넌트를 설날부터 삼일 동안 작업해서
:
: 싹다 빌더로 포팅을 했고요
:
: 지금 이용중인데요
:
: THTMLParser* hParser = new THTMLParser();
: hParser->Lines->Add(html);
: hParser->Execute();
: for ( int i = 0 ; i < hParser->Parsed->Count ; i++ )
: {
: THTMLTag* hTag = new THTMLTag;
: hTag = (THTMLTag*) hParser->Parsed->Items[i];
: }
:
: 이 소스에서요 hPatser->Parsed->Items[i]의 클래스 네임을 알아야 하는데요
:
: 제가 이건 도저히 모르곘네요
:
: 몇번이나 형전환이나 몇가지 기법을 다 동원 했는데도 모르겠고요
:
: 헐~
:
: class THTMLParser :public TObject
: {
: private:
: AnsiString Text;
: AnsiString Tag;
: bool IsTag;
: bool IsExecute;
: void __fastcall AddText(void);
: void __fastcall AddTag(void);
: bool __fastcall Is_Exe(void);
: protected:
:
: public:
: TList* Parsed;
: TStringList* Lines;
:
: __fastcall THTMLParser():TObject()
: {
: Parsed = new TList();
: Lines = new TStringList();
: IsExecute = false;
: };
: virtual __fastcall ~THTMLParser()
: {
: delete Parsed;
: delete Lines;
: };
:
: void __fastcall Execute(void);
: TStringList* GetTagPeoperty(AnsiString ATag, AnsiString AProperty);
: //__published:
:
: };
:
: 이건 HTMLParser 선언부입니다.
:
: 보면 아시다 시피 소멸자 부분도 좀 미흡하네요
:
: 고수님들의 도움 부탁 드립니다.
|