2010-05-09 221 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