2011-09-14 5 views
3

내 델파이 XE 애플리케이션은 며칠 째까지 좋았고 무엇이 잘못되었는지 알 수 없습니다. 내 프로젝트 레이아웃 :프로젝트가 Delphi XE에서 열려있을 때 주 양식이 DataModule의 이미지 및 작업에 액세스 할 수없는 이유는 무엇입니까?

  • 비주얼 컨트롤은 기본 폼에 그 컨트롤에 대한
  • 작업 및 이미지 목록입니다은 데이터 모듈 내 프로젝트를 열

에있는, 기본 폼하지 않습니다 이미지 나 액션이 컨트롤이 있어야 할지라도 컨트롤과 연관되어 있어야합니다. 컴파일 할 때 "모듈 'winMain'링크가 현재 프로젝트에서 찾을 수없는 'modGeneral'모듈에 링크됩니다. 링크를 제거하거나 다른 모듈로 리디렉션 하시겠습니까?"라는 오류 메시지가 나타납니다. "

해결 방법 : 프로젝트를 연 후에 기본 폼을 닫은 다음 프로젝트 관리자에서 모듈을 두 번 클릭하여 IDE를 엽니 다 (예, 현재 프로젝트에 있음). 다시 - 기본 양식을 엽니 다. 이제 내 모든 동작과 이미지가 올바르게 표시됩니다.

델파이의 알려진 버그는 무엇이라고 생각하십니까? 내 프로젝트에 문제가 있습니까?

+1

소스 코드 컨트롤을 사용하는 경우 체크인을 한 다음 문제가 발생하기 며칠 전에 되돌릴 수 있으며 여전히 문제가 있는지 확인할 수 있습니다. 문제가 사라지면 프로젝트에서 일어난 일이며 diff를 사용하여 어떤 일이 일어 났는지 확인할 수 있습니다. –

+0

같은 방법 (비주얼 한 형태의 비주얼 모듈)을 사용하는 프로젝트가 있는데, 델파이 XE에는 문제가 없습니다. 결코 사용하지는 않지만 프로젝트의 컨텍스트 메뉴에 Clean 메뉴 항목이 있습니다. 어쩌면 그것은 sth를 해결할 수 있습니다. (전에 백업하십시오 ...) – Whiler

+0

@Chris 문제는 diffs를보고 나에게 이것이 일어난 날을 알려주지 만 왜 델파이가 그것을 변경했는지 또는 자동화 된 빌드인지는 알 수 없습니다. 수동으로 변경하지는 않았습니다. 귀하의 제안에 감사드립니다. – jonjbar

답변

7

.dpr 파일을 확인하십시오. 문제를 재현하는 한 가지 방법은 해당 절의 uses 절을 변경하는 것입니다. 잘 작동이 예제를 고려하십시오

프로젝트 관리자의 아이콘이 DFM와 모듈에 대한 평소와 같이 보이는

program Project1; 

uses 
    Forms, 
    Unit1 in 'Unit1.pas' {Form1}, 
    Unit2 in 'Unit2.pas' {DataModule2: TDataModule}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TForm1, Form1); 
    Application.CreateForm(TDataModule2, DataModule2); 
    Application.Run; 
end. 
:

Project Manager screenshot 1

것은 당신이 주석을 제거하거나 주석 경우 : 여기

program Project1; 

uses 
    Forms, 
    Unit1 in 'Unit1.pas' {Form1}, 
    Unit2 in 'Unit2.pas'; // {DataModule2: TDataModule}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TForm1, Form1); 
    Application.CreateForm(TDataModule2, DataModule2); 
    Application.Run; 
end. 

아이콘이 변경되었습니다

Project Manager screenshot 2

... 설명하는 오류가 발생합니다. 변경 사항을 적용하려면 프로젝트를 닫았다가 다시 열어야합니다.

+0

같은 줄에 따라 데이터 모듈을 보는 폼의 기능을 제거하면 같은 종류의 문제가 발생할 수 있습니다. 예를 들어 implementation 절의 'uses' 절에서 무언가를 제거하십시오. –

+0

또한'Project | Options | Forms'를 사용하여 메인 폼과 데이터 모듈이 모두 자동 생성 목록에 있는지 확인한 다음 데이터 모듈을 먼저 생성되도록 이동하십시오. (데이터 모듈은 하나가 될 수 없으므로 기본 폼에 영향을 미치지 않습니다.) 데이터 모듈이 디자인과 런타임 모두에서 기본 폼보다 먼저 생성되므로 데이터 모듈의 항목에 안전하게 액세스 할 수 있습니다 기본 폼의 코드에서. –

+0

그게 전부 였어. 나는 "Src \ m_Cli_General.pas '{item : TDataModule}"프로젝트에서 "m_Cli_General"을 가지고 있었고 문제를 해결 한'Src \ m_Cli_General.pas '{modGeneral : TmodGeneral}의 "m_Cli_General"을 으로 변경했습니다. 어떻게 이런 일이 일어 났는지 모르겠다. 고마워요. – jonjbar

0

TOndrej의 답변이 완전하고 정확합니다. 나는 코멘트로 게시해야 할 작은 글이 있지만 눈에 띄지 않을까 걱정됩니다. 단위 바꾸기와 프로젝트 파일 리팩터링 후에 설명 된 오류가 발생했습니다 (실제로는 in 및 설명이 모두 uses 섹션에서 제거되었습니다). 나는 uses 섹션에서 필수 패턴을 반환했지만 여전히 오류가 있습니다.

DMMain  in 'DMMain.pas'  {fdmMain : TDataModule}, 
DMIndex in 'DMIndex.pas' {fdmIndex : TDataModule}, 

놀랍게도 정말 사항 : 내 실수는 내가 사용 섹션에 의견을 추가 정렬했다. 맞춤 제거하기

DMMain  in 'DMMain.pas'  {fdmMain: TDataModule}, 
DMIndex in 'DMIndex.pas' {fdmIndex: TDataModule}, 

오류가 수정되어 작동하고 있습니다.

+0

아마도 컴파일러가 펀치 카드에서 FORTRAN (또는 COBOL)과 너무 많이 유사한 코드를 거부합니다.) – mjn