Q&A

  • Tag에 관한 질문입니다.
Edit가 1~10까지 있을때,

Edit.Tag에 각각의 Edit의 Tag에 1~10까지 넣어주고, for Loop를 1~10 까지 돌려서 각각의 Edit에 값을 넣으려고 합니다.

Tag를 어떻게 이용해야 하나요.



몇개 검색해 봤는데, 응용이 잘 안되는 군요.

결국, for loop시에 i번째에는 Tag가 i인 Edit를 어떻게 얻을 수 있느냐 하는 것인데요. 잘 모르겠네요.



TC0mponent(), TControl(), TObject() 이러한 것들의 ()에는 어떤걸 인자로 넣어서 사용해야 하는지 개념이 안잡힙니다.

혹은 TEdit(), TTabSheet() 등의 ()에도 어떤걸 인자로 써야 하는지요.

공용인 TControl()하고, 좀더 세부적인 콘트롤을 명시하는 TEdit()하고는 분명 그 사용이 다르겠죠?



개념이 안 잡히네요.

부탁드립니다.

4  COMMENTS
  • Profile
    델맹 2001.08.23 18:06
    훈 wrote:

    > Edit가 1~10까지 있을때,

    > Edit.Tag에 각각의 Edit의 Tag에 1~10까지 넣어주고, for Loop를 1~10 까지 돌려서 각각의 Edit에 값을 넣으려고 합니다.

    > Tag를 어떻게 이용해야 하나요.

    >

    > 몇개 검색해 봤는데, 응용이 잘 안되는 군요.

    > 결국, for loop시에 i번째에는 Tag가 i인 Edit를 어떻게 얻을 수 있느냐 하는 것인데요. 잘 모르겠네요.

    >

    > TC0mponent(), TControl(), TObject() 이러한 것들의 ()에는 어떤걸 인자로 넣어서 사용해야 하는지 개념이 안잡힙니다.

    > 혹은 TEdit(), TTabSheet() 등의 ()에도 어떤걸 인자로 써야 하는지요.

    > 공용인 TControl()하고, 좀더 세부적인 콘트롤을 명시하는 TEdit()하고는 분명 그 사용이 다르겠죠?

    >

    > 개념이 안 잡히네요.

    > 부탁드립니다.



    안녕하세요~



    Edit 10개를 For루프로 돌린다면 For가 접근할수 있도록 배열이 필요하겠죠.

    방법은 여러가지가 있겠지만 폼의 Controls 배열을 이용한다면 말씀하신대로

    Tag를 비교해야 할겁니다. 그럴려면 비교하는 For가 하나더 필요하겠죠.



    for i:=1 to 10 do

    for j:=0 to ControlCount -1 do

    if (Controls[j] is TEdit)and(Controls[j].Tag=i) then begin

    // 여기서 원하시는 작업을 하시면 됩니다.

    end;



    또 다른 방법으로 배열을 이용할수 있습니다. 이게 더 효과적이죠.



    var aa:array[1..10] of TControl;

    ...

    for i:=0 to ControlCount -1 do

    if Controls[j] is TEdit then aa[Controls[j].Tag]:=Controls[j];



    for i:=1 to 10 do begin

    // 여기서 aa[i]를 접근하시면 됩니다.

    end;





    TControl(), TObject() 라는것은 객체의 타입캐스팅을 뜻합니다.

    예를들어...



    var Control:TControl; // 이런 변수를 선언했다면...



    Control:=Edit1; // 이런 문법이 가능합니다. 왜냐면 TEdit는 TControl의

    자손이기 때문입니다.



    그런데 이렇게 받은 객체는 TControl일까요? 아니면 TEdit일까요?

    인스턴스는 분명 TEdit입니다. 그러나 Control이라는 변수를 사용한다면

    TControl의 능력을 벋어날수 없습니다. 그래서 다음처럼 타입캐스팅이 필요한겁니다.



    TEdit(Control).text:='어쩌구저쩌구';



    그러나 만약 Control 변수의 인스턴스가 TEdit가 아니라면 에러가 발생합니다.

    그래서 위의 예제에서도 (Controls[j] is TEdit) 이런식으로 먼저 점검한거죠.



    그럼 이만... 좋은하루 되세요~



  • Profile
    2001.08.23 18:50
    많은 도움이 되었습니다...^^

    Controls라는 배열을 사용할 수 있다고 하셨는데,

    Controls라는 배열은 델파이에서 관리하는 건가요?



    각 Component에 있는 배열인가요?

    Hierarchy를 보면, TObject-TComponent-TControl-TWincontrol, 이렇게 되쟎습니까..?

    그럼 Controls라는 배열은 TComponent라는 Class에서 사용할 수 있는 건가요?

    그럼 TObject에서는 Components라는 배열이 존재하고, TControl에는 WinControls라는 배열이 존재하고... 이런식으로 확장되는건가요?



    그리고, Controls라는 변수를 사용하면 TControl의 능력을 벗어 날 수 없어,

    다음과 같이 TypeCasting을 하신다고 하셨는데,



    TEdit(Control).text:='어쩌구저쩌구';



    이때, Control은 포인터인가요?

    결국, TObject(), TComponent(), TControl()에는 무엇이 인자가 되는 건가요?

    포인터인가요? 아니면,객체인가요?

    객체의 포인터인가...?



    아 개념이 너무 부족하군요. 제 한계를 느낍니다.

    조언을 부탁하고요, 이런 걸 공부할 수 있는 웹사이트를 가르쳐 주셔도 감사하겠습니다.



    너무 난해한건 아닌지 모르겠습니다.





    델맹 wrote:

    > 훈 wrote:

    > > Edit가 1~10까지 있을때,

    > > Edit.Tag에 각각의 Edit의 Tag에 1~10까지 넣어주고, for Loop를 1~10 까지 돌려서 각각의 Edit에 값을 넣으려고 합니다.

    > > Tag를 어떻게 이용해야 하나요.

    > >

    > > 몇개 검색해 봤는데, 응용이 잘 안되는 군요.

    > > 결국, for loop시에 i번째에는 Tag가 i인 Edit를 어떻게 얻을 수 있느냐 하는 것인데요. 잘 모르겠네요.

    > >

    > > TC0mponent(), TControl(), TObject() 이러한 것들의 ()에는 어떤걸 인자로 넣어서 사용해야 하는지 개념이 안잡힙니다.

    > > 혹은 TEdit(), TTabSheet() 등의 ()에도 어떤걸 인자로 써야 하는지요.

    > > 공용인 TControl()하고, 좀더 세부적인 콘트롤을 명시하는 TEdit()하고는 분명 그 사용이 다르겠죠?

    > >

    > > 개념이 안 잡히네요.

    > > 부탁드립니다.

    >

    > 안녕하세요~

    >

    > Edit 10개를 For루프로 돌린다면 For가 접근할수 있도록 배열이 필요하겠죠.

    > 방법은 여러가지가 있겠지만 폼의 Controls 배열을 이용한다면 말씀하신대로

    > Tag를 비교해야 할겁니다. 그럴려면 비교하는 For가 하나더 필요하겠죠.

    >

    > for i:=1 to 10 do

    > for j:=0 to ControlCount -1 do

    > if (Controls[j] is TEdit)and(Controls[j].Tag=i) then begin

    > // 여기서 원하시는 작업을 하시면 됩니다.

    > end;

    >

    > 또 다른 방법으로 배열을 이용할수 있습니다. 이게 더 효과적이죠.

    >

    > var aa:array[1..10] of TControl;

    > ...

    > for i:=0 to ControlCount -1 do

    > if Controls[j] is TEdit then aa[Controls[j].Tag]:=Controls[j];

    >

    > for i:=1 to 10 do begin

    > // 여기서 aa[i]를 접근하시면 됩니다.

    > end;

    >

    >

    > TControl(), TObject() 라는것은 객체의 타입캐스팅을 뜻합니다.

    > 예를들어...

    >

    > var Control:TControl; // 이런 변수를 선언했다면...

    >

    > Control:=Edit1; // 이런 문법이 가능합니다. 왜냐면 TEdit는 TControl의

    > 자손이기 때문입니다.

    >

    > 그런데 이렇게 받은 객체는 TControl일까요? 아니면 TEdit일까요?

    > 인스턴스는 분명 TEdit입니다. 그러나 Control이라는 변수를 사용한다면

    > TControl의 능력을 벋어날수 없습니다. 그래서 다음처럼 타입캐스팅이 필요한겁니다.

    >

    > TEdit(Control).text:='어쩌구저쩌구';

    >

    > 그러나 만약 Control 변수의 인스턴스가 TEdit가 아니라면 에러가 발생합니다.

    > 그래서 위의 예제에서도 (Controls[j] is TEdit) 이런식으로 먼저 점검한거죠.

    >

    > 그럼 이만... 좋은하루 되세요~

    >

  • Profile
    델맹 2001.08.24 00:37
    훈 wrote:

    > 많은 도움이 되었습니다...^^

    > Controls라는 배열을 사용할 수 있다고 하셨는데,

    > Controls라는 배열은 델파이에서 관리하는 건가요?

    >

    > 각 Component에 있는 배열인가요?

    > Hierarchy를 보면, TObject-TComponent-TControl-TWincontrol, 이렇게 되쟎습니까..?

    > 그럼 Controls라는 배열은 TComponent라는 Class에서 사용할 수 있는 건가요?

    > 그럼 TObject에서는 Components라는 배열이 존재하고, TControl에는 WinControls라는 배열이 존재하고... 이런식으로 확장되는건가요?

    >

    > 그리고, Controls라는 변수를 사용하면 TControl의 능력을 벗어 날 수 없어,

    > 다음과 같이 TypeCasting을 하신다고 하셨는데,

    >

    > TEdit(Control).text:='어쩌구저쩌구';

    >

    > 이때, Control은 포인터인가요?

    > 결국, TObject(), TComponent(), TControl()에는 무엇이 인자가 되는 건가요?

    > 포인터인가요? 아니면,객체인가요?

    > 객체의 포인터인가...?

    >

    > 아 개념이 너무 부족하군요. 제 한계를 느낍니다.

    > 조언을 부탁하고요, 이런 걸 공부할 수 있는 웹사이트를 가르쳐 주셔도 감사하겠습니다.

    >

    > 너무 난해한건 아닌지 모르겠습니다.



    글쎄요~ OOP 개념을 확실하게 이해할수 있는 제대로된 웹사이트나 서적은

    저도 찾질못해서 추천해드릴게 없네요. ...



    먼저 Controls 배열부터 말씀드리자면... Panel을 예로들죠..

    Panel은 다른 컨트롤과는 달리 그위에 컨트롤을 올려놓을수 있습니다.

    이때 올려논 순서가 Controls에 쌓이게 됩니다. Form도 마찬가지고요..

    그런데 이렇게 컨트롤을 올려놓을수 있는 컨트롤은 TWinControl입니다.

    그러므로 Controls배열도 TWinControl에만 있습니다.

    Controls는 델파이에서 말하는 Parent를 구현하기 위한것입니다.

    시각적 부모 컨트롤이 자손을 Controls라는 배열로 관리하는것이죠.



    반면에 TComponent에 포함된 Components는 Owner의 자손을 표현한것입니다.

    모든 컴포넌트는 Owner가 될수 있는데 Owner란 "관리자" 즉, 컴포넌트를 관리하는

    컴포넌트입니다. 우리가 보통 동적 컴포넌트 생성이라해서 컴포넌트의 Create메소드를

    직접 작성하는 경우가 있는데 이
  • Profile
    2001.08.24 08:12
    이렇게까지 상세히 설명해 주어, 감사 드립니다.

    정말 많은 도움이 되었습니다.



    이해는 가지만, 전부 내것으로 소화하기는 쉽지 않군요...

    허탈해하지 마시길..^^



    아~, 하여간 너무 감사드립니다.

    좋은 하루 되세요...



    델맹 wrote:

    > 훈 wrote:

    > > 많은 도움이 되었습니다...^^

    > > Controls라는 배열을 사용할 수 있다고 하셨는데,

    > > Controls라는 배열은 델파이에서 관리하는 건가요?

    > >

    > > 각 Component에 있는 배열인가요?

    > > Hierarchy를 보면, TObject-TComponent-TControl-TWincontrol, 이렇게 되쟎습니까..?

    > > 그럼 Controls라는 배열은 TComponent라는 Class에서 사용할 수 있는 건가요?

    > > 그럼 TObject에서는 Components라는 배열이 존재하고, TControl에는 WinControls라는 배열이 존재하고... 이런식으로 확장되는건가요?

    > >

    > > 그리고, Controls라는 변수를 사용하면 TControl의 능력을 벗어 날 수 없어,

    > > 다음과 같이 TypeCasting을 하신다고 하셨는데,

    > >

    > > TEdit(Control).text:='어쩌구저쩌구';

    > >

    > > 이때, Control은 포인터인가요?

    > > 결국, TObject(), TComponent(), TControl()에는 무엇이 인자가 되는 건가요?

    > > 포인터인가요? 아니면,객체인가요?

    > > 객체의 포인터인가...?

    > >

    > > 아 개념이 너무 부족하군요. 제 한계를 느낍니다.

    > > 조언을 부탁하고요, 이런 걸 공부할 수 있는 웹사이트를 가르쳐 주셔도 감사하겠습니다.

    > >

    > > 너무 난해한건 아닌지 모르겠습니다.

    >

    > 글쎄요~ OOP 개념을 확실하게 이해할수 있는 제대로된 웹사이트나 서적은

    > 저도 찾질못해서 추천해드릴게 없네요. ...

    >

    > 먼저 Controls 배열부터 말씀드리자면... Panel을 예로들죠..

    > Panel은 다른 컨트롤과는 달리 그위에 컨트롤을 올려놓을수 있습니다.

    > 이때 올려논 순서가 Controls에 쌓이게 됩니다. Form도 마찬가지고요..

    > 그런데 이렇게 컨트롤을 올려놓을수 있는 컨트롤은 TWinControl입니다.

    > 그러므로 Controls배열도 TWinControl에만 있습니다.

    > Controls는 델파이에서 말하는 Parent를 구현하기 위한것입니다.

    > 시각적 부모 컨트롤이 자손을 Controls라는 배열로 관리하는것이죠.

    >

    > 반면에 TComponent에 포함된 Components는 Owner의 자손을 표현한것입니다.

    > 모든 컴포넌트는 Owner가 될수 있는데 Owner란 "관리자" 즉, 컴포넌트를 관리하는

    > 컴포넌트입니다. 우리가 보통 동적 컴포넌트 생성이라해서 컴포넌트의 Create메소드를

    > 직접 작성하는 경우가 있는데 이