• Delphi 7 升级到 Delphi 2010 总结


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

  • 相关阅读:
    [C#]MagicLibrary.dll控件的使用(一)(下拉菜单)
    [SQL server]查询用户表及表结构
    [ASP.net]ASP.net的RUL重写
    [C#]简单XP菜单的实现(一)
    [Javascript]IFRAME运用(1)
    [ASP.net]未解的疑惑!
    [乱七八糟]Google搜索使用详细
    [Javascript]IFRAME运用(2)
    [随文杂记]残局
    [CSS]RevealTrans 滤镜
  • 原文地址:https://www.cnblogs.com/tc310/p/4778708.html
Copyright © 2020-2023  润新知