「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:1949
現在:3


状態監視ができますか?

ページOpenOffice.org FAQの登録ページ
投稿者Mt.Fuji
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2009-09-21 14:22:11 (月)
OSWindowsXP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

フォームにコマンドボタンを貼り付けて、オペレーターのリクエストを受け付ける処理があるとします。 フォームを表示中にリクエストのない状態のときに ある状態を監視する、たとえばファイルが更新されたかどうかを監視する というようなことはできるでしょうか?


もう少し情報をください

M.Kamataki (2009-09-24 12:09:29 (木))

ファイルの更新状態を確認するには、単純な考えとしてはタイムスタンプの比較などがあげられます。しかし、監視したいファイルがどのようなものであるのかがより具体的にわかると、もっとアイデアが出るかもしれません。

もう少し情報を提供していただけませんか。

加えて、現在のカテゴリーが「StarSuite」となっております。利用のアプリケーションもわかりましたら、教えてください。

無題

tani (2009-09-24 13:04:39 (木))

>フォームを表示中にリクエストのない状態のときにある状態を監視する

非同期コールバックとか各種イベントリスナーとかを組み合わせたらなんとかなるんじゃないかなーと思います。
http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FDialog%2FAsynchronousCallback

>たとえばファイルが更新されたかどうかを監視する

こっちはWindowsのAPIなんかをdeclareで読み込んで使用する必要があるように思うのでハードルが高そうですね。
http://www.winapi-database.com/File/File/FindFirstChangeNotification.html
こんなのとか。

以上なんとなーくですが。

もう少し情報を

Mt.Fuji (2009-09-25 08:13:33 (金))

情報が少なくてすみません。
利用アプリケーションはCalcです。
質問の要点は、たとえば
With oDialog

    .execute
    .dispose

End With
Call ファイル監視
このように、フォームを表示た場合、
何かのイベントが発生しないかぎり、
アプリケーションに制御が戻らないので
たとえば、ファイル(データ)が更新されたことを
オペレータに知らせるために、フォームに張り付けたコマンドボタンの
色を変えたい。ということなんです。
ファイルの更新を監視するのは、たとえば5秒に一回ファイルを読み込んで
データを比較するくらいのことでいいかなと思っていまので、
ファイルの状態監視の処理としては
Sub ファイル監視
Line100:
Wait 5000
ファイルを読み込んでデータを比較
If(変化なし)Then Goto Lin100
コマンドボタンの色を変える
End Sub
この位の処理で、ループ中にオペレータのリクエストがあっても
Waitで割り込みを受け付けてフォームに制御が戻るのかなと思っています。

アイデア その1

M.Kamataki (2009-09-25 10:47:05 (金))

Calcのファイルが変更されたかどうか、監視したいということで良いでしょうか。そこで、まったく逆の発想ですが、監視したい対象のファイルのイベント「ドキュメントは保存されました」にWindowsのNETコマンドを利用したメッセージを仕込むというのはどうでしょうか。以下のようなマクロです。このイベントは「ツール」−「カスタマイズ」で表示されるダイアログの「イベント」タブで設定できます。

Sub NetSendMessage
shell ("net send * ファイルが変更されました",0)
End Sub

監視対象のファイルが変更され、保存されるとワークグループ内のすべてのPCにメッセージが表示されます。

*(アスタリスク)を、ユーザー名、/DOMAIN:PCの名前 などに変更すると、送る対象のPCを固定できます。

なお、Windows XPでもSP3以降はデフォルト設定ではメッセージを送れない可能性があります。参考:「net send XP ではデフォルトでは、使えなくなっている。」

さらに説明不足ですみません。

Mt.Fuji (2009-09-25 14:26:09 (金))

ファイルというのは他パソコンによって更新される共有フォルダー内の
CSVファイルです。

たぶん解決できたと思います。

Mt.Fuji (2009-09-25 15:15:15 (金))

下記のように
フォーム表示後にコールバックルーチンを登録して
コールバックルーチンの中で5回カウント後
コマンドボタンの色を変えるという処理を試してみたら
うまく動きました。カウント中もボタン操作ができますので、
ファイル更新の監視の方もたぶんうまく動くと思います。
ありがとうございます。

Sub Main
   Dim oASync As Object
   Dim oCallback As Object
   oASync = CreateUnoService("com.sun.star.awt.AsyncCallback")
   oCallback = CreateUnoListener
   ("Callback_", "com.sun.star.awt.XCallback")
   oASync.addCallback(oCallback,"")
   With oDialog
      .execute
      .dispose
   End With
   oASync.addCallback(oCallback,"")
End Sub
Sub Callback_notify( aData )
' 何か時間がかかる処理
Dim i As Integer
Line100:
wait 5000
i = i + 1
Print i
If( i < 5 )Then GoTo Line100
oDialog.Model.CommandButton1.BackgroundColor = RGB(255,255,255)
End Sub

うまく動きました。

Mt.Fuji (2009-09-28 07:56:11 (月))

狙い通りの動きができました、
アドバイスありがとうございます。

お名前:
題名: