2010-05-09 223 views
1

我有一個字符串,我需要訪問的第一個字符,所以我使用了stringname [1]。隨着unicode支持,這不再起作用。我得到一個錯誤:[DCC錯誤] sndkey32.pas(420):E2010不兼容的類型: '字符' 和 'ANSIChar類型'轉換德爾福7代碼與德爾福2009年工作

示例代碼:

 
//vkKeyScan from the windows unit 

var 
KeyString : String[20]; 
MKey : Word; 

mkey:=vkKeyScan(KeyString[1]) 

如何將我寫這篇文章的現代版本德爾福

回答

4

String[20]是一個長度爲20的ShortString,即一個包含20個字符的ShortString。但ShortStrings的行爲與AnsiStrings類似,即它們不是Unicode - 一個字符是一個字節。因此KeyString [1]是一個AnsiChar,而vkKeyScan函數需要一個WideChar(= Char)作爲參數。我真的不知道自己爲什麼要使用類型String[20]代替String(= UnicodeString),但你可以在屬於ANSIChar KeyString[1]轉換爲WideChar:

mkey := vkKeyScan(WideChar(KeyString[1])) 
0

關閉我的頭頂上:你真的需要一個字符串,這相當於德爾福2009年的寬字符串?

一個選項是定義 var KeyString:AnsiString;

然後當你把KeyString [1]這將是一個AnsiChar而不是一個字符。

+0

我做了最初的問題一個錯誤,有修復。我曾嘗試過AnsiString,但它似乎並不像KeyString:AnsiString [20];謝謝您的幫助。 – Brad 2010-05-09 20:45:15

+0

問題恰恰相反。 vkKeyScan函數*需要* WideChar!由於「[20]」部分,String [20]不是Unicode字符串,而是ShortString。 – 2010-05-09 21:21:35