iReplace = procedure (Text: PChar);
iReplace(Pchar('AA'))('AA');
下面是调用,中间的Pchar('AA')起什么作用?

解决方案 »

  1.   

    pchar()是强制类型转换,把一个字符串类型转换为字符串指针类型。
      

  2.   

    给个示例:
    如果你有个数据要从表中删除某人,你可以直接
    if Application.MessageBox('您确实要删除吗?','请确认',MB_YESNO+MB_IconQuestion+MB_DefButton2)=IDYes then
    ....
    ....如果你要把要删除的这个人的名字显示出来,假设这个名字要某个变量中,要把这个变量也显示,就用pchar()了if Application.MessageBox(pchar('您确实是要把 <'+mDep+'.'+mName+'> 从表中删除吗?  '),'请确认',MB_YESNO+MB_IconQuestion+MB_DefButton2)=IDYes then
    ...
    ...
      

  3.   

    还是没明白
    iReplace = procedure (Text: PChar);
    iReplace(Pchar('AA'))('AA');
    >>pchar()是强制类型转换,把一个字符串类型转换为字符串指针类型。这个我倒知道,我的意思是:
    按照常规的参数匹配的话,下面的函数应该是iReplace(Pchar('AA'))就行了
    可是如果这样的话说参数不足,所以我不理解了
    还请指教
      

  4.   

    Pchar('AA')是将pascal字符串强制转为以\0结束的字符串。windows用的字符串都是以\0结束的,所以很多API都要做这样的强制转换
      

  5.   

    iReplace = procedure (Text: PChar);  // 定义一个带一个参数的过程类型;也是一个函数接口;
    iReplace(Pchar('AA'))('AA');  //在这句代码里;iReplace(Pchar('AA'))整个是作为一个函数名存在的;其参数就是后面的('AA');
      

  6.   

    在一般概念上的过程调用时是这样定义的;
    type
    iReplace = procedure (Text: PChar);  //声明过程类型;
    var
      R:iReplace;        //相当于是R: procedure (Text: PChar); 将R声明为 
                             ireplace类型的变量;
      procedure replaceedit1(text: Pchar);
    begin
      edit1.text := text;
    end;{主程序}
    R:= replaceedit1;
    R('显示值');                 //相当于调用replaceedit1('显示值');