kakakakakku blog

Weekly Tech Blog: Keep on Learning!

LotusScriptでストップウォッチ機能を実現する

他にもっとSmartな実装方法があるかもしれませんが,自分が考えた方法を参考までに載せておきます.

フォームに準備するフィールド

  • timer_flag
    • 種類:数値
    • デフォルト値:0
    • 全モードで段落非表示
  • start_time
    • 種類:テキスト
    • デフォルト値:""
    • 全モードで段落非表示

作成するアクション

  • Timer Startアクション
    • (式によりアクションを非表示にする)timer_flag = 1
Sub Click(Source As Button)
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Set uidoc = ws.CurrentDocument
	
	Call uidoc.FieldSetText("timer_flag", "1")
	Call uidoc.FieldSetText("start_time", Str(Timer()))
	'Start/Stopボタンの表示を切り替えるために文書のリフレッシュが必要
	Call uidoc.Refresh
End Sub
  • Timer Stopアクション
    • (式によりアクションを非表示にする)timer_flag = 0
Sub Click(Source As Button)
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Set uidoc = ws.CurrentDocument
	
	result = Msgbox(Cstr(Round(Timer() - _
	Csng(uidoc.FieldGetText( "start_time")),2) & " second") , , "Your Time")
	
	Call uidoc.FieldSetText("timer_flag", "0")
	Call uidoc.FieldSetText("start_time", "")
	'Start/Stopボタンの表示を切り替えるために文書のリフレッシュが必要
	Call uidoc.Refresh
End Sub

ポイント

timer_flagフィールドの値を0:1と切り替えることで,Start/Stopボタンの表示を切り替えるところがポイントです.ただフィールドの値を切り替えただけでは認識されないので,文書(CurrentDocument)をリフレッシュしてあげる必要があります.あと式によりアクションを非表示にする設定を使って,常にStart/Stopどちらかのボタンのみが表示されているようにしました.

あとはTimer関数を使ったところです.Timer関数は午前0時からの経過時間を秒単位で返してくれるので,この差分を取れば秒単位での計測ができます.

ちなみに実行結果は以下のようになります.