hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
Module/拡張版dialog - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

拡張版dialog [hsp3]

ダイアログを表示します。既存の機能に

  • ダイアログのタイプ(「再試行・キャンセル」の2択など)
  • デフォルトのボタンを指定する機能

が追加されています。

スクリプト

commonフォルダ内に保存してください。 コメントに書いてあるように書き換えることで、サンプルスクリプトを実行できます。

API版(推奨)

fileex_dialog.hsp
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
!
 
 
-
|
-
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
!
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// 参考:「ちょくとのページ」
//     http://yokohama.cool.ne.jp/chokuto/urawaza/api/MessageBox.html
//     http://yokohama.cool.ne.jp/chokuto/advanced/call-api2.html
#ifndef __EX_DIALOG__
#undef dialog
#define global __EX_DIALOG__
#module ex_dialog
#uselib "user32.dll"
#func MessageBoxA "MessageBoxA" int, sptr, sptr, int
// dialogの戻り値
#define global IDOK             1    // 「OK」
#define global IDCANCEL         2    // 「キャンセル」
#define global IDABORT          3    // 「中止」
#define global IDRETRY          4    // 「再試行」
#define global IDIGNORE         5    // 「無視」
#define global IDYES            6    // 「はい」
#define global IDNO             7    // 「いいえ」
// アイコンの種類
#define MB_ICONSTOP             0x10 // STOPアイコン(未使用)
#define MB_ICONQUESTION         0x20 // 「?」アイコン(未使用)
#define MB_ICONEXCLAMATION      0x30 // 「!」アイコン
#define MB_ICONINFORMATION      0x40 // 「i」アイコン
// ダイアログの種類
#define MB_OK                   0x00
#define MB_OKCANCEL             0x01
#define MB_ABORTRETRYIGNORE     0x02
#define MB_YESNOCANCEL          0x03
#define MB_YESNO                0x04
#define MB_RETRYCANCEL          0x05
// デフォルトのボタン
#define MB_DEFBUTTON1           0x000
#define MB_DEFBUTTON2           0x100
#define MB_DEFBUTTON3           0x200
#deffunc _dialog@ex_dialog str message, int type, str caption, int default_number, local option
    // 色選択・ファイル選択のダイアログは標準のものを使用
    if ( type < 0 ) | ( 16 <= type ) {
        dialog@hsp message, type, caption
        return stat
    }
 
    // アイコンの決定
    if ( type \ 2 ) {
        option = MB_ICONEXCLAMATION
    } else {
        option = MB_ICONINFORMATION
    }
 
    // ボタンの決定
    switch ( type / 2 )
        case 1  : option |= MB_YESNO            : swbreak
        case 2  : option |= MB_OKCANCEL         : swbreak
        case 3  : option |= MB_YESNOCANCEL      : swbreak
        case 4  : option |= MB_ABORTRETRYIGNORE : swbreak
        case 5  : option |= MB_RETRYCANCEL      : swbreak
        default : option |= MB_OK               : swbreak
    swend
 
    // デフォルトで選択されているボタンの決定
    switch default_number
        case 2  : option |= MB_DEFBUTTON3 : swbreak
        case 1  : option |= MB_DEFBUTTON2 : swbreak
        default : option |= MB_DEFBUTTON1 : swbreak
    swend
 
    MessageBoxA hwnd, message, caption, option
    if ( stat == 0 ) {
        // 関数が失敗
        dialog@hsp "エラーが発生しました。アプリケーションを終了します。", 1 : end
    }
    return stat
#define global dialog(%1,%2=0,%3="",%4=0) _dialog@ex_dialog %1,%2,%3,%4
#global
#endif
 
// 以下サンプルスクリプト
// 実行する際は「#if 0」を「#if 1」に書き換えてください
#if 0
    mes {"各種ダイアログを表示します。戻り値statの値は、
  1 :「OK」ボタンが押された
  2 :「キャンセル」ボタンが押された
  3 :「中止」ボタンが押された
  4 :「再試行」ボタンが押された
  5 :「無視」ボタンが押された
  6 :「はい」ボタンが押された
  7 :「いいえ」ボタンが押された
のようになります。
"}
 
    dialog "「OK」のみを表示するダイアログです。", 0, "test"
    mes "OK → " + stat
 
    dialog "「はい」「いいえ」から選択するダイアログです。\n「いいえ」をデフォルトで選択しています。", 2, "test", 1
    mes "はい・いいえ → " + stat
 
    dialog "「OK」「キャンセル」から選択するダイアログです。", 4, "test"
    mes "OK・キャンセル → " + stat
 
    dialog "「はい」「いいえ」「キャンセル」から選択するダイアログです。\n「キャンセル」をデフォルトで選択しています。", 6, "test", 2
    mes "はい・いいえ・キャンセル → " + stat
 
    dialog "「中止」「再試行」「無視」から選択するダイアログです。", 8, "test"
    mes "中止・再試行・無視 → " + stat
 
    dialog "「再試行」「キャンセル」から選択するダイアログです。", 10, "test"
    mes "再試行・キャンセル → " + stat
 
    stop
#endif
fileex_dialog.as
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
!
 
 
-
|
-
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
!
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// 参考:「@IT Windows管理者のためのWindows Script Host入門
//     第7回 WshShellオブジェクトの詳細(3)」
//     http://www.atmarkit.co.jp/fwin2k/operation/wsh07/wsh07_03.html
#ifndef __EX_DIALOG__
#undef dialog
#define global __EX_DIALOG__
#module ex_dialog
// dialogの戻り値
#define global IDOK             1    // 「OK」
#define global IDCANCEL         2    // 「キャンセル」
#define global IDABORT          3    // 「中止」
#define global IDRETRY          4    // 「再試行」
#define global IDIGNORE         5    // 「無視」
#define global IDYES            6    // 「はい」
#define global IDNO             7    // 「いいえ」
// アイコンの種類
#define ICON_NOICON             0    // アイコンなし(未使用)
#define ICON_CRITICAL           16   // STOPアイコン(未使用)
#define ICON_QUESTION           32   // 「?」アイコン(未使用)
#define ICON_EXCLAMATION        48   // 「!」アイコン
#define ICON_INFORMATION        64   // 「i」アイコン
// ダイアログの種類
#define TYPE_OKONLY             0
#define TYPE_OK_CANCEL          1
#define TYPE_ABORT_RETRY_IGNORE 2
#define TYPE_YES_NO_CANCEL      3
#define TYPE_YES_NO             4
#define TYPE_RETRY_CANCEL       5
// デフォルトのボタン
#define DEFAULTBUTTON_1         0
#define DEFAULTBUTTON_2         256
#define DEFAULTBUTTON_3         512
 
#deffunc _dialog@ex_dialog str message, int type, str caption, int default_number, local com_res, local option
    // 色選択・ファイル選択のダイアログは標準のものを使用
    if ( type < 0 ) | ( 16 <= type ) {
        dialog@hsp message, type, caption
        return stat
    }
 
    // アイコンの決定
    if ( type \ 2 ) {
        option = ICON_EXCLAMATION
    } else {
        option = ICON_INFORMATION
    }
 
    // ボタンの決定
    switch ( type / 2 )
        case 1  : option |= TYPE_YES_NO             : swbreak
        case 2  : option |= TYPE_OK_CANCEL          : swbreak
        case 3  : option |= TYPE_YES_NO_CANCEL      : swbreak
        case 4  : option |= TYPE_ABORT_RETRY_IGNORE : swbreak
        case 5  : option |= TYPE_RETRY_CANCEL       : swbreak
        default : option |= TYPE_OKONLY             : swbreak
    swend
 
    // デフォルトで選択されているボタンの決定
    switch default_number
        case 2  : option |= DEFAULTBUTTON_3 : swbreak
        case 1  : option |= DEFAULTBUTTON_2 : swbreak
        default : option |= DEFAULTBUTTON_1 : swbreak
    swend
 
    // COM呼び出しの実行
    newcom wsh_shell, "WScript.Shell"
    comres com_res
    mcall wsh_shell, "Popup", message, 0, caption, option
    if stat {
        // COM呼び出しエラー
        dialog@hsp "COM呼び出しエラーが発生しました。アプリケーションを終了します。", 1 : end
    }
    delcom wsh_shell
    return com_res
#define global dialog(%1,%2=0,%3="",%4=0) _dialog@ex_dialog %1,%2,%3,%4
#global
#endif
 
// 以下サンプルスクリプト
// 実行する際は「#if 0」を「#if 1」に書き換えてください
#if 0
    mes {"各種ダイアログを表示します。戻り値statの値は、
  1 :「OK」ボタンが押された
  2 :「キャンセル」ボタンが押された
  3 :「中止」ボタンが押された
  4 :「再試行」ボタンが押された
  5 :「無視」ボタンが押された
  6 :「はい」ボタンが押された
  7 :「いいえ」ボタンが押された
のようになります。
"}
 
    dialog "「OK」のみを表示するダイアログです。", 0, "test"
    mes "OK → " + stat
 
    dialog "「はい」「いいえ」から選択するダイアログです。\n「いいえ」をデフォルトで選択しています。", 2, "test", 1
    mes "はい・いいえ → " + stat
 
    dialog "「OK」「キャンセル」から選択するダイアログです。", 4, "test"
    mes "OK・キャンセル → " + stat
 
    dialog "「はい」「いいえ」「キャンセル」から選択するダイアログです。\n「キャンセル」をデフォルトで選択しています。", 6, "test", 2
    mes "はい・いいえ・キャンセル → " + stat
 
    dialog "「中止」「再試行」「無視」から選択するダイアログです。", 8, "test"
    mes "中止・再試行・無視 → " + stat
 
    dialog "「再試行」「キャンセル」から選択するダイアログです。", 10, "test"
    mes "再試行・キャンセル → " + stat
 
    stop
#endif

使い方

命令のパラメータ

dialog p1,p2,p3,p4
p1:ダイアログに表示するメッセージを文字列で指定します。省略できません。
p2:ダイアログのタイプを指定します。詳しくは下の表をご覧ください。省略可能です。
p3:ダイアログのキャプションを文字列で指定します。省略可能です。
p4:デフォルトのボタンを指定します。1なら2番目のボタン、2なら3番目のボタン、それ以外なら1番目のボタンが選択されます。省略可能です。

ダイアログのタイプ

タイプ(整数値)説明
0標準メッセージボックス + [OK]ボタン
1警告メッセージボックス + [OK]ボタン
2標準メッセージボックス + [はい][いいえ]ボタン
3警告メッセージボックス + [はい][いいえ]ボタン
4標準メッセージボックス + [OK][キャンセル]ボタン
5警告メッセージボックス + [OK][キャンセル]ボタン
6標準メッセージボックス + [はい][いいえ][キャンセル]ボタン
7警告メッセージボックス + [はい][いいえ][キャンセル]ボタン
8標準メッセージボックス + [警告][再試行][無視]ボタン
9警告メッセージボックス + [警告][再試行][無視]ボタン
10標準メッセージボックス + [再試行][キャンセル]ボタン
11警告メッセージボックス + [再試行][キャンセル]ボタン
上記以外HSP標準のダイアログ

statに格納される戻り値

戻り値(整数値・マクロ)説明
IDOK「OK」が押された
IDCANCEL「キャンセル」が押された
IDABORT「中止」が押された
IDRETRY「再試行」が押された
IDIGNORE「無視」が押された
IDYES「はい」が押された
IDNO「いいえ」が押された

  • APIではなくわざわざCOMにした理由は?
  • wscriptで実行しているからメッセージボックスが裏にまわるし。
  • MessageBox?()でもデフォルトボタンを指定できるって知らなかったとか。
    • 「あ、COMでダイアログ表示できるんだー」→「アイコンも変えられるみたいだし、モジュールにしてみたらおもしろいんでね?」→「作ってみたけど、どうすべか」→「COM使ったスクリ少ないし開発wikiに上げてみるべ」の流れでした。API版も作ってみるよ。
  • だと思った。どう考えてもCOMは載せるだけ無駄じゃないか?だってAPI単独でできるだろ?メッセージボックスなんて。やっぱCOMでなきゃできないことをCOMとしたらどうだろ。
添付ファイル:
fileex_dialog.as
281件 [詳細]
fileex_dialog.hsp
365件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-10-08 (月) 11:54:40 (2253d)