4

現在、ppt アドインのプロジェクトで、ユーザーが行った形状の変更を追跡できるかどうかを知りたいです。

  • テキストボックス A 移動先 ( 210, 100)
  • テキスト ボックス B フォントを Calibri に変更
  • テキスト ボックス B スタイルを下線に変更
  • テキスト ボックス C を削除
  • 画像Aを追加
  • 画像 A を 320x240 にリサイズ
  • ...

PPT 2013 について私が知っていることは、AfterShapeSizeChangeイベントがあるため、サイズ変更後に知ることができますが、それ以上のことが必要です。これは、ユーザーが行ったすべての可能な変更です。

ブラウジングを通じて見つけようとした後、いくつかの可能性があります:

  1. CTRLSelectionChanged イベントを使用して独自のログ追跡を作成しますが、ユーザーが+ZまたはCTRL+を押すと、これは難しくなります。Y
  2. 元に戻す/やり直しスタックを調べます (人々はそれは不可能だと言っています...)
4

3 に答える 3

0

私は同じ問題を抱えています。

私に言わせれば、最良の解決策は、形状を XML (形状の状態) にシリアル化し、それを形状自体に保存することだと思います。このようにして、次に形状にアクセスするときに、現在の状態をシリアル化された形状で確認できます。

XML を形状に保存することは可能ですが、「1 つのコマンド」で COM 形状をシリアル化することはできません。すべての形状のプロパティを参照する独自のシリアル化を実装する必要があります (!!!! と思います)。

私が回避策として行ったのは、ユーザーがスライドに図形 (ShapeA としましょう) を配置し、特定のマスター ページ (ShapeA_state1) に図形のコピーを作成するたびに、新しい図形が ShapeA 状態を保持することです。次に、その ShapeA_state1 への参照を ShapeA に保存します。このようにして、アプリが 2 回目に ShapeA にアクセスするときに、アプリは、参照されている ShapeA_state1 を参照して、状態が変更されたかどうかを確認できます。その場合、ShapeA.1 は ShapeA_edited に更新されます。

于 2013-04-04T15:12:25.553 に答える
0

Do you need to actually track changes or do you need to be able to detect that a change has been made? Ie, that a given shape isn't exactly the same as it was in the original.

If the latter, how about this:

Write a routine that "touches" each shape in the presentation and adds tags to it, one tag for each property that you want to be able to detect changes to.

Then all you'd need to do is look at each shape's tags and see if the properties stored there match the current properties of the shape.

For example, to tag the shapes:

For each oSl in ActivePresentation.Slides
  For each oSh in oSl.Shapes
    oSh.Tags.Add "Left", cstr(oSh.Left)
    oSh.Tags.Add "Top", cstr(oSh.Top)
  Next
Next
于 2012-12-05T16:40:52.607 に答える