procedure TForm1.Button1Click(Sender: TObject);
var
  MyBuffer:Pchar;
  MyBufSize:Integer;
begin
//Form1.SetBounds(20,20,20,20);
         MyBufSize:=Button1.GetTextLen;
         Button1.GetTextBuf(MyBuffer,MyBufSize);//执行时出错。Why????
         StatusBar1.SetTextBuf(MyBuffer);
end;

解决方案 »

  1.   

    因为你没给MyBuffer分配空间。GetTextBuf不会自动给那个缓冲区分配空间的,要求用户事先分好。解决办法:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    MyBuffer:Pchar;
    MyBufSize:Integer;
    begin
    //Form1.SetBounds(20,20,20,20);
    MyBufSize:=Button1.GetTextLen;GetMem(MyBuffer,MyBufSize+1); //给MyBuffer分配空间Button1.GetTextBuf(MyBuffer,MyBufSize);//执行时出错。Why????
    StatusBar1.SetTextBuf(MyBuffer);FreeMem(MyBuffer, MyBufSize+1);{Frees memory allocated to MyBuffer}end;