2013-10-20 3 views
0

커스텀 res 파일 "myres.res"가 있습니다. 내 응용 프로그램에서 사용하는이 순간에 DPR 프로젝트 파일의 {$ R * .res} 줄 아래에 {$ R myres.res}를 추가하면 제대로 작동합니다.델파이 코드로 리소스 파일 추가

이제 creare에 부울 속성 인 "UseCustomRes"가있는 VCL 구성 요소를 사용하고 싶습니다. UseCustomRes = True로 설정하면 프로젝트를 컴파일 할 때 res 파일을 추가하고 싶지만 UseCustomRes = False로 설정하면 프로젝트를 컴파일 할 때 res 파일을 사용하고 싶지 않습니다.

이것이 가능합니까? 가능한지, 어떻게 가능할 지 모르겠습니다. 당신은 당신이 항상 그것을 컴파일해야합니다 런타임 변수에 따라 자원을 (여부를) 사용하려면

+0

모든 데이터를 DFM 파일/리소스의 일부로 유지할 수있는 구성 요소를 만들 수 있습니다. 또는 이미 존재하는 것을 가져 가십시오. –

답변

3

자원을 기반으로 링커으로 포함되어 특별한 $ RESOURCE 지시어가있을 때. 이러한 지시문은 객체 인스턴스의 속성 값을 기반으로 전환 할 수 없습니다.

그래서 도구가 내장되어 있으므로 원하는 것을 얻을 수 있습니다. 필요한 경우 자원을 추가하여 출력 파일을 수정하는 사후 빌드 단계를 추가해야합니다. 정확하게 이것을 수행하는 도구의 좋은 예는 madExcept입니다.

2

그렇지 않으면 당신은 그것을 사용하는 옵션을 잃게됩니다, 런타임
에서 자원을 따기 실행 시간.

실행 중에는 TResourceStream을 사용하여 리소스에 액세스 할 수 있습니다.

procedure ExtractResource; 
var 
    rs: TResourceStream; 
begin 
    rs:= TResourceStream.Create(HInstance, 'NameOfResource', RT_RCDATA); 
    try 
    rs.Position:= 0; 
    rs.DoSomethingWithTheResource... 
    finally 
    rs.Free; 
    end; 
end; 

여기 온라인 도움말입니다 : 여기

은 예입니다 TResourceStream에 대한 도움말 항목이 약간 파손 된 것으로 http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TResourceStream
참고; 모든 방법을 보여주지는 않습니다.
누락 된 방법은 여기에 있습니다 : http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TStream_Methods

{$R *.res} 라인은 현재 디렉토리에있는 .RES 파일을 포함
참고 컴파일시에 자원을 따기.
특정 .res 파일을 선택하려면이 줄을 제외해야합니다.
조건부 컴파일이과 같이, defines을 사용하여 수행됩니다 :

implementation 
    {.R *.res} //disable the *.res inclusion. 
    {$IFDEF GetMyResource} 
    {$R MyResource.res} //will only be compiled if `GetMyResource` is defined 
    {$ENDIF} 
    {$R AlwaysIncludeThisResource.res} //will always be included. 

당신은 다음 조건을 정의의 상징 GetMyResource을 정의 프로젝트 옵션에서 여기를 참조 : https://stackoverflow.com/a/4530320/650492