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

델파이 Q&A
Delphi Programming Q&A
[14654] Re:Re:Re:Re:또다른 생성된 컴포넌트 질문입니다. 부탁드립니다.
따랑 [save2080] 1827 읽음    2013-04-12 13:44
답변감사드림니다 바쁜신데
1.답변은 하신말씀데로 그대로 작성하였습니다.
2.대소문자 구분은 정확히 하고 uppercase명렬을 사용도 해보았습니다.
3.형 비교는 안해보았습니다.
   해보고 결과를 말씀 드리겠습니다.

질문입니다:    
    aEdit:= TEdit.Create(Self);  // 이렇게 되어 있어야 합니다.
    With aEditt Do Begin
           Name:=_'aEdit_'+A_PK_ID.Text;
           Text:='축하합니다.';
    End;
예를 들어 a_PK_ID.Text:='13'이면

이미 생성된 Edit를 aEdit_13를 찾아서
이미들어있는 Text를 변경할려고 합니다.
축하합니다를  또 당첨됬습니다.로 변경할려고요
제가 할려고 하는 작성은 에러가 발생합니다.
부탁드립니다.



별을보라 님이 쓰신 글 :
: 먼저 델파이는 OwnerShip 기반으로 객체의 소멸을 관리하므로 특별한 경우가 아니면 일부러 Components 를 찾아
: 메모리를 해제할 필요가 없다는건 아실 거라 생각하겠습니다.
:
: 전체 소스가 없으니 점검하실 부분만 말씀드릴게요.
:
: 1. 버튼, 에디트, 메모, 라벨, 쉐이프, 이미지를 동적으로 만드실 때
:    TButton.Create(여기에 어떤 인자를 넘기는지요?)
:    일반적으로 Self 또는 폼변수를 넘기고 있나요? 아니라면 당연히 님이 제시한 코드가 실행되지 않을 겁니다.
:    예를 들어 님 코드에
:      aSend_Btn_1:= TButton.Create(Self);  // 이렇게 되어 있어야 합니다.
:
: 2. Pos 함수는 대소문자를 구분합니다. 혹시 Name 부여시 대소문자가 정확한지 확인해 보세요.
:
: 3. 마지막으로 이건 직접적인 영향이 없을 수도 있지만 중요한 거라 말씀드리고 싶네요.
:     제시한 코드는 형검사를 안하고 형변환을 수행하고 있습니다.
:     i) 꼭 이름으로 찾아서 메모리 해제를 하시려면
:       for i := ComponentCount - 1 down 0 do begin
:          if ((Components[i] is TButton) and
:              ((Pos('aSend_'  ,TButton(Self.Components[i]).Name)<>0) Or
:               (Pos('aDelete' ,TButton(Self.Components[i]).Name)<>0))) Then TButton(Self.Components[i]).Free
:          Else If ((Components[i] is TEdit) and
:                     (Pos('aEdit_'  ,TEdit  (Self.Components[i]).Name)<>0)) Then TEdit  (Self.Components[i]).Free
:          ........
:       end;
:      이렇게 하면 SCE(boolean short circuit evaluation) 에 따라 오류가 발생하지 않습니다.
:
:    ii) 이름이 아니고 형검사만으로 해제하려면
:
:       for i := ComponentCount - 1 down 0 do begin
:          if (Components[i] is TButton) then TButton(Components[i]).Free
:         else if (Components[i] is TEdit) then TEdit(Components[i]).Free
:         ....
:      end;
:      이렇게 하시면 좀 보기 쉽겠죠.
:
: 그럼.
:
:
: 따랑 님이 쓰신 글 :
: : 답변 감사드립니다.
: : 아래와 같이도 작성해보았는데 해제작업이 안되요
: : 감사합니다.
: :
: : for i := ComponentCount - 1 down 0 do
: : beign
: :   // Do destory Instance
: : end;
: : gomsun2 님이 쓰신 글 :
: : : 안녕하세요 따랑님 :) 오늘 두번이나 뵙네요.
: : :
: : : 팁, 트릭 란에 올리신 질문은 삭제 해주시고요,
: : :
: : : 답변입니다.
: : :
: : : 파괴를 하는 루틴에서는 looping 할 때 역순으로 해야 합니다.
: : : 5개의 컴포넌트를 찾아 파괴하는 시나리오를 생각해 보면
: : :
: : : 각각의 인덱스가 아래와 같이 있다고 가정하고,
: : : 0, 1, 2, 3, 4
: : :
: : : 파괴를 위한 루핑을 시작합니다.
: : : i 는 0 일때 1번 돌면
: : : 0, 1, 2, 3
: : :
: : : i 는 1 일때 2번 돌면
: : : 0, 1, 2
: : :
: : : i 는 2 일때 3번 돌면
: : : 0, 1
: : : 문제가 발생합니다.
: : :
: : : 때문에 리스트(Components)에 담긴 인스턴스를 파괴할려면
: : :
: : : for i := ComponentCount - 1 down 0 do
: : : beign
: : :   // Do destory Instance
: : : end;
: : : 

: : : 와 같이 작업하셔야 합니다.
: : :
: : : 즐코하세요 :)
: : :
: : : 따랑 님이 쓰신 글 :
: : : : 안녕하셔요
: : : : 컴포넌트를 Button,Edit,Label등을 반목하여 생성하여 ㅅ해제후 또 생성하는 작업입니다
: : : : 생성과 해제가 반복되는 작업입니다.
: : : : 그런데 같은 컴포넌트를 찾아서 해제하는 작업에 문제가 있습니다.
: : : : 부탁드립니다.
: : : : 소스는 아래와 같습니다.
: : : :
: : : :        For i:=0 to Self.ComponentCount-1  Do Begin
: : : :             If      (Pos('aSend_'  ,TButton(Self.Components[i]).Name)<>0) Or
: : : :                     (Pos('aDelete' ,TButton(Self.Components[i]).Name)<>0) Then TButton(Self.Components[i]).Free
: : : :             Else If (Pos('aEdit_'  ,TEdit  (Self.Components[i]).Name)<>0) Then TEdit  (Self.Components[i]).Free
: : : :             Else If (Pos('aMemo_'  ,TMemo  (Self.Components[i]).Name)<>0) Then TMemo  (Self.Components[i]).Free
: : : :             Else If (Pos('aLabel_' ,TLabel (Self.Components[i]).Name)<>0) Then TLabel (Self.Components[i]).Free
: : : :             Else If (Pos('aShape_' ,TShape (Self.Components[i]).Name)<>0) Then TShape (Self.Components[i]).Free
: : : :             Else If (Pos('aImage_' ,Timage (Self.Components[i]).Name)<>0) Then Timage (Self.Components[i]).Free;
: : : :         End;
: : : :     

+ -

관련 글 리스트
14643 컴포넌트를 못찾아요 이유를 모를겠습니다. 좀.... 따랑 1893 2013/04/05
14644     Re:컴포넌트를 못찾아요 이유를 모를겠습니다. 좀.... gomsun2 1911 2013/04/05
14645         Re:Re:컴포넌트를 못찾아요 이유를 모를겠습니다. 좀.... 따랑 1713 2013/04/09
14652             Re:Re:Re:컴포넌트를 못찾아요 이유를 모를겠습니다. 좀.... 별을보라 1887 2013/04/11
14654                 Re:Re:Re:Re:또다른 생성된 컴포넌트 질문입니다. 부탁드립니다. 따랑 1827 2013/04/12
14655                     Re:Re:Re:Re:Re:또다른 생성된 컴포넌트 질문입니다. 부탁드립니다. gomsun2 2567 2013/04/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.