DigiPub Japan

.NETにおける組み込みリソース

【関連サイト】
【最近のページ】
【お知らせ】

.Net Frameworkにおける組み込みリソース



Delphiの場合、基本情報が欠落していても、たいがいの場合C#の関連情報を参照すれば、利用方法を把握したり、問題を解決することができることがあります。しかし、C#と記法・書式が異なる場合には、本来の記法・書式を発見するまで、多くの時間を要する場合があります。今回ご紹介する「.Net Frameworkにおける組み込みリソース」は、その典型的な例になるかもしれません。

今回は、Winフォームをターゲットにしていますので、RadStudio2007(Delphi2007)ではなく、BDS2006(Delphi2006)がベースとなります。


プログラムへのリソースの組み込み



Delphiの場合、従来リソースデータの組み込みは、プロジェクトにリソースファイルを組み込むだけで、簡単にできました。しかし、これがWin32でなく.Net Frameworkとなると、若干面倒になります。まず、プロジェクトに、「.resources」ファイルを追加する必要があります。BDS2006では、プロジェクト・ペインにおいて、プロジェクト名を右クリックし、「追加」でこの「.resources」ファイルを簡単に追加することができます。

ただし、この「.resources」ファイルは、バイナリ形式であり、その作成はツールを利用する必要があります。

リソースエディタは、多く公開されているようですが、「.resources」ファイル形式に保存できるものは、以下のものがあります。

Resourcer for .NET (http://www.lutzroeder.com/dotnet/)
Resourcer for .NET


このようなツールを利用し、「.resources」ファイルを作成し、これを上記のようにプロジェクトに追加し、コンパイルすると実行ファイル自体にリソースが組み込まれます。


プログラムからのリソースの抽出



次にこのリソースを抽出する方法ですが、これがC#と記法が異なります。

以下は、プロジェクトに"MyImage.resources"というリソースファイルが追加されており、そのファイルには、"Uml01.jpg"というイメージファイルが挿入されていることが想定されています。

*******************************************************
uses
System.Drawing,
System.Windows.Forms, System.Data,System.Resources,
System.IO,System.Reflection;

procedure TWinForm7.Button1_Click(sender: System.Object; e: System.EventArgs);
var
exeAsb:System.Reflection.Assembly;
str:Stream;
resname:String;
inp:Integer;
bm:System.Drawing.Bitmap;
rm:ResourceManager;
begin
exeAsb:= System.Reflection.Assembly.GetExecutingAssembly;

// rm := ResourceManager.Create(exeAsb.GetName.Name+'.MyImage',exeAsb);  C#の記法ではこのようになる

rm := ResourceManager.Create('MyImage',exeAsb);
bm := rm.GetObject('Uml01.jpg') as System.Drawing.Bitmap;
PictureBox1.Image := bm ;

end;

*******************************************************

上記のコメントのように、C#では名前空間を取得し、それをリソースファイルの拡張子を除いたものに付加する形になります。しかし、Delphi2006ではこのようにするとエラーが発生します。試行錯誤した結果、上記のように名前空間を付加せず、リソースファイルの拡張子を除いたものだけにすると、リソースを取得することがわかりました。


 
   Page: 660
Rss News
【お勧めページ】
【過去のページ】
<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789