Delphi7にて、
テキストファイルをコンパイル時に実行ファイルに埋め込んで、
実行時に埋め込んだ内容を呼び出そうとしていますが、
うまく出来ず、行き詰まっています。
どなたかアドバイスお願い致します。
状況
1.テキストファイル「temp.txt」をdprと同じフォルダ下に置いた。
2.テキストエディタで「MyRes.rc」を作成した。
内容は、MyText TEXT "temp.txt"
3.プロジェクトに追加にて、rcファイルを追加した。
4.下記のコードを書き込んだ
Memo1.Clear;
RS := TResourceStream.Create(hInstance,'MyText','TEXT');
try
Memo1.Lines.LoadFromStream(RS);
finally
RS.Free;
end;
5.実行すると、Memo1 には、・・・W と表示されるだけで、
埋め込んだテキストファイルの内容が表示されない。
どうぞ、よろしくお願いいたします。
ShiftJISなの?
Unicodeだったりして。
ご指摘のように、テキストファイルがUnicodeでしたので、
試しにShiftJISテキストでやってみた所、正常に動いてくれました。
ただ、埋め込み及び(最終的には)ファイル保存したいテキストファイルは、
どうしても、Unicodeでなければなりません。
何か、良い手は無いでしょうか・・・。
真琴:「"何か、良い手は?"って聞いてるけど、"悪い手"でなければ"普通の手"でもイイんじゃない?」
// ShiftJISの場合
Memo1.Lines.LoadFromStream(RS);
// Unicodeの場合
Memo1.Text := WideCharToString(PWideChar(RS.Memory)+1); // BOM付なら+1、BOMなしなら+0
春子:「ん? "良い手、悪い手、普通の手"? …そういえば、子供の頃、"欽ドン!良い子悪い子普通の子"っていうTV番組があってね、それ面白かったなぁ」
真琴:「え? ハルコさん、それって、アタシが生まれる前の番組?」
春子:「あ…そっかぁ、マコトはその時まだ生まれてないのかぁ…ちょっとショック」
解決手段は幾らでもあります。
いちばん簡単なのはUNICODE標準Delphi2009以降を使う。
金をかけないで楽するならTNT wareのTNTStringListを使う。
自力でやるならTStringListのまねをStringでなくWideStringで行うです。
正直自力でやってもそんなに難しい作業ではありません、
TMemoryStreamを使ってリソースを読み込み、WideStringに放り込めばいいだけです。
ありがとうございました。
WideCharToStringで無事表示されました。
せっかくなので後ほど、TNTStringListも試してみようと思います。
最終的にはUnicodeのテキストファイルに保存したいので、
どうすれば良いのか今から勉強しますが、どうしても行き詰まった時には、
皆さま、また、よろしくお願いいたします。
ありがとうございました。
ツイート | ![]() |