제가 pagecontrol.에 tabsheet를 추가 페이지마다 일정한 크기의
이미지와 텍스트를 3개씩 추가를 하려고 합니다.
제질문에 꼭 답좁 부탁드립니다.. (저 이거 못하면 큰일나거든여...)
질문1>
pagecontrol 에 페이지를 추가할때 이미지와 텍스트를 같은크기의 일정한 위치에
3개씩 추가를 같이 해야 합니다..
질문2>
추가된 이미지에는 추가될때 default의 이미지가 삽입이 되어있어야 합니다.
질문3>
이렇게 만들어진 pagecontrol에 임의의 버튼을 클릭하면 한페이지에 또다른
이미지를 추가해야 합니다..
이질문에 답좁 꼭 부탁드립니다....제발
기타 다른 내용은 가급적 삼가해 주시기 바랍니다.
질문1>은 예를 들어 폼의 버튼을 누를때마다 추가 시키고 싶다면
(이미지, 텍스트는 일단 제외하고 TabSheet만)
다음과 같이 됩니다.
procedure TForm1.Button1Click(Sender: TObject);
var
NewTabSheet: TTabSheet;
begin
NewTabSheet := TTabSheet.Create(PageControl1);
NewTabSheet.PageControl := PageControl1;
end;
이미지와 텍스트는 좀 생각을 해야할 문제입니다.
실제로 TabSheet마다 Image Control과 Label을
따로 갖고 있어야 하는 경우도 있고(보통 이렇게 되겠지요)
단지 PageControl의 Page가 바뀔때마다
Image Control과 Label의 데이터만 바꿔주면
되는 경우도 있습니다.
만약 TabSheet마다 따로 갖고 있어야 한다면
그것이 프로그램 내에서 얼마나 보편적으로 사용되는 것인지도
생각해볼 필요가 있습니다.
자주 쓰이고 표준적인 형태가 된다면
TTabSheet를 상속받아서 새로운 컴포넌트를 만드는 것도
생각해 볼 수 있습니다.
그러나 보통은 그렇게까지 안하지요.
새로운 컴포넌트를 만들지 않는다면,
각 TabSheet마다 올라갈 Image와 Label 컴포넌트의 인스턴스를
어딘가 다른 변수에 보존하고 있어야겠지요?
만약 새로운 컴포넌트를 만들었다면(TMyTabSheet라 치고)
MyTabSheet1.Image와 같이 접근할 수 있을 테지만요.
보통의 경우라면 새로운 컴포넌트는 안 만들고
대신 Image와 Label들의 인스턴스를 관리하기 위해서
List(TList의 인스턴스)를 만들어서
거기다가 Image와 Label들을 리스트 형태로 관리하겠지요.
Image용 리스트, Label용 리스트를 따로 만들수도 있겠고
Image와 Label 3개씩을 필드로 하는 구조체를 만들어서
그 구조체를 멤버로 하는 리스트를 만들어서 관리할 수도 있겠지요.
보통은 Image용 리스트와 Label용 리스트를 따로 만듭니다.
이유는? 귀찮으니까 ㅋㅋㅋ
그래서 가장 보편적으로 쓰는 방식대로 한다면 다음과 같이 됩니다.
(단 Image와 Label은 TabSheet당 3개씩이 아니라 편의상 1개씩만 만드는 것으로 했습니다.)
type
TForm1 = class(TForm)
PageControl1: TPageControl;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
ImageList: TList;
LabelList: TList;
public
{ Public declarations }
end;
procedure TForm1.Button1Click(Sender: TObject);
var
NewTabSheet: TTabSheet;
NewImage: TImage;
NewLabel: TLabel;
begin
NewTabSheet := TTabSheet.Create(Self);
NewImage := TImage.Create(Self);
ImageList.Add(NewImage);
NewImage.Parent := NewTabSheet;
NewImage.SetBounds(5, 5, 300, 300);
NewImage.Picture.LoadFromFile('C:1249.bmp'); // default Image
NewLabel := TLabel.Create(Self);
LabelList.Add(NewLabel);
NewLabel.Parent := NewTabSheet;
NewLabel.Caption := '1249'; // default Label
NewLabel.Left := 5;
NewLabel.Top := 320;
NewTabSheet.PageControl := PageControl1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ImageList := TList.Create;
LabelList := TList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
I: Integer;
begin
with ImageList do
for I := Count - 1 downto 0 do
TImage(Items[I]).Free;
ImageList.Free;
with LabelList do
for I := Count - 1 downto 0 do
TLabel(Items[I]).Free;
LabelList.Free;
end;
나머지는 직접 해결하실 수 있으실 겁니다...
수고하세요.