임문환 님이 쓰신 글 :
: 일단 TEdit 동적 생성은
24010 답변을 참조하시고.
:
: #define MAX_EDIT_COUNT 20
: 폼클래스 변수 또는 전역변수로
: int EditCount; //프로그램 시작 시 0으로 초기화 해야 함.
: TEdit *Edits[MAX_EDIT_COUNT];
: 로 되어 있는 상태에서
:
: 24010 답변의 매서드가 아래와 같은 것이라고 가정합니다.
: TEdit *MakeEdit()
: {
: TEdit *edit1=new TEdit(this);
: .
: .
: .
: //이 매서드 내에서 폼에서의 해당 Edit의 위치를 조정해야 함(EditCount 변수를 사용하면 됨)
: return edit1;
: }
:
: 폼 크기 변경 이밴트는 OnResize이고 이밴트 핸들러는 아래와 같습니다.
: void __fastcall TForm1::FormResize(TObject *Sender)
: {
:
: }
:
: 이 매서드 안에 코딩을 하시면 됩니다.
: 그러면 그 코딩 내용이 무엇인지 지금부터 말씀드리겠습니다.
:
: if(Height/25 < EditCount){
: for(int desired=Height/25 ; EditCount>=desired && EditCount>0 ;EditCount--){
: delete Edits[EditCount-1];
: }
: }else if(Height/25 >= EditCount+1){
: for(int desired=Height/25 ;EditCount<=desired && EditCount<MAX_EDIT_COUNT ;EditCount++){
: Edits[EditCount] = MakeEdit();
: }
: }
: 위 코드에서 for 루프의 시작점과 끝점에 1의 오차가 있을 수 있으니 그 건 경험적으로 조정하시면 됩니다.
:
:
: 마지막으로,
: TEdit 생성 시 소유자를 NULL로 지정한 경우 메인 폼의 OnDestroy 이밴트 핸들러에서 아래와 같이 생성한 TEdit들을 delete해야 합니다.
: void __fastcall TForm1::FormDestroy(TObject *Sender)
: {
: for(int i=0 ;i<EditCount ;i++){
: if(Edits[i]) delete Edits[i];
: }
: //EditCount=0;
: }
:
:
: 지나가는 님이 쓰신 글 :
: : 네..제가 너무 엉성하게 질문드린거 같습니다.
: :
: : 제가 edit box로 글자를 출력하는걸 만들었습니다..
: :
: : edit box 박스는 10개 정도로 메모리의 주소값을 읽어옵니다.
: :
: : 그런데..윈도우의 크기를 변경함에 따라..
: :
: : edit box 가 10 이상 늘어나거나 10개 이하로 더 줄어드는 겁니다..
: : edit box의 height가 25 정도이니 폼의 Height 180라고 한다면
: :
: : int n = Form1->Height - 180;
: : m_nNum = n /25;
: :
: : if(m_nNum > 0)
: : {
: : TEdit* pEdit[m_nNum];
: : }
: :
: : 라고 하여 m_nNum 만큼만 생성하면 될거 같은데..
: : TEdit* pEdit[m_nNum]의 형태로 동적으로 생성되지 않네..여..
: : 어떻게 동적으로 생성하고 제거 할지 잘 모르겠습니다..
: :
: :
: :