Delphi 7 升级到 Delphi 2010 总结

摘要:
1.字符串˃˃string=unicodeString字母的处理需要定义AnsiString˃˃PChar=PWidechar˃˃str='common Chinese character'str[1]='common',而不是str[1]+str[2],一个大于4字节、长度=2的汉字,一个双字节、长度=1的汉字˃˃字符串和字符串不能直接赋值。使用SHTML、ActiveX、OleCtrls、SHDocVw;程序SetHtml2009;varhtmDoc:IHTMLDocument2;v: 油变体;退出时未分配开始;tryhtmDoc:=WebBrowser.DocumentasIHtmlDocument2;v: =VarArrayCreate;v[0]:=Html;htmDoc.Write;htmDoc.关闭;超越;终止表单创建时,初始化Web浏览器。如果Web浏览器是动态创建的,则在创建后将对其进行初始化。例如,processTForm1.Button1Click;varstr:string;beginstr:='ddhereis';SetHtml2009;终止6ord和chr------通过内部代码和unicode-16单词('word')的转换获得的unicode-16的值,chr可以直接获得一个汉字//FC1FC2是内部代码的高字节和低字节,Funi是unicode-16代码//unicode代码根据内部代码和过程SetUnicode计算;varxx:AnsiString;xx2:字符串;beginxx:=AnsiChar+AnsiChar;//强制转换xx2:=string//强制转换自身。Funi:=单词;结束;//根据unicode对计算机的内部代码进行编码,其中procedureThanCode.SetFc12;varxx:AnsiString;xx2:字符串;beginxx2:=chr;//2009chr直接获得了汉字unicode stringxx:=AnsiString//强制转换FC1:=ord//计算为单个字节。

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兼容而存在,且没有引用计数,性能低下

免责声明:文章转载自《Delphi 7 升级到 Delphi 2010 总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇为枚举类型添加描述信息 this 扩展 泛型约束 位运算[转]windows手动安装npm教程 即vue下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何自定义MVC控件?

今天公司要写学习总结,想着想着还是先写一篇关于MVC内部什么东东的博客整理整理再发表吧,一举两得。 之前写过了路由、过滤器等。今天就研究一下怎么自定义MVC控件吧。 本人技术小菜,不喜勿喷。。。。。(说这句话通常有两种情况,一种是牛人谦虚的说法,一种是怕受伤害提前准备个挡箭牌) 首先我们先去熟知一下MVC内部的那些控件是怎么实现的。 首先,Input标签是...

MiniJson解释Json字符串

在做项目时,分别用到这两种json数据,首先download一个minijson程序集吧,下面重点说下处理的方法。 1,{"result":1,"playerRank":2,"item":{"item1":1001,"item2":0,"item3":3,"item4":4}} IEnumerator GetLoginData(string url) {...

delphi 对应 c# 的一些函数及类型的转换方法【原】

例一 实现目的:将字符串中每一个字符转成二进制(比如 'Data' 中的 D 转成 00100010 ,整个就是 00100010100001100010111010000110) 处理逻辑:string result = StrToByte("Data"); result结果是00100010100001100010111010000110   1、实际...

解决Flink消费Kafka信息,结果存储在Mysql的重复消费问题

背景 最近项目中使用Flink消费kafka消息,并将消费的消息存储到mysql中,看似一个很简单的需求,在网上也有很多flink消费kafka的例子,但看了一圈也没看到能解决重复消费的问题的文章,于是在flink官网中搜索此类场景的处理方式,发现官网也没有实现flink到mysql的Exactly-Once例子,但是官网却有类似的例子来解决端到端的仅一...

MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer

mysql> select -> sum(case when score<60 then 1 else 0 end) as '<60', -> sum(case when score>=60 and score<=69 then 1 else 0 end) as '60~69', -&...

关于mybatis使用foreach插入速度较慢的问题

使用mybatis批量插入,看了这篇博客 https://blog.csdn.net/m0_37981235/article/details/79131493 我这种懒货懒得想其中原因,直接上手第三种! 结果测试多次,发现我插入8000条数据,第一种方式只需要30秒不到,可是第三种方法却需要一分多钟。 不知道原作者是怎么实现的,可能和插入数据的多少有关,...