2016-06-15 8 views
1

私はコンポーネントを持っています。コンポーネントでは、動的なTImageListをロードする必要があります。他のプロジェクトにリソース(画像)をロード

私は今日この方法で使用しますが、私のすべてのプロジェクトでは、一度に1つずつすべてのイメージを追加する必要があります。

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ファイルを使用して.resファイルとbrccツールの作成:あなたがそれらのイメージを使用したいすべてのプロジェクトに同じ.resファイルを追加します

    brcc32 -fo output.res input.rc 
    
  2. を(プロジェクト>>プロジェクトに追加またはを編集して{R 'path/filename.res'}を追加してください。これらのすべてのプロジェクトに共通のユニットがある場合(そのコンポーネントがカスタムコンポーネントである場合)、.resファイルをそのユニットに追加すると、リソースがloaになりますすべての人に捧げます。

  3. それはあなたが.res.rc{$R 'output.res' 'input.rc'})の両方を指定して、リソースを追加する場合、Delphiはそれはそれを行うことを決定まさにとき、私は特定できませんでした(あなたのために自動的にリソースファイルをコンパイルしますが、場合になることも注目に値しますプロジェクトを数回コンパイルすると、リソースファイルも確実にコンパイルされます)。

サンプル.rcファイル:

IMAGE_1 BITMAP Path\Image1.bmp 

2番目のパラメータがResource-Definition Statementです。

もちろん、これらのイメージのいずれかが変更された場合は、.rcファイルを手動で再コンパイルする必要があります。

+0

完璧!ありがとう。 –

+1

リソースをコンパイルしてプロジェクトに追加すると、 'TImageList'にはリソースを読み込むためのいくつかのメソッド、' GetResource() '、' GetInstRes() '、' ResourceLoad() '、' ResInstLoad() 'があります。 –

関連する問題