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
[75053] Re:Re:Re:Re:Re:component 배열 형식으로 구현 질문입니다.
김시환 [godson2] 2975 읽음    2018-08-02 16:39
#define IMAGE_X_SIZE   32    
#define IMAGE_Y_SIZE   32


void __fastcall TMDICompare::FormResize(TObject *Sender)
{
    int offsetX, offsetY ;
    int X_Image_Cnt = 0 ;


    X_Image_Cnt = this->Width / IMAGE_X_SIZE ;

    if(X_Image_Cnt == 0) X_Image_Cnt = 1 ;

    for(int loop=0 ; loop<image_Total_Count ; loop++)
    {
        offsetX = (loop % X_Image_Cnt) * IMAGE_X_SIZE ;
        offsetY = (loop / X_Image_Cnt) * IMAGE_Y_SIZE ;

        GImage[0][loop]->Top  = offsetY ;
        GImage[0][loop]->Left = offsetX ;
    }
}
//---------------------------------------------------------------------------



바루 님이 쓰신 글 :
: 답변 정말 감사합니다 ㅠㅠ
:
: 혹시 하나만 더 질문해도 될까요?
:
: TImage를 Form상에서 Left와 Top 값을 설정해주어 위치를 잡지 않습니까. 
: 지금 1000개 정도의 같은 크기의 TImage 프레임을 모눈종이처럼 배열해야하는데
: 혹시 자동으로 배열하는 방법이 있을까요?
:
: 한줄에 10개를 고정해두고 100줄을 자동 정렬하거나 혹은
: Form의 크기에 맞춰서 한 줄의 이미지 개수가 늘어나고 줄어들어들게 되면 될거 같습니다..
:
: 다시 한번 답변 정말 감사드립니다.
:
: 김시환 님이 쓰신 글 :
: : 1.  TRzGroupBox *GroupList[10];             
: : :    TImage *GImage[10][1000];
: :      를 private 속성으로 선언을 해 보세요..
: :
: : 2. TImage *image1; 의 경우는 따로 선언하는것이 아니고 디자인 타임에서 폼화면에 TImage 컴포넌트를 올리면 자동으로 헤더에
: : 정의 되는 것을 말씀 드리는 겁니다.
: :
: : 아래 원래 코드에서  TImage *G1Image1; 의 경우도 폼화면에 등록된 이미지 컴포넌트가 있어서 헤더파일에 정의된 것일 겁니다.
: :
: :
: :
: : 바루 님이 쓰신 글 :
: : : 답변 정말 감사드립니다. 두 가지 더 궁금한게 있어서 질문드립니다.
: : : 1.
: : : 헤더파일에서 아래와 같이 정의를 했을 때
: : :
: : :   : 

: : : "Error in module Layer_F: Incorrect field declaration in class TLayerForm"   //Layer_F 는 cpp, h파일 이름
: : : 이런 메시지가 뜨는데 어떻게 해야되나요?
: : :
: : : 2.
: : : 또, FormCreate에서 image1, image2 ... 는 어떻게 정의되는 건가요?
: : :
: : : TImage *image1;
: : : TImage *image2;
: : : 

: : : 이런 형식인가요?
: : : 현재 코드에선  TImage *G1Image1;를 따로 초기화 없이 써서요.
: : :
: : : 앞에 선임자가 썼던 코드 그대로 받아서 C빌더에 대한 지식 없이 맨땅에 헤딩하려니 힘드네요 ㅠㅠ
: : :
: : :
: : : 김시환 님이 쓰신 글 :
: : : : TImage 컴포넌트를 정적으로 하느냐 동적으로 하느냐에 따라 조금 코드가 변할수는 있을텐데 제가 늘 사용하던 컴포넌트 배열을 참고 삼아 알려 드리겠습니다.
: : : :
: : : : 일단 아래 코드 중심으로 설명을 드리면
: : : :
: : : : class TLayerForm : public TForm
: : : : : {
: : : : : __published:    // IDE-managed Component
: : : : :
: : : : :   TRzGroupBox *GroupList[10];             
: : : : :   TImage *GImage[10][1000];
: : : : }
: : : :
: : : : void __fastcall TLayerForm ::FormCreate(TObject *Sender)   
: : : : {
: : : :     GImage[0][0] = image1 ;     // 이미지가 정적으로 고정되어 있을 경우 모든 이미지를 다 배열에 할당합니다.
: : : :     GImage[0][1] = image2 ;     // 숫자적으로 보면 꽤 노가다가 되겠네요..
: : : :             :
: : : :             :
: : : :     GImage[9][999] = imageN ;
: : : : }
: : : :
: : : : GImage[group][item]->Picture->LoadFromFile("image.bmp") ;     // 이런식으로 사용하시면 됩니다.
: : : :
: : : : 이미지가 동적으로 생성될 경우는 위의 폼생성 이벤트에서 처럼 미리 컴포넌트를 등록하지 않고
: : : : 생성할때 마다 등록을 해 주셔야 하겠지요.. 워낙 수가 많으니 동적생성할 경우는 관리를 잘하셔야 하겠지요..
: : : :
: : : : 바루 님이 쓰신 글 :
: : : : : 현재 코드
: : : : :
: : : : :
: : : : : class TLayerForm : public TForm
: : : : : {
: : : : : __published:	// IDE-managed Component
: : : : : 
: : : : :   TRzGroupBox *Group1; 
: : : : :   TImage *G1Image1;
: : : : :   TImage *G1Image2;
: : : : :   TImage *G1Image3;
: : : : :   TImage *G1Image4;
: : : : : //....(이하생략)
: : : : : 

: : : : :
: : : : : 바꾼 코드
: : : : :
: : : : :
: : : : : class TLayerForm : public TForm
: : : : : {
: : : : : __published:	// IDE-managed Component
: : : : : 
: : : : :   TRzGroupBox *GroupList[10];              
: : : : :   TImage ***GImage; //([각 그룹 번호][그룹 내의 아이템 번호] -> 그룹 1의 5번째 아이템 [0][4])
: : : : : 

: : : : :
: : : : :
: : : : : 카테고리를 만들고 각 카테고리(TRzGroupBox) 안에 이미지(TImage) 아이템들을 넣는 것을 구현했습니다.
: : : : : 현재는 카테고리 개수를 10개, 각 카테고리당 아이템 최대 개수를 10개로 지정하여 component들을 하드코딩 되어 있는 상태입니다.
: : : : : 여기서 아이템을 1000개 이상 넣어야하는 상황이 발생해서 현재 하드코딩 되어 있는 부분을
: : : : : 다중 포인터나 vector를 이용하여 대체하는 방법을 찾았으나 component를 다중 포인터로 사용할 수가 없더라구요.
: : : : :
: : : : : 그래서 어떤 방법으로 다른 방법으로 구현 할 수 있는지 조언 부탁들립니다.
: : : : :
: : : : : 현재 사용하고 있는 컴파일러는 c++builder6입니다.
: : : : :

+ -

관련 글 리스트
74974 component 배열 형식으로 구현 질문입니다. 바루 3046 2018/06/20
74977     Re:component 배열 형식으로 구현 질문입니다. 김시환 3081 2018/06/22
74979         Re:Re:component 배열 형식으로 구현 질문입니다. 바루 3022 2018/06/22
74981             Re:Re:Re:component 배열 형식으로 구현 질문입니다. 김시환 3047 2018/06/25
74980             Re:Re:Re:component 배열 형식으로 구현 질문입니다. 김시환 2929 2018/06/25
74982                 Re:Re:Re:Re:component 배열 형식으로 구현 질문입니다. 바루 3030 2018/06/27
75053                     Re:Re:Re:Re:Re:component 배열 형식으로 구현 질문입니다. 김시환 2975 2018/08/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.