설정저장, 저장된 설정 불러오기 등을 구현할 때, Components[i] 를 주로 사용한다.

이 과정에서 문제가 있을 부분이 하나 있는데, FormShow 등에서 설정 불러오기를 할 경우,

이벤트가 서로서로 얽혀 있는 Component 들이 제대로 반응을 하지 않는 것이다.

예를 들어, 체크박스1을 체크하면 버튼2가 보여야 하고, 체크를 해제할 경우 보이지 않아야 한다는 설정 등이 제대로 작동하지 않을 때가 있다.

 

문제는 생성순서였다.

Components 는 dfm 에 정의된 순서대로 생성된다.

만약 체크박스1보타 버튼2가 늦게 생성된다면 체크박스1onClick 이벤트 핸들러에서 버튼2Visible 을 조절해야 하는데,

버튼2는 아직 생성되기 전이므로 문제가 생길 수 있다. (Access Violation ... ...)

 

dfm 을 직접 노가다로 정렬하거나 처음에 Component 를 폼에 올릴 때 순서대로 완벽하게 생성하면 문제는 없다..-_-;

 

아니면 dfm 의 서식을 보고 적당히 가공할 수도 있지 않을까.

Component 의 시작은 object, 끝은 end 로 끝남.

포함관계의 경우도 마찬가지.

 

ex) Form1 에 Panel1, Image1, Button4 가 있고 Panel1 에는 Button1,2,3 이 있을 경우 dfm 은 대략 아래와 같음.

트리뷰로 만들면 되겠다 싶었는데 Delphi IDE 에 있는 Component Structure 가 그거구나 싶다...

 

object Form1: TForm1

  ...

  ...

  ...

  object Panel1: TPanel

    ...

    ...

    object Button1

      ...

    end

    object Button2

      ...

    end

    object Button3

      ...

    end

  end

  object Image1: TImage

    ... 

  end

  object Button4: TButton

    ...

  end

end






Posted by bloodguy
,