各位大侠:
如何动态的知道字符串的显示长度,不是字符串的长度! 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?
有没有什么函数?还是必须自己写函数?
---进步才是硬道理
如何动态的知道字符串的显示长度,不是字符串的长度! 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?
有没有什么函数?还是必须自己写函数?
---进步才是硬道理
///////////////////////////////////////////////////////////////////
// 作者: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;
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;