非同期モードでの表示
このページでは、 高度なプログラムで必要となる 非同期モードでの動作について説明します。
同期モードと非同期モード
DenkowOcxのShowメソッドやShowMessageメソッドの動作には 同期モードと非同期モードの2通りがあり Asyncプロパティで切り替えます。 デフォルトでは同期モードです。
同期モードでは、Show/ShowMessageメソッドは表示が終るまで終了しません。 非同期モードでは、表示が終る前に終了します。 例で説明します。
VisualBasicで、Windowsアプリケーションを作成し、 フォームにDenkow Controlとボタン(Button1)を配置します。 Denkow Controlの名前をcDenkowとし、 Button1をダブルクリックして、 以下のコードを入力します。
Private Sub Button1_Click(sender As Object, e as EventArgs) Handles Button1.Click cDenkow.Async = False cDenkow.Scroll = True cDenkow.Show("同期モードでの表示") MessageBox.Show("Showメソッド終了","情報") End Sub
このプログラムを実行し、 Button1をクリックすると、 "同期モードでの表示"という文字が表示され、 スクロールアウトした後に、"Showメソッド終了"とダイアログが表示されます。
次に、ボタンをもうひとつ(Button2)追加し、 ハンドラに以下のコードを入力します。
Private Sub Button1_Click(sender As Object, e as EventArgs) Handles Button1.Click cDenkow.Async = True cDenkow.Scroll = True cDenkow.Show("非同期モードでの表示") MessageBox.Show("Showメソッド終了","情報") End Sub
このプログラムを実行し、Button2をクリックすると、 "非同期モードでの表示"が表示される前に、 "Showメソッド終了"とダイアログが表示されるはずです。
非同期モードが存在する理由
非同期モードが存在する理由は、 電光掲示板に表示中にも他の処理を行なう必要があるからです。 例えば、表示を中断したり、プログラムを終了したりする必要です。 普通のプログラムは、非同期モードを使用することになるでしょう。
同期モードが存在する理由は、 動作が単純なので説明に便利だからです。 同期モードでDenkowOcxの動作に慣れたら、 非同期モードで実用的なプログラムを作るようにしてください。
非同期モードでの処理
非同期モードで、電光掲示板ヘの表示の中断を要求するのには CancelまたはClearメソッドを使用します。 Clearメソッドでは表示の停止の後、表示の全消灯も行ないます。
電光掲示板への表示が行なわれている時に ShowやShowMessageメソッドを実行すると エラーになります。 表示を停止させてた後に 実行してください。
Cancelメソッドは、中断を要求するだけで 実際に中断されてしまう前に戻って来てしまいますので、 中断後、Showメソッドなどを実行したい場合は 次のようにしてください。
cDenkow.Cancel() While cDenkow.IsRunning() Thread.Sleep(10) End While cDenkow.Show("何とか")
以下に、非同期モードで良く使用する DenkowOcxのメソッドを示します。
メソッド | 意味 |
---|---|
Cancel() | 電光掲示板ヘの表示の停止。表示の消去無し |
Clear() | 電光掲示板ヘの表示の停止と表示の消去 |
IsRunning() | 電光掲示板へ表示中か |
IsFailed() | エラーが発生したか |
PauseScroll() | スクロールを一時停止します |
RestartScroll() | スクロールの一時停止をやめ、スクロールを再開する |
IsPaused() | スクロール一時停止中か |
イベント処理
非同期モードで表示を行なっていると、 DenkowOcxの状態の変化を検出し、 いろんな処理をしてやる必要がでてきます。 例えば、メッセージの表示が終了した時に、 次のメッセージを表示させたり、 ボタンのEnable状態を変化させたりすることがよくあると思います。 また、非同期モードでは、エラーの発生も 状態の変化として通知されます。
これらの状態は IsRunning(), IsFailed()などのメソッドで調べることも できますが、イベントハンドラによって、状態が変化したことの通知を 受け取ることもできます。
DenkowOcxのコントロールのプロパティを表示し、 イベントの一覧を見ると DispStateChangedというイベントが あります。 ここをダブルクリックすると、 DenkowOcxの状態が変化した時に呼び出される イベントハンドラを書くことができます。