C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[38360] Re:폼 동적 생성
수야!╋ [sooya23] 1038 읽음    2004-12-13 09:37
이성제 님이 쓰신 글 :
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "Unit1.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: TForm *f;
: TLabel *l;
: TButton *b;
: int ct=1;
: #pragma resource "*.dfm"
: TForm1 *Form1;
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
:     : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:     if (Timer1->Interval == 0)
:     {
:         Timer1->Interval=100;
:     }
:     else
:     {
:         Timer1->Interval=0;
:     }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button(TObject *Sender)
: {
:     TButton *btn = (TButton*)Sender;
:     TForm *frm = (TForm*)btn->Parent;
:     frm->Tile();
:     frm->Close();
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Timer1Timer(TObject *Sender)
: {
:     f=new TForm(this);
:     l=new TLabel(this);
:     b=new TButton(this);
:     f->Top=random(800);
:     f->Left=random(1000);
:     f->Width=169;
:     f->Height=128;
:     f->Caption=IntToStr(ct);
:     l->Caption="사랑해♡";
:     l->Width=57;
:     l->Left=16;
:     l->Height=13;
:     l->Top=24;
:     l->Parent=f;
:     b->Caption="확인";
:     b->Parent=f;
:     b->Left=48;
:     b->Top=56;
:     b->Left=48;
:     b->OnClick=Button;
:     f->Show();
:     ct++;
: }
: //---------------------------------------------------------------------------
:
:
:
:
:
:
:
: 소스가 이렇게 있는데요
: void __fastcall TForm1::Button(TObject *Sender)
: {
:     TButton *btn = (TButton*)Sender;
:     TForm *frm = (TForm*)btn->Parent;
:     frm->Tile();
:     frm->Close();
: }
:
: 이부분에 소스를 이해할수가 없습니다.
:
: 으흠..
:
: Tile() 이 하는 일이 뭔지..
:
: 아 아무튼 전혀 이해할수가 없습니다.
:
: 설명좀 해주세욥!!

버튼부만 설명해드림 되능건가용.....

C++ Builder의 최상위 클래스는 TObject지요

즉 빌더의 모든 클래스들은 TObejct를 기본적으로 상속하고 있다고 보시면 되는데요

버튼이나 폼역시 마찬가지 입니다.

버튼이 클릭되면 저 버튼클릭함수가 호출되어지죠?

그때 인자로 TObject *Sender를 주게되는데 이때 Sender의 값은 클릭된 버튼의 주소값이지요

Sender를 TButton으로 캐스팅하고 다시 TForm으로 캐스팅하는 문장입니다.

Tile() 함수는 말그대로 폼들을 타일 형태로 정열시키는 함수입니다.

중요하지 않고 그냥 그런가보다 하고 넘어가면 만사오키~

그냥 캐스팅부분이 더 중요할 것 같군요

TButton *btn = (TButton *) Sender; <- TObject의 형태인 버튼의 포인터를 TButton으로 캐스팅합니다.
TForm *frm = (TForm *) btn->Parent; <- Button의 부모를 TForm형태로 캐스팅합니다.
frm->Tile(); <- 자식들 윈도우를 타일 형태로 정열합니다.
frm->Close(); <- 폼을 종료하는건데요 이때 클릭된 버튼의 부모가 닫히겠네요

Tile()함수가 뭔지 모르셨던거라면 그냥 지나치시구요
캐스팅을 모르셨던거라면 C++ 책을 보시기 바랍니다.

위의 문장을 조금 줄여보자면

( (TButton *) Sender )->Parent->Tile();
( (TButton *) Sender )->Parent->Close();

이런식이지요

즐프하시구요 정말로 캐스팅에서 햇갈리신거라면 C++책을 꼭 보시기 바랍니다.

+ -

관련 글 리스트
38354 폼 동적 생성 이성제 843 2004/12/12
38360     Re:폼 동적 생성 수야!╋ 1038 2004/12/13
38359     Re:폼 동적 생성 이현진 1053 2004/12/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.