在我的表格上有一个ScrollBox。我用2个动态创建的Memos填充它:
TotalHeight := 0;
NewMemo := TMemo.Create(nil);
NewMemo.Parent := ScrollBox1;
NewMemo.Left := 0;
NewMemo.Top := TotalHeight;
NewMemo.Lines.Text := Memo1.Lines.Text;
NewMemo.FitHeightToContent; //SEE BELOW !!!
TotalHeight := TotalHeight + NewMemo.Height;
NewMemo := TMemo.Create(nil);
NewMemo.Parent := ScrollBox1;
NewMemo.Left := 0;
NewMemo.Top := TotalHeight;
NewMemo.Lines.Text := Memo1.Lines.Text;
NewMemo.FitHeightToContent;
TotalHeight := TotalHeight + NewMemo.Height;
ScrollBox1.VertScrollBar.Range := TotalHeight;
FitHeightToContent程序代码(取自SO):
procedure TMemoHelper.FitHeightToContent;
var
DC: HDC;
SaveFont : HFont;
Metrics : TTextMetric;
LineHeight: Integer;
Increase: Integer;
LC: Integer;
begin
DC := GetDC(Handle);
SaveFont := SelectObject(DC, Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
ReleaseDC(Handle, DC);
LineHeight := Metrics.tmHeight;
Increase := Height;
LC := Lines.Count;
if LC < 1 then
LC := 1;
Height := LC * LineHeight + 8;
Increase := Height - Increase;
end;
备忘录将自己的自动换行视为错误。他们的高度是如此,如果一个备忘录完全可见,其他备忘录只有大约1行文字可见。
问题:当我点击NOT完全可见的备忘录时,滚动框会向上或向下滚动以完整显示点击的备忘录。
我尝试了备忘录大小并且问题仍然存在。对于不同的备忘录大小,这种奇怪的滚动是不同的,并不总是完全暴露点击的备忘录。