2014-07-21 3 views
-2

Delphi VCL 단위 Grids.pas의 버그 (QC#25702)에 대한 해결 방법을 찾았습니다. 따라서이 파일을 프로젝트의 소스 폴더에 복사하고 프로젝트에 추가 한 다음 몇 줄의 코드를 변경했습니다. 그것은 Delphi 2007에서 였고 모든 것이 예상대로 작동했습니다.Delphi (XE2)에서 VCL 단위를 어떻게 변경합니까?

이제 Delphi XE2에서는 프로젝트가 더 이상 컴파일되지 않습니다. 호환되지 않는 유형 인 "TCustomGrid"및 "TdzVirtualStringGrid"(TCustomGrid의 자손)에 대해 불평합니다. 한 유닛은 Grids.pas 사본에 선언 된 TCustomGrid를 참조하고, 다른 하나는 Vcl.Grids.pas에 선언 된 TCustomGrid를 참조합니다. 이것은 두 유닛 모두 uses 절에 Vcl.Grids가 아닌 "Grids"가 있어도 발생합니다. 어떻게 내가이 문제를 해결할 수 있을지 생각해?

+0

설명하는 프로세스가 작동하는 것으로 알려져 있습니다. 그래서 명확하게 어떤 구체적인 세부 사항은 잘못되었습니다. 일부는 정확하지 않습니다. 우리는 그것이 무엇인지 추측 할 수 있습니다. 아마도 구식 dcu 파일이 있습니까? 아니면 D2007'Grids' (mods 포함)를 XE2 프로젝트에 추가했을 것입니다. 특정 환경 문제를 찾기 위해 일부 디버깅을 시도하고 수행하십시오. –

+0

XE2의 Vcl.Grids 유닛을 사용하여 프로세스를 반복하려했습니다 (프로젝트의 XE2 버전에만 포함되도록 다른 하위 디렉토리에 배치). 결과적으로 XE2에서는 버그가 수정되었으므로 프로젝트에서 Grids 유닛을 제거하고 Delphi 2007 파일을 하위 디렉토리로 이동 한 다음 프로젝트의 Delphi 2007 버전에만 포함 시켰습니다. – dummzeuch

+0

불행히도 여전히 동일한 프로젝트 내에서 두 유닛이 모두 사용 된 이유는 여전히 설명하지 못합니다. 모든 dcu 파일을 삭제하는 것은 도움이되지 못했지만 이제 Delphi 2007에서만 수정 된 유닛을 사용하기 때문에 오류가 사라졌습니다. 그렇다면이 질문을 어떻게 닫을 수 있습니까? 그것은 정말로 대답이 아니지만 더 이상 적합하지 않습니다. – dummzeuch

답변

0

귀하의 문제는 귀하가 XE2 프로젝트에 Delphi 2007 Grids 유닛을 포함시키고 있다는 것입니다. 그건 전혀 작동하지 않습니다. 이 방법으로 RTL/VCL 유닛을 수정하려면 다음과 같이해야합니다 :

  1. 사용중인 Delphi 버전과 함께 제공되는 유닛의 소스 코드로 시작하십시오. 이 경우 XE2와 함께 제공된 Vcl.Grids.pas으로 시작하십시오.
  2. 프로젝트 디렉토리 내에 해당 유닛의 사본을 만들고 그 유닛을 프로젝트에 추가하십시오.
  3. 복사 된 장치의 구현 섹션을 수정하십시오.
+0

실제로 작동합니다. 방금 실수로 Grids.pas 파일을 Delphi 2007 버전의 하위 디렉토리에서 XE2 버전의 프로젝트에 추가했습니다. XE2 프로젝트는 해당 단위에서 몇 가지 경고만으로 컴파일됩니다. 경고가 내 실수를 말해주는 유일한 것입니다. – dummzeuch

+0

D2007 버전이 컴파일 될 수 있지만 런타임에 제대로 작동하지 않습니다. –

+0

FWIW, 당신은 그 이름으로 그 단위를 배포 할 수 없기 때문에 나는 그 단위의 이름을 개인적으로 바꿀 것이고, 나는 심지어 사용 된 클래스의 이름을 바꿀 것입니다. 일단 당신이 혼란을 피하기 위해 업그레이 드하십시오. David는 맞습니다. D2007 유닛을 사용하는 것은 좋은 생각이 아닙니다. 특히 유니 코드 이전 유닛이기 때문입니다. –

관련 문제