AnsiString ,String的问题,delphi2010,大家都碰得到的,讨论一下吧。

haochin 2010-04-13 07:01:00

procedure TCamera_F.btn1Click(Sender: TObject);
var
PhotoName : string;
begin
PhotoName := 'D:\我的相片\1.BMP'
if hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, LongInt(PAnsiChar(PhotoName)));
end;
end;


如果photoname 为delphi2010中的string类型,也就是widestring类型的话,sendmessage最后一个参数值是 'D',显然是是错的。
如果photoname 为ansistring,sendmassage最后一个参数值是正确的(''D:\我的相片\1.BMP')


可是用ansistring的话,会涉及到多语言的问题,意思就是说如果photoname里含有中文简体汉字,那么在繁体系统里就会出问题了。

有什么好办法呢,既可以使用WideString,又让sendmessage的最后一个参数得到正确的结果。。。

老实说,,符类型对于我们这些非科班出身的人来说真是一个不小的问题啊。。。

...全文
284 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨笨 2011-01-24
  • 打赏
  • 举报
回复
郁闷,还需要恢复才能看到哦啊呀.
kfcoffe 2010-04-14
  • 打赏
  • 举报
回复
记得在哪看见lz问过这个问题,呵呵~
mynameis_007 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 keiy 的回复:]
跟系统有关的,对你的程序,如果你要在不同的系统下工作,必须写不同PhotoName,(当然你也可以做一个程序,先判一下系统支持字符集,再将你的PhotoName转成该字符集,但很少有程序这样做),一般的做法是,将不同字符集的PhotoName写入资源文件,然后,运行时按不同系统载入
[/Quote]
truelove7283159 2010-04-14
  • 打赏
  • 举报
回复
你2010了,干脆都UNICODE好了.
柯本 2010-04-14
  • 打赏
  • 举报
回复
跟系统有关的,对你的程序,如果你要在不同的系统下工作,必须写不同PhotoName,(当然你也可以做一个程序,先判一下系统支持字符集,再将你的PhotoName转成该字符集,但很少有程序这样做),一般的做法是,将不同字符集的PhotoName写入资源文件,然后,运行时按不同系统载入
金卯刀 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ysai 的回复:]

支持WideString与否,并不在于你的发送程序,而在于接收的程序
[/Quote]

樓主要看這句話
haochin 2010-04-14
  • 打赏
  • 举报
回复
顶上去。。。
ysai 2010-04-13
  • 打赏
  • 举报
回复
支持WideString与否,并不在于你的发送程序,而在于接收的程序
  • 打赏
  • 举报
回复
可是用ansistring的话,会涉及到多语言的问题,意思就是说如果photoname里含有中文简体汉字,那么在繁体系统里就会出问题了。

不会吧,如果是这样的话那delphi简体版中有繁体字那不乱套了?
还有个问题就是发送消息应该是系统级了,为什么不用系统类型,就是pchar
haochin 2010-04-13
  • 打赏
  • 举报
回复
顶上去。。。。。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧