【发布时间】:2021-12-06 02:31:45
【问题描述】:
我想测量 TButton 的文本宽度,以便在文本更改时调整它的大小。如果按钮使用ParentFont,我可以使用Canvas的形式来获取宽度:
int GetButtonTextWidth(TForm* form, TButton* btn)
{
const int base = form->Canvas->TextWidth(btn->Caption);
const int margin = 16;
return base + margin;
}
如果按钮有不同的字体,例如它是粗体,这是不准确的。我尝试创建一个新的TCanvas:
int GetButtonTextWidth(TForm* form, TButton* btn)
{
std::unique_ptr<TCanvas> canvas(new TCanvas);
canvas->Font = btn->Font;
const int base = canvas->TextWidth(btn->Caption);
const int margin = 16;
return base + margin;
}
这给出了例外:“画布不允许绘图”。如何创建一个TCanvas 以允许测量文本宽度并提供准确的结果?
【问题讨论】:
-
创建一个临时位图,将字体分配给该位图的画布并调用
TextWidth()。 Here is a Delphi example
标签: c++ c++builder vcl