各位大侠:
    如何动态的知道字符串的显示长度,不是字符串的长度!  label1.AutoSize:=false;
  label1.Alignment:=taCenter;
  label1.Caption:=p_string;
  label1.Font.Name:=p_FontName;
  label1.Font.Size:=p_FontSize
  label1.Width:=p_width;  label1.Caption, label1.Font.Name, label1.Font.Size都是动态从参数得到的,我现在要label1完整的显示出p_string,我该确定label1.Width,问题是我如何动态的根据字符的字体,字体大小来确定字符串的"显示长度"p_width?
  有没有什么函数?还是必须自己写函数?
                                     ---进步才是硬道理

解决方案 »

  1.   

    给你一个函数:
    ///////////////////////////////////////////////////////////////////
    // 作者:canan 日期:2002/11/27
    // 功能:根据字体设置已知字符串的显示宽度
    // 参数:AFont:字符串的Font
    //       AStr:字符串
    // 返回:象素值
    ///////////////////////////////////////////////////////////////////
    function GetTextWidth(AFont:TFont;AStr:string):Integer;
    begin
      try
        with TCanvas.Create do
          try
            Handle := GetDC(0);
            Font := AFont;
            Result := TextWidth(AStr);
          finally
            Free;
          end;
      except
        result := 0;
      end;
    end;
      

  2.   

    在Form上放个Label1,一个Button1,
    button 的Click中,试试以下代码:)procedure TForm1.Button1Click(Sender: TObject);
    var
      L, H: integer;
    begin
      Canvas.Brush.Style := bsClear;
      Canvas.Font.Assign(Label1.Font);
      L := Canvas.TextWidth(Label1.Caption);
      H := Canvas.TextHeight(Label1.Caption);
      canvas.Rectangle(Label1.Left, Label1.Top, Label1.Left + L,
        Label1.Top + H);
    end;
      

  3.   

    可以通过设置label控件的autosize属性为true即可。
      

  4.   

    你只要将LABEL的AUTOSIZE设为TRUE就可以了。我不知道你将AUTOSIZE设为FALSE的目的是什么
      

  5.   

    楼上2位回答得不错。基本上都需要用TextWidth只不过写得太麻烦了xx:= Label1.Canvas.TextWidth(Label1.Caption); 这个就行了, lable 自身从TWinControl继承的,有自己的Canvas.