1字符串
>>string=unicodeString字母的處理要定義AnsiString了
>>PChar=PWidechar
>>str='普通漢字'str[1]='普',而不是str[1]+str[2]了
>>4字節(jié)的一個(gè)漢字,length=2,雙字節(jié)的一個(gè)漢字,length=1
>>string和 shorstring 不能直接賦值了。需要類型轉(zhuǎn)換。
2CharInSet
key in []要求替換為 CharInSet
3canvas.StretchRect
canvas.StretchRect多次畫圖,不能覆蓋前一次畫的圖象,而是疊加在前一個(gè)圖象上面。
臨時(shí)處理:copyRect復(fù)制一個(gè)背景色過去,然后再畫圖
4 typerecord
可以使用property可能D7也有。
5webbrowser內(nèi)容填充。使用流不好使了。漢字都變亂碼了。用這個(gè)。
usesMSHTML,ActiveX,OleCtrls,SHDocVw;
procedureSetHtml2009(constWebBrowser: 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時(shí),初始化webbrowser。若webbrowser是動(dòng)態(tài)創(chuàng)建,創(chuàng)建之后初始化。代碼如下:
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字符串后,就可以調(diào)用函數(shù)setHtml2009顯示。如
procedure TForm1.Button1Click(Sender:TObject);
var
str:string;
begin
str:='<html><head>dd</head><body>hereis</body></html>';
SetHtml2009(WebBrowser1,str);
end;
6 ord 和chr -------- 機(jī)內(nèi)碼和unicode-16的轉(zhuǎn)化
ord('字')得到的unicode-16的值, chr(56932)能直接得到一個(gè)漢字了。
2009下,機(jī)內(nèi)碼和unicode-16的轉(zhuǎn)化,可以不使用widechartoString等函數(shù)了。
//其中FC1 FC2 是機(jī)內(nèi)碼高字節(jié)和低字節(jié),F(xiàn)uni是unicode-16編碼
//根據(jù)機(jī)內(nèi)碼計(jì)算unicode編碼,
procedure SetUnicode;
var
xx:AnsiString;
xx2:string;
begin
xx:=AnsiChar(chr(FC1))+AnsiChar(chr(FC2)); //強(qiáng)制轉(zhuǎn)換
xx2:=string(xx);//強(qiáng)制轉(zhuǎn)換
self.Funi:=ord(xx2[1]);
end;
//根據(jù)unicode編碼計(jì)算機(jī)內(nèi)碼, 其中procedure THanCode.SetFc12;
var
xx:AnsiString;
xx2:string;
begin
xx2:=chr(Funi);//2009 chr直接得到漢字 unicodestring
xx:=AnsiString(xx2); //強(qiáng)制轉(zhuǎn)換
FC1:=ord(xx[1]);//按照單字節(jié)計(jì)算。
FC2:=ord(xx[2]);
end;
Key in['a'..'z','B','C']
這類代碼最好替換成CharInSet(Key,['a'..'z','B','C'])不然會(huì)當(dāng)作AnsiChar處理。
WideString
代碼中的所有WideString都考慮替換成String,現(xiàn)在WideString只是為了與COM兼容而存在,且沒有引用計(jì)數(shù),性能低下
愛華網(wǎng)



