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
[15463] 단도직입적으로... 말 안됩니다. 그러나 이렇게 하시면...
굿데이 [] 771 읽음    2002-02-13 10:06
우선 님이 가장 원하시는 답변입니다.

메인폼의 이름을 Form1이라고 가정하면...

for(int loop=0; loop<Form1->ComponentCount; loop++)
{
  if(!strcmp( (TLabel *)(Form1->Components[loop])->Name.c_str(), BUF) )
  {
     sprintf(BUF1, (TLabel *)(Form1->Components[loop])->Caption.c_str());  
     // 등등.. 원하는 작업을 합니다. 아래처럼..
     // (TLabel *)(Form1->Components[loop])->Left    = 10;  
     // (TLabel *)(Form1->Components[loop])->Visible = true;
  }
}


다음으로 제가 추천하는 방법입니다.

레이블을 150개나 떨어트리고.. 그 이름을 지정하는것... 노가다인거 같은데요
동적으로 만드는게 좋을듯 합니다.

TLabel *myLabel[150];

for ( int loop=0; loop<150; loop++ )
{
  myLabel[loop]          = new TLabel(Form1);
  myLabel[loop]->Parents = Form1;
  myLabel[loop]->Left    = loop%5 * 20;
  myLabel[loop]->Top     = loop/5;
  myLabel[loop]->Caption = (String) "T" + (int)loop/30+1 + "LB" + (int)loop%30+1;

  // 이렇게 하면 아래 처럼 별도의 이름이 필요 없을듯..
  // 왜냐하면.. 포인터가 저장되어 있으므로..  
  // 그렇지 않더라도.. (1)번방법으로 컨트롤 할 수 있슴.
  myLabel[loop]->Name    = (String) "T" + (int)loop/30+1 + "LB" + (int)loop%30+1;
}

이렇게 생성하시고 사용은

for ( int loop=0; loop<150; loop++)
{
  sprintf(BUF1, myLabel[loop]->Caption.c_str());  
  // 등등.. 원하는 작업을 합니다. 아래처럼..
  // myLabel[loop]->Left    = 10;  
  // myLabel[loop]->Visible = true;
}

이렇게 합니다.

컴파일 해보지 않아서 에러가 있을 수도 있는데요.. 그렇다면 리플해주세요.
다시 올리겠습니다. 그리고 죽지 마세요~ ^^;


시후 님이 쓰신 글 :
: 가정입니다..
: 라벨이 150개 정도 있다고 치면..
: 라벨의 이름은
: T1LB1, T1LB2, T1LB3, T1LB4, T1LB5, T1LB6, T1LB7, T1LB9, T1LB10, .... , T1LB30
: T2LB1, T2LB2, T2LB3, T2LB4, T2LB5, T2LB6, T2LB7, T2LB9, T2LB10, .... , T2LB30
: T3LB1, T3LB2, T3LB3, T3LB4, T3LB5, T3LB6, T3LB7, T3LB9, T3LB10, .... , T3LB30
: T4LB1, T4LB2, T4LB3, T4LB4, T4LB5, T4LB6, T4LB7, T4LB9, T4LB10, .... , T4LB30
: T5LB1, T5LB2, T5LB3, T5LB4, T5LB5, T5LB6, T5LB7, T5LB9, T5LB10, .... , T5LB30 입니다.
:
: char BUF[10]={""}, BUF1[10]={""}, *ptr;
: int i, j;
:
: for(i = 1 ; i < 6 ; i++)
: {
:     for(j = 1 ; j < 31 ; j++)
:     {
:         strcpy(BUF, ("T"+IntToStr(i)+"LB"+IntToStr(j)).c_str());
:         BUF1 = BUF->Caption;
:         ptr = strstr(BUF1, DB에서 불러온 값);
:
:         if(ptr != NULL)
:         {
:             // 실행되는 부분
:         }
:         else continue;
:     }
: }
:
: 제가 궁금한건 위의 BUF 에는 i=1,j=1일 경우 "T1LB1"이 들어 갑니다.
: 그 다음라인의 BUF1 = BUF->Caption은 실제로는 T1LB1->Caption 의 값을 가져 오기를 원하거든요.
: 근데 다음과 같은 에러가 떨어 지거든요..
: [C++ Error] BIZE.cpp(435): E2288 Pointer to structure required on left side of -> or ->*
: 위의 코드가 말도 안되는 건지 아니면 원하는 라벨의 캡션 값을 불러 들일수 있는지 궁금하거든요.
: 열분 고수님들 답변을 부탁합니다.
: 가능하다면 방법을 좀 알려 주세염..
: 위의 방법이 안된다면 순차적으로 150번을 비교를 해야 하거든요
: 그렇다고 ptr을 150개나 만들어서 비교할수도 없잖아여..
: 아 죽겠습니다..다른 좋은 방법이 있으면 방법도 좀 갈켜 주세염...부탁드립니다..
:
:
:

+ -

관련 글 리스트
15437 가능한지 아닌지는 몰겠지만..질문 하나 올립니다.. 시후 735 2002/02/09
15463     단도직입적으로... 말 안됩니다. 그러나 이렇게 하시면... 굿데이 771 2002/02/13
15443     Re:가능한지 아닌지는 몰겠지만..질문 하나 올립니다.. 만해 803 2002/02/09
15441     허걱... 이렇게 쓰시느니 차라리 TStringGrid를 쓰세요.(내용無) 김백일 747 2002/02/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.