2009-06-10 2 views
2

저는 Delphi 2009를 사용하고 있으며 응용 프로그램에 데이터 모듈이 포함되어 있습니다. 데이터 모듈에는 '전역'이라는 사용자 지정 구성 요소가 있습니다. 응용 프로그램의 또 다른 형태에 데이터 모듈에 구성 요소 속성을 할당 할 때 액세스 위반이 발생했습니다.

, 나는 전역의 구성 요소에 게시 된 속성 (문자열)을 변경하기 위해 노력하고있어 :

dm.Globals.qhProject := _ProjectName.Text; //always gives access violation 

_ProjectName 컨트롤은 TLabeledEdit의 후손이다. 상자에 텍스트가 있으면 항상 여기에 액세스 위반이 발생합니다. 여기

dm.Globals.qhProject := 'some text'; //works 

이 qhProject 속성의 선언입니다 : 내가 수동으로 속성에 문자열을 assing 경우

그러나, 나는 AV하지 않는

FqhProject: string;  
property qhProject: string read FqhProject write FqhProject; 

을 그럴 수 없어 왜 여기에 AV가 있는지 알아보십시오. 양식/데이터 모듈의 자동 생성 순서를 이동하려고 시도했지만 항상 AV를 얻습니다.

내가 뭘 잘못하고 있니?

업데이트 : 응용 프로그램에서 다른 형태로 전환 할 Billenium 효과 TFormContainer을 사용하고

. 여기에 관련된 두 양식은 모두 양식 컨테이너에 있습니다. 한 형태, TdlgSummary는 포함되어 다음과 같은 : 나는 dlgSummary의 내부 SyncVars을 실행하면

dlgSummary.SyncVars; 

, 그것은 잘 작동 :

procedure TdlgSummary.SyncVars; 
begin 
    dm.Globals.qhProject := _ProjectName.Text 
end; 

다른 형태 TdlgFinalize 다음이 포함되어 있습니다. dlgFinalize에서 호출하면 AV가 생깁니다. 이것은 문제의 요점 인 것 같지만, 무엇이 잘못 될지 알 수는 없습니다. 컨트롤을 dlgFinalize로 전환하더라도 dlgSummary는 다시 파괴 될 수 없기 때문에 파괴되지 않았습니다. 어떤 아이디어?

답변

4

_ProjectName이 이 아닌 것처럼 보입니다.입니다. 이 줄에 중단 점을 넣고 _ProjectName을 검사하여 유효한 참조를 제공하는지 확인하십시오.

+0

이러한 양식 중 몇 가지는 Billenium Effects 구성 요소 제품군의 일부인 TFormContainer 내부에 있습니다. _ProjectName을 포함하는 양식이 위의 코드를 실행할 때 유효한 참조를 제공합니다. 다른 양식이 실행될 때 참조가 유효하지 않습니다. 앞뒤로 양식을 전환 할 수 있기 때문에 여기에서 어디로 가야할지 모르겠으며 _ProjectName 컨트롤이있는 양식은 삭제되지 않았습니다 .... – croceldon

+0

세부 정보 : 양식에 액세스 할 수없는 것으로 보입니다. 다른 형식의 labled 편집 (TdlgSummary). 나는 이유를 알 수 없다. 소스 문이 uses 문에 있는데 다음과 같이 액세스하고 있습니다. dlgSummary._ProjectName.Text // AV를 throw합니다. – croceldon

+0

Billenium Effects 또는 양식 컨테이너에 익숙하지 않지만 다음을 확인하십시오. 양식이 DPR이 아닌 양식 컨테이너에 의해 작성되는지 확인하십시오. dlgSummary는 폼 단위로 선언 된 전역 변수입니다. 그러나 폼 컨테이너가 있어야하기 때문에 Delphi가 시작시 초기화하지 않으면 폼 컨테이너는 폼 클래스의 인스턴스를 인스턴스화하고 내부 목록에 할당합니다. 지정된 전역 변수가 아닌 경우 전역 양식 변수가 무효 변수로 남게됩니다.나는 여기 어둠 속에서 맹목적으로 발포하고 있지만, 그것이 계속되고 있는지 보아라. –