问题描述:
我的Panel为自动生成,能自动调整Width,Height,Font.Size Caption中显示的字符有多有少,有时Caption中字符过多,则不能完全一行显示出来,我不希望它换行再显示,如果不能完全一行显示出来,则调整当前Panel的字体大小,其它Panel的字体大小不变.直到完全显示出来.

解决方案 »

  1.   

    你可以这样计算一下:Canvas.Font设置为你现在使用的Font(assign一下),然后计算canvas.TextWidth,然后你要输出的字超长,你就可用调整一下Font的size,然后在重新计算一下textwidth,直到合适的大小为止。
      

  2.   

    Width,Height,Font.Size 在一定值下调整某个Panel的字体大小.
      

  3.   

    你可以用Form的canvas来计算TextWidth的,然后用返回值与Panel的大小比对!
      

  4.   

    我的代码是这样的,但有时可以,有时不行.
    procedure AutoAdjustFont(Font: TFont; const Width: Integer;
      const Caption: string);
    var
      FTextWidth: Integer;
      FTemp: TForm;
    begin
      FTemp := TForm.Create(Application);
      FTemp.Canvas.Font.Assign(Font);
      try
        FTextWidth := FTemp.Canvas.TextWidth(Caption);
        while FTextWidth > Width do
        begin
          FTemp.Font.Size := FTemp.Font.Size - 1;
          FTextWidth := FTemp.Canvas.TextWidth(Caption);
        end;
        Font.Assign(FTemp.Canvas.Font);
      finally
        FTemp.Free;
      end;
    end;
      

  5.   

    用当前字体的宽度整除Canvas的宽度,就是
      

  6.   

    因为Font.Size要是小于8就没有什么作用了,所以你的程序还要控制Size不能小于8,达到8只有调整Panel大小了。
      

  7.   

    字體分有兩種,一種無限縮放的 ,還有一種是有限的!
    你應該用前一種字體才能完成你的要求,調整Font.Height 而不是調Size ;
    試試這個:(Panel1 的字體就選無限縮放的,如:在繁體Windows是有一個"新明細體")
    procedure TForm1.Button2Click(Sender: TObject);
    var
      str: string ;
      aFont : TFont ;
    begin
      str :='WWWDASDFASDFASDFASEWRWQERWQER';
      Panel1.Caption := str ;
      aFont := Tfont.Create ;
      aFont.Assign(canvas.Font);
      canvas.Font.Assign(Panel1.Font) ;
      canvas.Font.Height := 100 ;
      while canvas.TextWidth(str)>Panel1.Width do
      begin
        canvas.Font.Height :=canvas.Font.Height-1 ;
        if canvas.Font.Height<=0 then Break ;
      end ;
      Panel1.Font.Assign(canvas.Font) ;
      canvas.Font.Assign(afont) ;
      aFont.Free ;
    end;
      

  8.   

    需要知道不同的字体大小每个字占多少象素,然后根据lanel的长度就可以计算出能显示的字符个数了呀