请问一下为什么(英文+中文)字间隔就不对不齐?
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
DrawStyle: Integer;
MyRect: TRect;
begin
MyRect:=label1.Canvas.ClipRect;
str := 'abcde1111';
DrawStyle := DT_EXPANDTABS or DT_CENTER or DT_VCENTER;
SetTextCharacterExtra(label1.Canvas.Handle, 10);
DrawText(label1.Canvas.Handle, PansiChar(str), Length(str),MyRect, DrawStyle);
end;

解决方案 »

  1.   

    如果一定要等宽字体,那用以下为什么又不行???。
    procedure TForm1.FormPaint(Sender: TObject);
    const
      str = 'Delphi123';
    //  arr: array[0..7] of Integer = (10,10,10,10,10,10,10,10);//用这个可以
    var
      MyRect: TRect;
      arr: array of Integer;
      i:integer;
    begin
      SetLength(arr, Length(str)-1);
      for i := 0 to Length(str) - 1 do//改用这个就不行??????
       arr[i]:=10;
      MyRect := Rect(10,10,200,200);
      ExtTextOut(Canvas.Handle, 50, 50, ETO_CLIPPED, @MyRect, str, Length(str), @arr);
    end;