以前いただいていた .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 件のコメント:
コメントを投稿