代码在下面,在Delphi7里是完全没有问题的,但把代码移植到2009后,发现DrawText的中文会出现乱码,而如果没有中文只有英文和数字,则只显示第一个字符,请问这是怎么回事?如何解决??procedure TfrmSick.stringgridInfoDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
    r:TRect;
    a:TGridRect;
begin
    with  TStringGrid(Sender).Canvas   do
    begin
      if ((ARow=TStringGrid(Sender).Row)) then begin
        Brush.Color := $00FAE2C0;
        FillRect(rect);
        SetRect(r,Rect.Left+2,Rect.Top+4,Rect.Right,Rect.Bottom);
        Font.Color:=clBlack;
        DrawText(Handle,PAnsiChar(TStringGrid(Sender).Cols[acol][arow]),-1,R,DT_LEFT or DT_WORD_ELLIPSIS);
      end;
    end;  
end;

解决方案 »

  1.   


    drawtext是windowsapi呀,跟踪不进去
      

  2.   

    发现DrawText的中文会出现乱码那你的这个开发环境:DELPHI7和DELPHI2009都在一台电脑上吗
    我只是说有可能是开发环境的问题的
      

  3.   


    我的系统是windows7 64位旗舰版,没有安装delphi7,只装了delphi2009。delphi7装在笔记本上的
      

  4.   


    我本是32位win7 ,刚才试了也是一样,唉
      

  5.   

    那就建议你还是在网上查找一下这个DrawText在DELPHI中应该时的基本参数的
      

  6.   

    你先要确定PAnsiChar(TStringGrid(Sender).Cols[acol][arow])得到的是正确的结果,D7是ansi D2009是 unicode,一般处理不对就是乱码。
      

  7.   


    是吗?我用showmessage(PAnsiChar(TStringGrid(Sender).Cols[acol][arow]));是能显示的,但draw出来的就不对了,请教如何处理?
      

  8.   

    解决了
    DrawText(Handle,PAnsiChar(AnsiString(TStringGrid(Sender).Cols[acol][arow])),-1,R,DT_LEFT or DT_WORD_ELLIPSIS);多谢sailxia