2014-12-18 5 views
3

내가 상속 한 프로젝트의 주요 양식으로 텍스트를 볼 수없는 오랜 시간 문제가있었습니다. 다른 양식이 열려 있지 않더라도."모듈에 열린 자손 또는 연결된 모듈이 있습니다."오류를 디버그하거나 수정하는 방법?

이 오류 메시지의 원인을 어떻게 디버그 할 수 있습니까? 어떤 옵션을 고쳐야합니까?

하나의 관련된 뉴스 그룹 게시물 http://embarcadero.newsgroups.archived.at/public.delphi.ide/200906/0906193960.html이 발견되었지만 이는 양식 상속 원인 만 해결하고 링크 된 모듈에 대해서는 설명하지 않습니다. 나는 폼 상속을 사용하고 있다고 생각하지 않습니다.

프로젝트를위한 DM (데이터 모듈)을 가지고 있고 양식이 양식의 TTreeView 속성을 통해 dm 이미지를로드합니다. 데이터 모듈이 자동으로 표시되지 않습니다. 델파이의 텍스트 형식 (메모장에서 텍스트를 폼으로 보는 것을 제외하고)? 내 DM이 IDE에서 열리거나 닫혔는지는 중요하지 않습니다.

나는 또한 관련 제목 (Module %s has open descendants or linked modules. can not reload)과 함께 하나의 SO 질문을 찾았지만 질문 자체와 대답은 특별히 관련이 없습니다.

+0

최소한의 재생산을 할 수 없었습니까? 실제로 그렇게했다면 문제를 직접 해결할 것이라고 예상합니다. 코드와 구성 요소를 줄이면 문제가 사라지는 것을 알 수 있습니다. 당신이 버린 마지막 물건은 열쇠입니다. 이것은 필수적인 디버깅 기술입니다. 문제를 격리하십시오. –

+0

최소한의 재생산을 시도해 보겠습니다. 하지만 여전히 오류가 무엇인지 이해하고 싶습니다. 왜냐하면이 오류에 대한 공식 문서를 찾는 데 실패했기 때문입니다. –

답변

1

이것은 때때로 프로젝트 (또는 갤러리)의 다른 양식 (IIRC 문서의 시각적 양식 상속)을 상속하는 양식 때문에 발생합니다. IDE는 폼의 기본 클래스를 찾는 방법을 모른다. 그것은 자손 형태보다 먼저 열리는 것이 필요합니다.

unit SpecialForm; 

interface 

uses 
    Forms, { all the other usual stuff }, BaseForm; 

type 
    TMySpecialForm = class(TMyBaseForm) 
    private 

    public 

    end; 

당신은인지 알 수 있습니다 : 기본 (조상) 장치가 먼저 프로젝트에 포함되지 않은 경우 특히 TMyBaseForm를 포함하는 장치가, IDE에서 처음으로 개설되지 않은 경우 예를 들어,이 같은 오류가 발생할 수 있습니다 이것은 폼의 클래스 선언을 보면 알 수 있습니다. TForm이 아닌 다른 클래스의 하위 클래스 인 경우 오류의 원인 일 수 있습니다. TDataModule .DFM을 사용할 수 없으므로 데이터 모듈을 사용할 때 자주 발생합니다. 데이터 모듈 .DFM을 텍스트로 보려고하면 매번이 오류가 발생하며 솔루션을 종료하면 문제가 해결됩니다. 프로젝트를 만들고 메모장이나 메모장 ++ 같은 외부 편집기를 사용하여 데이터 모듈의 .dfm을 편집하십시오.

+0

흠 ... 내 양식이 TForm을 직접 확장 할 수 있는지 확인할 수 있었지만 기반이 없습니다. 클래스 사이에, 그리고 폼은 확실히 uses 절에 있습니다 ... 그래서 저는 여전히 상속을 의심하는쪽으로 기울어 져 있습니다. "연결된 모듈"까지의 모든 포인터는이 오류의 가능한 원인입니까? –

+0

아니요, 죄송합니다. 이것은 내가 문제를 겪어 본 유일한 이유입니다. 그래서 "원인"보다는 "때때로"라고 썼습니다. 문제의 유닛에 대한 프로젝트 파일 (프로젝트 -> 소스보기)에 라인이 누락 되었습니까? 그것은'Unit4.pas '{Form4}의'Forms, Unit4를 사용하는 줄에 따라야합니다.'- 끝에'{}'부분을 적어 둡니다. 문제가있는 양식에 해당 내용이 있습니까? (우리가 볼 수있는 코드 나 관련 세부 정보를 게시했다면, 당신이 가지고 있을지도 모르는 것들을 추측하는 것보다 훨씬 쉽습니다.) –

+0

또한 .dfm을 메모장에서 열면 .dfm의 첫 번째 줄은 무엇이라고 말합니까? 그것은'object Form4 : TForm4'이어야합니다 (폼의 이름과 클래스로 두 경우 모두'Form4'를 대체합니다). –