现在我在一个label控件上写上一个 ‘国’ 字现在我这样在button1的事件中设置如下
label.font.size:=100;
label.font.style:=[fsItalic];这样的话label的字体变成斜体后就会显示不完全现在boss要我计算出变成斜体后的矩形框宽高,我使用API, textextent计算,斜体的大小和正常字体是一样的
现在咋办 ,来个高手帮忙计算计算

解决方案 »

  1.   

    我就是想获取字体宽度  来设置 label 宽度  
    一定要计算斜体字体宽度的  谢谢
      

  2.   

    我看到 斜体的显示 好像和 size属性有关系  那这个系数值应该怎么计算呢  
      

  3.   

    一个比较笨的方法:1、创建一个尽可能大的Bitmap,至少可以让这个字可以完整的显示出来。
    2、设置Canvas的背景色为白色,字体颜色为黑色,字体尺寸为100,斜体。
    3、在Canvas上输出这个字。
    4、遍历Bitmap上的所有像素点,判断该像素点的颜色为黑色,来获取相应的Left、Right、Top、Bottom,并由此得到这个字体所占据矩形框的Width和Height。
      

  4.   

    是这样的哈
    我的背景是固定的  是白色的  但是有黑点的  而且字体颜色是可变的  所以不能通过像素点判断的  
    而且 字 一定是放在Label上的  
      

  5.   

    用得著這麼復雜嗎,變成斜體後只要將Label的寬度加大一點就可以了,我算了下寬度系數為1.177左右。
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Label1.Font.Size := 100;
      Label1.Font.Style := [fsItalic];
      Label1.Width := round(Label1.Width*1.177);
    end;
      

  6.   

    你不就是要解决问题吗?要精确的话你先计算一下斜体字倾斜角度(或者有一个已知角度)然后通过三角函数可计算出。倾斜角度的算法可以参照:http://wenku.baidu.com/view/21c5e91ffc4ffe473368abab.html
      

  7.   

    Label1.AutoSize 这个没用吗,如果是中文,就把字体设置一下