テキストファイルをリソースに入れたい

解決


たかみちえ  URL  2002-08-07 22:15:35  No: 1212  IP: [192.*.*.*]

長い文章をリソースに組み込むときなど、
resourcestringでは足りないときに、テキストファイルそのものをリソースに入れることはできるでしょうか?

  VBではたしか、カスタムリソースとして、バイナリファイル扱いで入れることができたんですけど、
Delphiでもそういうことはできますか?
また、できるとしたら、いいツールとかはないでしょうか?

編集    削除
にしの  2002-08-07 23:21:29  No: 1213  IP: [192.*.*.*]

CUIのBRCC32を使って、リソースファイルをコンパイルできます。
あとは{$R 上で作ったリソースファイル名.RES}
として、リソースを読み込むAPIで読み込んで使います。

編集    削除
たかみちえ  URL  2002-08-08 02:32:35  No: 1214  IP: [192.*.*.*]

ええと、大体はわかりました。
けど、リソースを呼び出すAPIとはどれですか?

  ところで、コンパイルはプロジェクトのものと一緒にやってくれるのでは?
自分でリソースを追加したことはないのでわかりませんけど、
rcファイルのままではだめなんですか?

編集    削除
にしの  2002-08-08 03:34:53  No: 1215  IP: [192.*.*.*]

もしかしたら、.rcファイルをプロジェクトに追加するだけでいいのかもしれません。
# 追加時の「ファイルの種類」にあった気がする

APIは、
EnumResource, FindResource, LoadResource, FreeResource
などです。

呼び出しはこんな感じになります。

var
  hRes: THandle;
  hMem: HGLOBAL;
begin
  hRes  := FindResource(hInstance, 'test', RT_RCDATA);
  hMem := LoadResource(hInstance, hRes);
  Memo1.Lines.Text := string(PChar(hMem));
  FreeResource(hRes);
end;

これでMemo1に、リソースのRCDATA "test"が読み込めます。
"test"がない場合のエラー処理などはないので、適当に追加してください。

編集    削除
たかみちえ  URL  2002-08-08 07:14:58  No: 1216  IP: [192.*.*.*]

ありがとうございます。早速試してみます。

  今どうもほかのところでトラブルが起きていて試せないんですけど、
確認したら書きます。

  それから、どうやらrcファイルのままでもいいようです。
"プロジェクトにファイルを追加"で、rcファイルを追加すると、
rcファイルをresファイルにコンパイルするように記述しているようです。

編集    削除
たかみちえ  URL  2002-08-08 22:43:22  No: 1217  IP: [192.*.*.*]

うーん…。それが原因か、

プロジェクト MuseAssistantAlpha.exe が EReadError クラスの例外を生成しました。
'ストリームからの ImageList データの読み込みに失敗しました'

  なんてエラーが、実行時にだけ発生するんです。
リソースエディタで実行ファイルをのぞいてみても、特に問題はないんですけど…。

  アドバイスお願いできませんか?

編集    削除
にしの  2002-08-08 23:08:19  No: 1218  IP: [192.*.*.*]

リソースを組み込む順番を変えてみてはどうですか?
プロジェクトソースに並んでいる順番を変えてみるとか、リソースの名前を変更してみるとか。

編集    削除
たかみちえ  URL  2002-08-08 23:46:42  No: 1219  IP: [192.*.*.*]

> リソースを組み込む順番を変えてみてはどうですか?
  だめでした…。

{%File 'Script\Refalance.txt'}
{%File 'Template.txt'}
{$R *.res}
{$R 'custom.res' 'custom.rc'}
  を
{$R 'custom.res' 'custom.rc'}
{$R *.res}
  こうしたり、files.rcと変えてみたりしたんですけど、
Application.CreateForm の行でおなじエラーになります。

  よくみると、ImageListの中身が、リソースエディタを見つからなかったんですけど、
それも、ここにあるTokikazeで、"Pictureオブジェクトから〜"にありました。


  そういえば忘れてましたけど、今の作業環境は
WindowsXP Home  Delphi6Personal(Windows2000互換モード)です。
これとなにか関係あるんでしょうか?

  正常なexeファイルと見比べると、
imagelistの絵の並び順が違ったような…。
(正常なのは横に4つずつ、表のように並べているのに対して、
  これは横には並べず、1つずつ縦に並べてました)

編集    削除
にしの  2002-08-09 01:34:00  No: 1220  IP: [192.*.*.*]

TImageListの中身は、Delphi標準の方法でリソースに入ってると言うことでしょうか。
ふつうにLoadResource, LockResourceして、それをLoadFromResourceIDメソッドでTImageListに登録してみてはどうですか?

編集    削除
たかみちえ  URL  2002-08-09 01:49:33  No: 1221  IP: [192.*.*.*]

> TImageListの中身は、Delphi標準の方法でリソースに入ってると言うことでしょうか。
  うーん…。
>imagelistの絵の並び順が違ったような…。
  ということで、ほんとに標準…というわけでもない気がしますが…。

  具体的に言うと、こうなっているのです。
○正常のリソース
  1234
  5678
  9101112
  ……
○エラーの起こったりソース
  1
  2
  3
  4
  5
  …
  …


  新しくリソースを追加したのが原因ではないような気がします。
もっといろいろ探して回ったほうがいいかもしれませんね…。

編集    削除
たかみちえ  URL  2002-08-23 02:37:37  No: 1222  IP: [192.*.*.*]

ううーん、このままではお礼もしないまま流れていってしまいそうなので、
とりあえずテキストのリソース組み込みだけはできました。ありがとうございます。
ImageListがおかしいのはかわらずですから、実行はできないのですけど。

編集    削除