是否可以知道 OLE 对象的实际高度?

Is it possible to know the actual height of OLE object?

我有一个 OLEContainer 对象,我在其中创建 Word.Document,以允许编辑公式和其他内容。

如何将 OLEContainer 高度设置为实际数据的高度?

如果您使用的是 TOleContainer,一旦您在其中激活 MS Word,您就可以轻松地 像这样获取对 MS Word Automation 对象的引用:

MSWord := OleContainer1.OleObject;

到目前为止,很简单。

下一步是尝试获取代表Word文档高度的数字 在 MSWord 对象中打开。问题在于文档的结构 可能非常复杂,需要考虑的变量太多 (字体大小,段落间距等)我想不出一个简单的方法 以获得准确的数字。

但是,解决该问题的一种简单的方法是获取行数的数字 在文档中,然后按该值的乘数缩放 OleContainer 的高度;这 下面的方法将获取文档中的行数(或其主要文本, 无论如何)然后你可以根据它调整容器的高度;

procedure TForm1.GetLinesInDocument;
var
  Lines : Integer;
  MSWord,
  vDialog : OleVariant;
begin

  MSWord := OleContainer.OleObject;

  vDialog := MSword.Dialogs.Item(wdDialogToolsWordCount);  // this Dialog returns the number of
  //  lines in the document

  vDialog.Execute;  //  This executes the Dialog function without causing 
  //  it to display

  Lines := vDialog.Lines;
  Caption := 'Lines: ' +  IntToStr(Lines);

end;

显然需要一些实验来确定比例因子。

祝你好运!

OleContainer 的 SizeMode 属性 可以设置为 smAutoSize。太简单了。