delphi如何在word ole自动化中插入换行符(下面的边框)

时间:2014-12-12 19:17:53

标签: delphi ms-word ole

在Word应用内部,当我输入---并按ENTER时,Word会插入一条水平线_____(仅在线下方的边框)。

我需要插入相同的水平线,但使用delphi ole自动化。 谁知道怎么样? 我试过了:

  Word := CreateOleObject('Word.Application');
  Word.Visible := False;
  Doc:=Word.Documents.Add;
  Selection:=Word.Selection;
  Range:= Word.Selection.Range;
  Table:= Word.ActiveDocument.Tables;
  View:= Word.ActiveWindow.View;
  (...)
  Word.ActiveWindow.ActivePane.View.SeekView := 10;
  Selection.TypeText(Text :='---'#13#10); <--- No sucess!

欢迎任何帮助。

2 个答案:

答案 0 :(得分:3)

我认为我已经找到了您描述的行为差异的原因,以及通过手动输入获得类似效果的几种方法。

当您手动输入内容时,Word的自动更正/自动套用功能设置为&#34;正在收听&#34;对你输入的内容,当它识别出已被编程的东西时,如连续三个连字符,它会介入并采取适当的自动更正/自动套用格式操作。

但是,在自动化调用中,如果插入文本(通过TypeText),如果手动键入,则自动格式化,自动格式化不会自动发生 - 我想这可能是因为TypeText()绕过Word& #39;处理键盘输入的代码。调用TypeText()的Word宏也是这样的。但是 可以 在您的自动化代码中调用它,如下所示:

  MSWord.Selection.TypeText('Some text');
  MSWord.Selection.TypeText(#13#10);

  MSWord.Selection.TypeText('---');
  MSWord.Selection.Range.AutoFormat;

我还没有对其他自动套用格式的条目进行彻底的测试,我希望它可以与它们一起使用,所以我想它可能具有&#34;优势&#34;与其他方法相比,你不需要知道格式化实际上是如何完成的:-)。

或者,您可以手动应用效果,如另一个答案中所示,或者我在初次尝试回答您的q时发布的代码,即

  Word.Selection.TypeText('Some text');
  Word.Selection.TypeText(#13#10);
  Word.Selection.InlineShapes.AddHorizontalLineStandard;
  Word.Selection.TypeText('More text');

希望在这三种可能性之间,你能够获得你所追求的效果。

答案 1 :(得分:2)

以下添加了一个边框(wdBorderBottom)。

const
  wdBorderBottom = -3;
  wdLineStyleSingle = 1;
  wdLineWidth075pt = 6;
  wdColorBlack = 0;

var
  Border: OleVariant;

begin
  // ...
  Border := Word.Selection.Borders[wdBorderBottom];
  Border.LineStyle := wdLineStyleSingle;
  Border.LineWidth := wdLineWidth075pt;
  Border.Color := wdColorBlack;
  // ...
end;