プログラム起動時の処理
モジュールレベルの変数を1つ用意します。これは、作成する子フォームの数を管理します。
Public cnt As Integer
次に、MDIフォームのLoadイベントプロシージャで、この変数に1を代入し、LEAD Screen CaptureコントロールのCaptureCancelKey
プロパティにvbKeyEscape
をセットします。これは、実行中のキャプチャをキャンセルするキーを[Esc]キーに設定します。
Private Sub MDIForm_Load() cnt = 1 Me.LEADScr1.CaptureCancelKey = vbKeyEscape End Sub
また、フォームが表示されアクティブになった時に、あらかじめ組み込んであるForm1を非表示にしておきます。
Private Sub MDIForm_Activate() Form1.Hide End Sub
フルスクリーンのキャプチャ処理
メニュー[フルスクリーンをキャプチャ]のClickイベントプロシージャに、フルスクリーンのキャプチャ処理を組み込みます。
LEAD Screen Captureコントロールでは、メソッドでキャプチャ処理を実行できるようになっています。しかも、メソッドを実行するとすぐにキャプチャを始めるのではなく、「ホットキー」を押した時点でキャプチャを実行するように作られています(デフォルトのホットキーは[F11]キーです)。従って、メソッドを実行するとLEAD Screen Captureコントロールはホットキーが押されるまで待機しており、ホットキーが押されるとキャプチャを実行します。キャプチャした画像は、Bitmap
プロパティに格納されます。
このプログラムでは、ユーザーがキャプチャメニューを選ぶと、
- MDIウィンドウをアイコン化し
- メソッドを実行してホットキー([F11]キー)が押されるまで待機
- ホットキーが押されるとMDIウィンドウを元のサイズに戻し
- 子フォームを作成してLeadMainコントロールでキャプチャ画像を表示する
という処理を実行します。
では最初に、フルスクリーンのキャプチャ処理を作りましょう。
まず、MDIフォームをアイコン化します。これは、フォームのWindowState
プロパティに1をセットします。
Private Sub mnufull_Click() Me.WindowState = 1
次に、フルスクリーンのキャプチャを実行します。メソッドはLEAD Screen CaptureコントロールのCaptureFullScreen
です。引数はありません。ただし、このメソッドを実行した後にユーザーが[Esc]キーを押してキャプチャを中断した場合、メソッドはエラーになりますので、ここにエラー処理を入れておきます。
On Error GoTo FAIL Me.LEADScr1.CaptureFullScreen
キャプチャが終わったら、ウィンドウを元に戻します。
Me.WindowState = 0
今度は、キャプチャした画像を子フォームで表示します。まず、変数cnt
の値が1であれば、最初からMDIフォームに組み込んでいたフォームでキャプチャ画像を表示します。これは、LEAD Screen CaptureコントロールのBitmap
プロパティの値を、LeadMainコントロールの値に代入するだけです。また、フォームのタイトルを、「CaptureImage1」というように番号で表します。
If cnt = 1 Then Form1.Caption = "CaptureImage" & cnt Form1.LEAD1.Bitmap = LEADScr1.Bitmap Form1.Show
もし、既に最初からMDIフォームに組み込んでいたフォームが使われていたら、新しく子フォームを作成してそこに表示します。
子フォームを作成するには、Dim
ステートメントとキーワードNew
を使い、「Form1」のインスタンスを作成します。Form1には、既にLeadMainコントロールとCommomDialogコントロールが組み込まれていますから、これらを持った子フォームの複製が作成されます。作成するフォームのオブジェクト名は、newformです。常にこの名前でフォームが作られますから、フォームを識別するためにフォームのタイトルを「CaptureImage1」というように番号で表します。
Else Dim newform As New Form1 newform.Caption = "CaptureImage" & cnt
後は、LEAD Screen CaptureコントロールのBitmap
プロパティの値を、フォーム上にあるLeadMainコントロールの値に代入し、フォームのShow
メソッドでフォームを表示します。
newform.LEAD1.Bitmap = LEADScr1.Bitmap newform.Show End If
フォームを表示したら、cnt
プロパティの値を1つ増やしておきます。
cnt = cnt + 1
もし、ユーザーがキャプチャ中に[Esc]キーを押したら、LEAD Screen CaptureコントロールのStopCapture
メソッドを実行してキャプチャを終了し、MDIフォームを元のサイズに戻します。
FAIL: Me.LEADScr1.StopCapture Me.WindowState = 0 End Sub
アクティブウィンドウのキャプチャ処理
今度は、アクティブウィンドウのキャプチャ処理を、メニュー[アクティブなウィンドウをキャプチャ]のClickイベントプロシージャに作成します。といっても、作成するコードはフルスクリーンのキャプチャ処理と同じです。実行するメソッドがCaptureActiveWindow
に変わるだけです。
Private Sub mnuactwin_Click() Me.WindowState = 1 On Error GoTo FAIL Me.LEADScr1.CaptureActiveWindow ...... ...... ...... End Sub
オブジェクトを選んでキャプチャする処理
オブジェクトを選んでキャプチャする処理も、基本的には前述の2つの処理と同じです。ただし、LEAD Screen Captureコントロールには、選んだオブジェクトを枠線で囲んで表示する機能があります。この枠線の太さをCaptureObjectBorderWidth
プロパティで設定します。
後は、CaptureSelectedObject
メソッドを実行し、ホットキーを押すとオブジェクトを選ぶことができるようになりますので、キャプチャしたいオブジェクトをクリックすると、キャプチャが実行されます。
Private Submnuobject_Click() Me.WindowState = 1 Me.LEADScr1.CaptureObjectBorderWidth = 3 On Error GoTo FAIL Me.LEADScr1.CaptureSelectedObject ...... ...... ...... End Sub
エリアを選択してキャプチャする処理
エリアを選択してキャプチャする処理では、ホットキーを押すとエリアを選択するカーソルとキャプチャエリアの画像を表示する情報ウィンドウが表示されます。この情報ウィンドウには、キャプチャエリアのサイズと位置の情報も表示されます。
この情報ウィンドウを使うには、CaptureAreaShowInfoWindow
プロパティをTrueにセットします。
Private Sub mnuareaClick() Me.WindowState = 1 LEADScr1.CaptureAreaShowInfoWindow = True
後は、CaptureAreaメソッドの引数に定数「SCR_CAP_AREA_RECT」を指定して実行するだけです。
CaptureAreaメソッドの引数は、キャプチャ範囲の形状を指定するもので、定数「SCR_CAP_AREA_RECT」はマウスでドラッグした矩形内をキャプチャします。
On Error GoTo FAIL LEADScr1.CaptureArea SCR_CAP_AREA_RECT ...... ...... ...... End Sub
以上で、親フォームの処理は出来上がりです。
子フォームの処理
今度は、子フォームの処理を作成します。最初に、LeadMainコントロールのサイズをフォームのサイズにあわせて伸び縮みするようにします。
LeadMainコントロールは、AutoSize
プロパティをFalseに、AutoScroll
プロパティをTrueにセットしておきます。そして、フォームよりも少し小さくなるようにして、LeadMainコントロールのスクロールバーが使えるようにします。
なお、フォームが全画面表示になると、各プロパティの代入式はエラーになるので、On Error GoTo
ステートメントを入れておきます。
Private Sub Form_Resize() On Error GoTo FAIL Me.LEAD1.Width = Me.ScaleWidth - 500 Me.LEAD1.Height = Me.ScaleHeight - 500 FAIL: End Sub
最後に、キャプチャ画像をファイルに保存する処理を、子フォームのQueryUnloadイベントプロシージャに作成します。ファイルの保存は、この連載の第1回目で紹介していますのでそちらを参照してください。
ここでは、LeadMainコントロールのSave
メソッドを使って、ビットマップフォーマットでファイルに保存します。
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim ret As Integer Dim fname As String ret = MsgBox("ファイルに保存しますか?", vbYesNo) If ret = vbYes Then With Me.CommonDialog1 .Filter = "ビットマップ|*.bmp" .FileName = Me.Caption & ".bmp" .ShowSave fname = .FileName End With On Error Resume Next ret = Me.LEAD1.Save(fname, FILE_BMP, 24, 2, SAVE_INSERT) End If End Sub
まとめ
今回は、LeadMainコントロールの多彩な機能の中から、画面キャプチャを行う機能を持った、LEAD Screen Captureコントロールを使い、スクリーンショットを撮って保存するプログラムを作成してみました。
LEAD Screen Captureコントロールは、キャプチャ機能はすべてメソッドで提供され、メソッドを実行するだけでキャプチャできてしまう、とても便利なコントロールです。特にエリアでキャプチャする機能などはすべて自分で作るとなるととても大変です。LEADTOOLS 14.0J Raster Imaging Proには便利なコントロール群があるので、これらを上手に使って開発を楽にするのもよいのではないでしょうか。
なお、LEAD Screen Captureコントロールのヘルプファイルは、スタートメニューには登録されておらず、LEAD14コンポーネントをインストールしたフォルダ内の「Help」フォルダに、「LTSCROCXN.HLP」という名前で保存されています。