在表单设计器中编辑TLabel的标题时,它会为您调整TLabel的大小.有没有办法在运行时让TMemo做到这一点?
我希望能够获取TMemo,为其.lines.text属性分配一些内容,然后告诉它调整自身大小并且不超过一定的宽度,尽管它可以达到它想要的高度.谁知道怎么做?
小智 7
这对我来说很好.添加的常数(8)可能会因您使用边框和/或斜角而有所不同,请尝试使用它.
procedure TForm1.Memo1Change(Sender: TObject);
var
LineHeight: Integer;
DC: HDC;
SaveFont : HFont;
Metrics : TTextMetric;
Increase: Integer;
LC: Integer;
begin
DC := GetDC(Memo1.Handle);
SaveFont := SelectObject(DC, Memo1.Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
ReleaseDC(Memo1.Handle, DC);
LineHeight := Metrics.tmHeight;
Increase := Memo1.Height;
LC := Memo1.Lines.Count;
if LC < 1 then
LC := 1;
Memo1.Height := LC * LineHeight + 8;
Increase := Memo1.Height - Increase;
Memo1.Parent.Height := Memo1.Parent.Height + Increase;
end;
Run Code Online (Sandbox Code Playgroud)
小智 6
将WordWrap属性设置TMemo为true,将文本转储到其中,计算行数,并将高度设置为行数和行高的乘积,但您需要知道行高.
在TMemo不公开行高属性,但如果你不能在运行时更改字体或字体大小,您可以在设计时实验确定的行高.
这是我用来设置TMemo高度为13像素的高度的代码.我还发现我需要一个小常数来计算TMemo顶部和底部边界.我将高度限制为30行(396像素)以保持在表格上.
// Memo.WordWrap = True (at design time)
Memo.Text := <ANY AMOUNT OF TEXT>;
Memo.Height := Min(19 + Memo.Lines.Count * 13, 396);
Run Code Online (Sandbox Code Playgroud)
如果绝对必须在运行时从对象中提取行高,那么您可以使用Someone的答案.或者,您可以使用TRichEdit,其SelAttributes属性包含Height提供行高的属性.
-Al.
| 归档时间: |
|
| 查看次数: |
8515 次 |
| 最近记录: |