2016-06-15 4 views
1

구성 요소가 있습니다. 구성 요소에서 동적 TImageList를로드해야합니다.더 많은 프로젝트에 자원 (이미지)로드

오늘 내가 사용하는이 방법은 모든 프로젝트에서 한 번에 하나씩 모든 이미지를 추가해야합니다.

function NavigatorImages: TImageList; 
var 
    vIcon: TBitmap; 
    I: Integer; 
begin 
    if FNavigatorImages = nil then 
    begin 
     vIcon := TBitmap.Create; 
     try 
     FNavigatorImages := TImageList.Create (nil); 
     FNavigatorImages.Height := 16; 
     FNavigatorImages.Width := 16; 
     for I := 0 to 11 do 
     begin 
      vIcon.LoadFromResourceName (HInstance, 'IMAGE_' + IntToStr(I)); 
      FNavigatorImages.AddMasked (vIcon, vIcon.Canvas.Pixels[0,  FNavigatorImages.Height - 1]); 
     end; 
     finally 
     vIcon.Free; 
     end; 
    end; 
    Result := FNavigatorImages; 
end; 

예를 들어 각 프로젝트의 리소스를 추가하지 않고 여러 이미지를 구성 요소에로드 할 수있는 단일 리소스 파일을 만드는 방법은 무엇입니까? 너는 어떤 방법이 있니?

답변

4

사용하려는 모든 프로젝트에 추가해야하지만 작업을 쉽게 할 수있는 방법이 있습니다.

  1. .rc 파일과 brcc 도구를 사용하여 .res 파일을 만듭니다 당신이 그 이미지를 사용하고자하는 모든 프로젝트에 동일한 .res 파일을 추가

    brcc32 -fo output.res input.rc 
    
  2. 을 (프로젝트 >> 프로젝트에 추가 또는 을 편집하여 {R 'path/filename.res'}을 추가하십시오.이 모든 프로젝트에 공통된 유닛이있는 경우 (해당 컴포넌트가 사용자 정의 컴포넌트 인 경우) .res 파일을 해당 유닛에 추가하면 리소스가 loa가됩니다 그들 모두에게 헌납한다.

  3. 은 주목할 가치가 당신이 모두 .res.rc ({$R 'output.res' 'input.rc'})는, 델파이 (내가 그렇게하기로 결정 때 정확히 결정, 그렇지 않은 경우 수 당신을 위해 자동으로 리소스 파일을 컴파일 지정 리소스를 추가하는 경우 프로젝트를 몇 번 컴파일하면 리소스 파일도 확실히 컴파일됩니다.)

샘플 .rc 파일 :

IMAGE_1 BITMAP Path\Image1.bmp 

번째 파라미터는 Resource-Definition Statement이다.

물론 이러한 이미지가 변경되면 .rc 파일을 수동으로 다시 컴파일해야합니다.

+0

완벽! 감사. –

+1

일단 리소스가 컴파일되고 프로젝트에 추가되면,'TImageList'는 리소스를로드하는 몇 가지 메소드 인'GetResource()','GetInstRes()','ResourceLoad()','ResInstLoad()'를 가지고 있습니다. –

관련 문제