TScrollBox动态创建Memos问题

时间:2015-06-24 15:37:56

标签: delphi vcl

在我的表格上有一个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完全可见的备忘录时,滚动框会向上或向下滚动以完整显示点击的备忘录。

我尝试了备忘录大小并且问题仍然存在。对于不同的备忘录大小,这种奇怪的滚动是不同的,并不总是完全暴露点击的备忘录。

0 个答案:

没有答案