안녕하세요.
저는 에디터를 구현하기위해 다중 mdi child를 열면서 동시에
tabcontrols에 연 파일명을 추가하여 사용하려고 합니다.
그런데 tabcontrols의 tabindex를 사용하여 파일과 동일한 내용의
mdi child를 찾아서 나타내려고 합니다.
mdi child의 색인은 현재 할성화된 창이 0 그전에 할성화된 창이 1
순으로 되어있어서 나중에는 tabindex와 동일한 child를 활성화
할 수가 없다는 것을 알았습니다.
어떤한 방법으로 tabcontrols의 변경과 child폼을 일치 할수가 있는지
제발 좀 가르쳐 주세요.
요즘 밥도 못먹고 고심중입니다.
제가 질문하고 제가 답을 하네요. 이히히히.
겨우 알아냈지요.
나모웹에디터도 이렇게 하는것 같더라구요.
(아주 자세히 관찰한 결과임: 여러개 열고 막 이동하면 살짝 살짝 폼이동이 보임)
procedure TMainForm.TabControl1Change(Sender: TObject);
var
i: integer;
begin
begin
for i:=0 to MDIChildCount -1 do
begin
if MDIChildren[i].caption = tabcontrol1.tabs[tabcontrol1.tabindex] then
MDIChildren[i].show;
end;
end;
end;
우리는 차일드폼을 생성시 차일드폼에 파일명을 줍니다. 그리고 tabcontrol의 tabs프로퍼트에 add메서드를 사용하여 화일이름을 동시에 삽입하지요.
차일드폼이 생성되면서 동시에 탭에는 화일이름을 가진 탭이 하나 더 생성이 되지요.
탭은 tabindex속성이 있어서 우리가 탭을 크릭할 경우 어떤 탭이 클릭 되었는지 이 속성으로 알수 가 있습니다. 그냥 mdichildren[tabcontrol1.tabindx] 이렇게 하면 안되지요.
왜요. 차일드폼은 방금 우리가 본 차일드폼을 0 이라고 하고 그전에 본 폼을 1이라고 하고 하면서 우리가 현재 보고 있는 폼을 0 으로 하고 본 순서대로 숫자를 하나씩 증가 시키죠. 그래서 탭 인텍스의 숫자와 같은 차일드폼이 보일 수가 없지요.
그래서 우리가 차일드폼을 생성시 차일드폼의 name이나 caption에 여는 화일명을 주죠.
차일드폼에 입력된 화일명은 또한 태키의 tabs에 입력이 되어 탭이 하나 증가 하는 것이죠. 그렇죠.
그러면 차일드폼은 일단은 생성 순서에 따라 정렬은 안되어 있어도 일정한 인텍스 숫자를 가지고 있지요. 우리가 세번째 탭인 3.txt를 크릭한 경우 3.txt의 tabindex값을 얻어서 tabcontrol의 tabs에서 화일이름을 얻어와 차일드퐁의 캡션중 같은 이름을 가진 폼을 찾아서 show메서드로 보이게 하지요.
끝까지 읽어 주셔서 감사합니다. 본 코딩은 어디에서 힌트를 얻어서 작성한 것임.
어딘지 기억은 안남.