Delphi 7 升级到 Delphi 2010 总结
2015-09-02 15:22
211 查看
1 字符串
>>string =unicodeString 字母的处理要定义AnsiString了
>>PChar =PWidechar
>>str='普通汉字' str[1]='普',而不是str[1]+str[2]了
>>4字节的一个汉字,length=2,双字节的一个汉字,length=1
>>string 和 shorstring 不能直接赋值了。需要类型转换。
2 CharInSet
key in [ ] 要求替换为 CharInSet
3 canvas.StretchRect
canvas.StretchRect 多次画图,不能覆盖前一次画的图象,而是叠加在前一个图象上面。
临时处理:copyRect复制一个背景色过去,然后再画图
4 type record
可以使用property 可能D7也有。
5 webbrowser内容填充。使用流不好使了。汉字都变乱码了。用这个。
uses MSHTML,ActiveX,OleCtrls, SHDocVw;
procedure SetHtml2009(const WebBrowser: TWebBrowser; const Html: string);
var
htmDoc:IHTMLDocument2;
v:oleVariant;
begin
if
not Assigned(WebBrowser.Document) then Exit;
try
htmDoc:=WebBrowser.Document
as IHtmlDocument2;
v :=
VarArrayCreate([0,0], varVariant);
v[0]:=Html;
htmDoc.Write(PSafeArray(TVarData(v).VArray));
htmDoc.Close;
except
end;
end;
formCreate时,初始化webbrowser。若webbrowser是动态创建,创建之后初始化。代码如下:
var
v:oleVariant;
begin
//WebBrowser1:=TWebBrowser.Create(self.FOwnerForm);
//WebBrowser1.SetBounds(0,0,300,100);
//WebBrowser1.ParentWindow:=self.FOwnerForm.Handle;
v:='about:blank';
//初始化 WebBrowser1
WebBrowser1.Navigate2(v);
end;
在initialization和finalization部分处理OLE初始化
initialization
OleInitialize(nil);
finalization
try
OleUninitialize;
except
end;
在用到webbrowser的地方,定义好需要显示的HTML字符串后,就可以调用函数setHtml2009显示。如
procedure TForm1.Button1Click(Sender:TObject);
var
str:string;
begin
str:='<html><head>dd</head><body>here
is</body></html>';
SetHtml2009(WebBrowser1,str);
end;
6
ord 和 chr -------- 机内码和unicode-16的转化
ord('字') 得到的unicode-16的值, chr(56932)能直接得到一个汉字了。
2009下,机内码和unicode-16的转化,可以不使用widechartoString 等函数了。
//其中FC1 FC2 是机内码高字节和低字节,Funi 是unicode-16编码
//根据机内码计算unicode编码,
procedure
SetUnicode;
var
xx:AnsiString;
xx2:string;
begin
xx:=AnsiChar(chr(FC1))+AnsiChar(chr(FC2));
//强制转换
xx2:=string(xx);
//强制转换
self.Funi:=ord(xx2[1]);
end;
//根据unicode编码计算机内码, 其中procedure
THanCode.SetFc12;
var
xx:AnsiString;
xx2:string;
begin
xx2:=chr(Funi);
//2009 chr直接得到汉字 unicodestring
xx:=AnsiString(xx2);
//强制转换
FC1:=ord(xx[1]);
//按照单字节计算。
FC2:=ord(xx[2]);
end;
Key in ['a'..'z','B','C']
这类代码最好替换成CharInSet(Key,['a'..'z','B','C']) 不然会当作AnsiChar处理。
WideString
代码中的所有WideString都考虑替换成String,现在 WideString只是为了与COM兼容而存在,且没有引用计数,性能低下
>>string =unicodeString 字母的处理要定义AnsiString了
>>PChar =PWidechar
>>str='普通汉字' str[1]='普',而不是str[1]+str[2]了
>>4字节的一个汉字,length=2,双字节的一个汉字,length=1
>>string 和 shorstring 不能直接赋值了。需要类型转换。
2 CharInSet
key in [ ] 要求替换为 CharInSet
3 canvas.StretchRect
canvas.StretchRect 多次画图,不能覆盖前一次画的图象,而是叠加在前一个图象上面。
临时处理:copyRect复制一个背景色过去,然后再画图
4 type record
可以使用property 可能D7也有。
5 webbrowser内容填充。使用流不好使了。汉字都变乱码了。用这个。
uses MSHTML,ActiveX,OleCtrls, SHDocVw;
procedure SetHtml2009(const WebBrowser: TWebBrowser; const Html: string);
var
htmDoc:IHTMLDocument2;
v:oleVariant;
begin
if
not Assigned(WebBrowser.Document) then Exit;
try
htmDoc:=WebBrowser.Document
as IHtmlDocument2;
v :=
VarArrayCreate([0,0], varVariant);
v[0]:=Html;
htmDoc.Write(PSafeArray(TVarData(v).VArray));
htmDoc.Close;
except
end;
end;
formCreate时,初始化webbrowser。若webbrowser是动态创建,创建之后初始化。代码如下:
var
v:oleVariant;
begin
//WebBrowser1:=TWebBrowser.Create(self.FOwnerForm);
//WebBrowser1.SetBounds(0,0,300,100);
//WebBrowser1.ParentWindow:=self.FOwnerForm.Handle;
v:='about:blank';
//初始化 WebBrowser1
WebBrowser1.Navigate2(v);
end;
在initialization和finalization部分处理OLE初始化
initialization
OleInitialize(nil);
finalization
try
OleUninitialize;
except
end;
在用到webbrowser的地方,定义好需要显示的HTML字符串后,就可以调用函数setHtml2009显示。如
procedure TForm1.Button1Click(Sender:TObject);
var
str:string;
begin
str:='<html><head>dd</head><body>here
is</body></html>';
SetHtml2009(WebBrowser1,str);
end;
6
ord 和 chr -------- 机内码和unicode-16的转化
ord('字') 得到的unicode-16的值, chr(56932)能直接得到一个汉字了。
2009下,机内码和unicode-16的转化,可以不使用widechartoString 等函数了。
//其中FC1 FC2 是机内码高字节和低字节,Funi 是unicode-16编码
//根据机内码计算unicode编码,
procedure
SetUnicode;
var
xx:AnsiString;
xx2:string;
begin
xx:=AnsiChar(chr(FC1))+AnsiChar(chr(FC2));
//强制转换
xx2:=string(xx);
//强制转换
self.Funi:=ord(xx2[1]);
end;
//根据unicode编码计算机内码, 其中procedure
THanCode.SetFc12;
var
xx:AnsiString;
xx2:string;
begin
xx2:=chr(Funi);
//2009 chr直接得到汉字 unicodestring
xx:=AnsiString(xx2);
//强制转换
FC1:=ord(xx[1]);
//按照单字节计算。
FC2:=ord(xx[2]);
end;
Key in ['a'..'z','B','C']
这类代码最好替换成CharInSet(Key,['a'..'z','B','C']) 不然会当作AnsiChar处理。
WideString
代码中的所有WideString都考虑替换成String,现在 WideString只是为了与COM兼容而存在,且没有引用计数,性能低下
相关文章推荐
- Delphi2010下的FillChar
- delphi随机数种子
- devmemdata.loadfromstream使用方法
- Delphi 接口机制真相
- Delphi 获取安卓手机WIFI信息(XE8)
- Delphi 10 Seattle Update1下载破解激活
- delphi 各新版本特性收集
- Delphi 文件处理
- 转。。原理同样支持 delphi
- Delphi中Chrome Chromium、Cef3学习笔记(四)
- TThreadList的用法
- delphi声明类及其调用方法
- delphi 窗体的创建和释放
- 曾经用Delphi写的一个上位机
- 使用SetWindowPos API函数移动窗口后,还需修改Delphi的属性值,以备下次使用,否则就会出问题(不是API不起作用,而是使用了错误的坐标值)
- Delphi调用WINAPI时到底应该是指针还是结构体(注意是Delphi变量本身就是指针)
- Delphi的字符串与16进制的相互转换函数的汇编代码
- delphi的取整函数round、trunc、ceil和floor
- Delphi判断文件是否正在被使用(CreateFile也可以只是为了读取数据,而不是创建)
- Delphi 的运算符列表,运算符及优先级表格 good