2012-01-14 46 views
1

前幾天我發現了本教程,並且我遵循了它。由於我只想從資源文件中加載文本,因此我只使用那些與我需要的相關的東西。代碼可以從教程中找到,可以找到here。注意:我使用的函數代碼來自GetResourceAsPointerGetResourceAsString。我有:從資源(.res)文件中加載文本

  • 創建了包含一個文本文件的資源文件。該文本文件包含「測試」
  • 包括{$ R resource.res}

注:我用了一份備忘錄,從資源加載的字符串。

該程序能夠編譯沒有任何錯誤,但當我點擊按鈕將字符串加載到備忘錄,一個字符串被加載,但不是「測試」。相反,我得到隨機字符,如方塊和中文字符。

有誰知道這個問題可能是什麼?有沒有人經歷過這個?

謝謝先進,彼得

回答

2

爲了從添加到EXE的資源中獲取文本,我使用以下兩個例程:一個例程用於ANSI字符串,另一個用於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 2012-01-15 10:23:39

+1

您在資源中使用的值。資源文件將如下所示:STRINGTABLE 1001,「無差別」 1002,「目標」 1003,「喜歡變化」 1004,「自主」 1005,「樂觀」}。爲了獲得字符串'Autonomous',你可以傳遞GetResString函數的值4和1(我爲不同的語言存儲字符串,後綴相同但前綴不同,也就是說,如果意大利語是語言2. – 2012-01-15 11:45:54

+0

迄今爲止,它的工作非常完美,謝謝。 – ple103 2012-01-16 03:35:01

1

在其編碼是你把資源的文本文件?如果是ANSI,請嘗試將其另存爲Unicode(GetResourceAsString,文章使用PChar類型)。

+0

編碼是ANSI。我將其更改爲Unicode並且它可以工作。非常感謝你! – ple103 2012-01-14 11:18:50

+0

我有一個奇怪的問題是squareqaurebracket總是出現在所有東西之後。 – ple103 2012-01-14 11:47:15

+0

你的意思是'['/']'?對不起,很難說這是什麼。 – Pol 2012-01-14 13:27:21