お知らせ

--------------------------------------------------

プログラム作成/コンサルティングの申し込みはこちら

--------------------------------------------------

2010年11月22日月曜日

.NET - 図面が保存されることを認識する方法(AutoCAD 2011)

以前いただいていた .NET の質問があったのですが、AUJ などがあってそのままにしていたのですが、AUJ も終わったので今日はそのことについて調べてみました。

内容としては、SAVE コマンドでの保存、上書き保存、図面 CLOSE 時の保存、VBA の SAVE メソッドでの保存 など図面が保存されることを認識したいということでした。

Document.CloseWillStart Event でコマンド名が SAVE のときに処理するようにしてみたところ、図面 CLOSE 時の保存、VBA の SAVE メソッドでの保存 では認識してくれないということでした。

試してみたところ、確かに CommandWillStart では 図面 CLOSE 時の保存、VBA の SAVE メソッドでの保存 は認識してくれませんでした。
どうやら、その時は何のコマンドも動いていないみたい(AutoCAD 内部の機能で保存されている?)で、そのために認識することが出来ていないようです。

ということで、何かないかなーと思って arxmgd.chm を眺めていたら、Database.BeginSave Event っていうのを見つけました。きっとこれだと思って試してみたところ、図面 CLOSE 時の保存、VBA の SAVE メソッドでの保存 でもちゃんと認識してくれました。

試してみたときのコードはこんな感じです。

'------------------------------------------------
' AddHandler を実行したことがあるかどうかの判断用の変数
Dim jHandler As Boolean = False

' イベントを登録するコマンド
<CommandMethod("AVDO_BeginSave", "AVDO_BeginSave", "AVDO_BeginSave", CommandFlags.Modal)> _
Public Sub AVDO_BeginSave()
    Dim doc As Document = Application.DocumentManager.MdiActiveDocument
    Dim db As Database = doc.Database

    ' AddHandler を複数回実行すると正しく動作しないため、実行されているかどうかを判断する。
    If jHandler = False Then
        AddHandler db.BeginSave, New DatabaseIOEventHandler(AddressOf BeginSave)

        jHandler = True
    End If

End Sub

' Save が開始されたときに実行する関数
Public Sub BeginSave(ByVal sender As Object, ByVal e As DatabaseIOEventArgs)

    MsgBox("保存が始まったよ!!")

End Sub
'------------------------------------------------

AVDO_BeginSave コマンドを実行するとイベントが登録されます。
それぞれの図面で実行しておく必要があるようなので、acaddoc.lsp に AVDO_BeginSave コマンドを実行するように記述しておけばいいと思います。

0 件のコメント:

コメントを投稿