有这样一个问题,请会的朋友帮忙:
   form1中有一个label控件,高与宽固定,比如是500*800(多少都无所谓),现在需要向label的caption中填充文本,但每次填充的文本长度不一样,有多有少,我希望无论字多字少,都能填满label区域,也就是如果字较少的话,让字体尽量的大,如果字较多的话,让字体在尽可能大的情况下能全部在label中显示全,请会的朋友帮帮忙呀!

解决方案 »

  1.   

    好像autosize不好用,只能手动调。
      

  2.   

    参考如下代码:
    procedure AdjustFontSize(ALabel: TLabel);
    var
      i: Integer;
      R: TRect;
      C: TCanvas;
    const
      FSizes: array[0..15] of Integer =
        (8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72);
    begin
      C := TCanvas.Create;
      try
        C.Handle := GetDC(ALabel.Parent.Handle);
        for i := 0 to 15 do
        begin
          C.Font.Size := FSizes[i];
          DrawText(C.Handle, PChar(ALabel.Caption), -1, R, DT_CALCRECT);
          if (R.Right - R.Left > ALabel.Width)
            or (R.Bottom - R.Top > ALabel.Height) then
            Break;
        end;
        if i = 0 then
          ALabel.Font.Size := FSizes[i]
        else
          ALabel.Font.Size := FSizes[i - 1]
      finally
        C.Free;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      AdjustFontSize(Label1);
    end;
      

  3.   

    linzhengqun:首先感谢您的热情帮助,但我仔细阅读了一下您给的程序,有一个问题您没考虑!
    这是我设置label的WordWrap为true,也就是说当label的caption内容很多时,会自动换行,而您的程序没有考虑到这一点。您还有好方法帮我解决这个问题吗?
    也请其他会的高手支一招,感激不尽!
      

  4.   

    自写一个函数,读取现在屏幕的分辨率,然后根据分辨率自动调节WIDTH和HEIGTH(乘百分比),要注意AUTOSIZE要设为FALSE.