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입니다.
: