7

私の Word アドインにDocumentは、特定の を含む Word オブジェクトがありますSection。このSectionに、次を追加しますShape

var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape;

私の問題は、一部の Word 文書テンプレートに、図形の上に表示される画像やその他のものがあることです。もともと、これを修正するには Z オーダーを設定するだけで十分だと思っていました。

shape.ZOrder(MsoZOrderCmd.msoBringToFront);

それはしませんでした。したがって、私の質問は、どのように私の の Z オーダーを絶対に設定することができるかということです。つまり、ドキュメントの一番上に表示Shapeされるようにするには、他に何を設定する必要がありますか (Shapeつまり、他のすべてのものの上に表示されます)?

4

2 に答える 2

8

これらのメソッドが機能しない理由がようやくわかりました。

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);

Shape問題は、セクション内にオブジェクトを追加HeaderFooterしたが、その上に表示されていた形状がDocument. Z オーダーは、オブジェクトが含まれている同じセクション内の他の図形に対してのみ相対的です (オブジェクトが実際のドキュメント、ヘッダー、フッターなどにあるかどうか)。

したがって、このコードの代わりに、特定のセクションに形状を追加します。

var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape;
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);

このコードを使用してドキュメントに直接追加し、Z オーダーを適用すると、実際に機能しました。テンプレートの一部である他のすべてのオブジェクトの上に表示されました。

var shape = document.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0) as Shape;
shape.ZOrder(MsoZOrderCmd.msoBringToFront);

Word マクロの作成、第 2 版では、これを完全に明確に述べています。

ZOrder メソッドは、他のオブジェクトに対する Shape オブジェクトの z オーダーを設定します。このメソッドは絶対 z オーダーを設定しないことに注意してください。

Shapeしたがって、絶対的な Z オーダーは、この場合の が実際に存在する場所など、他の要因に依存します。

于 2016-10-05T18:59:18.387 に答える
4

これを Word で手動で行うには、[テキストの前に移動] オプションを選択します。試してみてください:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);

他のオブジェクトが原因でこれだけでは機能しない場合は、次から次へと使用してみてください。

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);

これを行う理由は、MS Word がテキストと他のオブジェクトを異なる Z オーダーを持つものとして扱うように見えるためです。

于 2016-10-04T20:40:32.413 に答える