您的位置:首页 > 编程语言 > Delphi

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兼容而存在,且没有引用计数,性能低下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: