2012-01-14 15 views
1

数日前にこのチュートリアルが見つかりました。私がリソースファイルからテキストをロードすることだけに興味があるので、私は必要なものに関連するものを使用しました。コードはチュートリアルから見つけることができますhere見つけることができます。注:私は関数のコードを使用していますGetResourceAsPointerGetResourceAsString。私は持っています:リソース(.res)ファイルからのテキストのロード

  • 1つのテキストファイルを含むリソースファイルを作成しました。テキストファイルには、「テスト」
  • が含まれています{$ Rのresource.res}

注含ま:私はリソースから文字列をロードするためにメモを使用しています。

プログラムはエラーなしでコンパイルすることができますが、ボタンをクリックしてメモに文字列をロードすると、文字列はロードされますが「テスト」ではロードされません。代わりに、私は四角形や中国語のようなランダムな文字を取得します。

誰でも問題の原因を知ることができますか?誰もこれを前に経験していますか?

ありがとう、Peter

答えて

2

EXEに追加されたリソースからテキストを取得するために、次の2つのルーチンを使用します。1つのルーチンはANSI文字列用であり、もう1つはUnicode文字列用です。あなたのランダムな文字は、必要以上に多くの文字を読むことが原因かもしれません。

Function GetResString (i, lang: integer): string; 
var 
buffer: array [0..400] of char; 
ls: integer; 

begin 
result:= ''; 
ls:= loadstring (hinstance, i + lang * 1000, buffer, sizeof (buffer)); 
if ls <> 0 then result:= buffer 
end; 

function LoadResW (id, lang: integer): WideString; 
const 
maxlength = 1024; 

var 
ls: integer; 

begin; 
setlength (result, maxlength); 
ls:= loadstringw (hinstance, lang * 1000 + id, 
pwidechar (result), length (result)); 
if ls > 0 
    then setlength (result, ls) 
    else result:= '' 
end; 
+0

コードを共有していただきありがとうございますが、リソースから文字列を読み込むためにはどのような値を使用する必要がありますか? – ple103

+1

リソースで使用した値。リソースファイルは次のようになります。STRINGTABLE { 1001、 "無関係" 1002、 "目的" 1003 "、" 1004 "、"自律 " 1005、"楽観的 "}が変更されます。 'Autonomous'という文字列を取得するには、GetResString関数に4と1の値を渡します(同じ接尾辞で異なる接頭辞を持つ異なる言語の文字列を格納します。つまり、イタリアの場合は2004年のエントリ "Autonomo"言語2 –

+0

完璧に動作しています。 – ple103

1

リソースに割り当てたテキストファイルはどのエンコードですか? ANSIの場合は、ユニコードとして保存してみてください(GetResourceAsString、記事使用PCharタイプ)。

+0

エンコードはANSIで行われました。私はそれをUnicodeに変更して動作させます。どうもありがとうございました! – ple103

+0

私が持っている奇妙な問題は、squaresqaurebracketが常にすべての後に現れることです。 – ple103

+0

'['/']'を意味しますか?申し訳ありませんが、これが何であるかは言い難いです。 – Pol

関連する問題