Last Updated 2007/11/22
Programming Tips Visual Basic 印刷  索 引 
印刷キャンセル
2005/10/27

印刷開始時に表示して印刷終了後に消す印刷中止可能なメッセージボックスを作成する.


'以下のコードを標準モジュールに置く
'
Declare Function AlwaysOnTop Lib "user32" Alias "SetWindowPos" _
    (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
    ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
    ByVal cy As Long, ByVal wFlags As Long) As Long


'印刷のキャンセル用フラグ
Public CancelFlag As Boolean


'以下が印刷用のコード
'
'Form1 にコマンドボタンを配置して .Name プロパティを "cmdStartPrint" にする
'
Private Sub cmdStartPrint_Click()
    CancelFlag = False
    frmPrintCancel.Show vbModeless
    Do
        'Form2.cmdCancelPrint_Click イベントを取得するため
        'DoEvents を発行
        DoEvents
        
        'CancelFlag が True であれば出力をキャンセル
        If CancelFlag Then
            'スプールされているデータをキャンセル
            Printer.KillDoc
            Exit Do
        End If
        
        '
        'ここらに出力用のコードを記載
        '
        
        '出力データがすべて出力されたら
        If 出力が完了 Then Exit Do
    Loop
    Unload frmPrintCancel
    Set frmPrintCancel = Nothing
    MsgBox IIf(CancelFlag, "印刷はキャンセルされました", "印刷が完了しました")
End Sub


'以下が印刷キャンセル用のコード
'
'Form2 にコマンドボタンを配置して .Name プロパティを "cmdCancelPrint" にする
'
Private Sub Form2_Load()
    Const SWP_NOMOVE = &H2 'これらのパラメータの意味はAPIリファレンスを
    Const SWP_NOSIZE = &H1 '参照
    Const HWND_ALWAYSTOP = -1
    Dim intResults As Integer

    'キャンセル用フォームを常に手前に表示
    intResults = AlwaysOnTop(Me.hwnd, HWND_ALWAYSTOP ,_
                 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

Private Sub cmdCancelPrint_Click()
    'キャンセルフラグを操作
    CancelFlag = (MsgBox("印刷をキャンセルしますか?", _
                 vbYesNo + vbSystemModal, vbDefaultButton2) = vbYes)
End Sub


参照
印刷の中断
前後のTips
印刷キャンセル

DSS ProgrammingTipsCGI Ver2.02