tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルMsgBoxのボタンの文字変更
記事No13182
投稿日: 2008/10/24(Fri) 17:28
投稿者AIKO

こんにちは。
先日も質問させて頂き丁重なご回答頂きありがとうございました。

今回は
MsgBoxのボタンに表示される文字を任意に変更できないものでしょうか?
例えばvbYesNoCancelの場合、[はい]、[いいえ]、[キャンセル] の3種類ですが
それぞれ[拝承]、[拒絶]、[戻る] などに変更。

vbOKOnly(ボタン数1つ)とvbYesNo(ボタン数2つ)と上のvbYesNoCancel(ボタン数3つ)
について、教えてもらえませんでしょうか
なお、戻り値に関しては元のStyleに応じた値を取得したいです。

どうぞ諸先生方よろしくお願いいたします。

環境
WindowsXP(SP2)
VB6(SP5)

[ツリー表示へ]
タイトルRe: MsgBoxのボタンの文字変更
記事No13183
投稿日: 2008/10/24(Fri) 18:18
投稿者花ちゃん
> MsgBoxのボタンに表示される文字を任意に変更できないものでしょうか?

たしか、Form 等で自分で作った方が簡単だったような。

それより、ご自分でも事前に検索して下調べをするようにして下さい。
過去のログにも同様の質問がありますよ。

又、下記のような方法も見つかりますよ。
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view&no=52

[ツリー表示へ]
タイトルRe: MsgBoxのボタンの文字変更
記事No13185
投稿日: 2008/10/25(Sat) 11:28
投稿者YK
こんにちは。

> MsgBoxのボタンに表示される文字を任意に変更できないものでしょうか?
> 例えばvbYesNoCancelの場合、[はい]、[いいえ]、[キャンセル] の3種類ですが
> それぞれ[拝承]、[拒絶]、[戻る] などに変更。

標準モジュールに
Option Explicit
Private Declare Function FindWindowEx Lib "user32" _
                            Alias "FindWindowExA" _
                           (ByVal hWnd1 As Long, _
                            ByVal hWnd2 As Long, _
                            ByVal lpsz1 As String, _
                            ByVal lpsz2 As String) As Long
                            
Private Declare Function GetParent Lib "user32" _
                           (ByVal Hwnd As Long) As Long
                          
Private Declare Sub SetWindowText Lib "user32" _
                            Alias "SetWindowTextA" _
                           (ByVal Hwnd As Long, _
                            ByVal lpString As String)
                            
Private Declare Function SetTimer Lib "user32" _
                           (ByVal Hwnd As Long, _
                            ByVal nIDEvent As Long, _
                            ByVal uElapse As Long, _
                            ByVal lpTimerFunc As Long) As Long
                            
Private Declare Sub KillTimer Lib "user32" _
                           (ByVal Hwnd As Long, _
                            ByVal nIDEvent As Long)
Public LngID  As Long
Public mTitle As String
Public mItem1 As String
Public mItem2 As String
Public mItem3 As String

Public Sub TimerProc(ByVal Hwnd As Long, ByVal uMsg As Long, _
              ByVal idEvent As Long, ByVal dwTime As Long)
    Dim dlghWnd     As Long
    Dim btn1hWnd As Long
    Dim btn2hWnd As Long
    Dim btn3hWnd As Long

    On Error Resume Next
    dlghWnd = FindWindowEx(0&, 0&, "#32770", mTitle)
    If GetParent(dlghWnd) <> Form1.Hwnd Then Exit Sub

    btn1hWnd = FindWindowEx(dlghWnd, 0&, "Button", "はい(&Y)")
    If btn1hWnd <> 0& Then SetWindowText btn1hWnd, mItem1

    btn2hWnd = FindWindowEx(dlghWnd, 0&, "Button", "いいえ(&N)")
    If btn2hWnd <> 0& Then SetWindowText btn2hWnd, mItem2
    
    btn3hWnd = FindWindowEx(dlghWnd, 0&, "Button", "キャンセル")
    If btn3hWnd <> 0& Then SetWindowText btn3hWnd, mItem3
    
    Timer_End
End Sub

Public Sub Timer_Start()
    If LngID = 0 Then
        LngID = SetTimer(0&, 0&, 0&, AddressOf TimerProc)
    End If
End Sub

Public Sub Timer_End()
    If LngID <> 0 Then
        KillTimer 0&, LngID
        LngID = 0
    End If
End Sub

フォームモジュールに
Private Sub Command1_Click()
    Dim lngRtn  As VbMsgBoxResult
    mTitle = "Msgbox Test"
    mItem1 = "拝承"
    mItem2 = "拒絶"
    mItem3 = "戻る"
    Timer_Start
    lngRtn = MsgBox("ボタンテキストのテスト", vbYesNoCancel, mTitle)
    Timer_End
    Select Case lngRtn
        Case vbYes
            MsgBox mItem1 & " がクリックされました。"
        Case vbNo
            MsgBox mItem2 & " がクリックされました。"
        Case vbCancel
            MsgBox mItem3 & " がクリックされました。"
        Case Else
            MsgBox "クリックされました。"
    End Select
End Sub

[ツリー表示へ]
タイトルRe: MsgBoxのボタンの文字変更
記事No13187
投稿日: 2008/10/25(Sat) 20:50
投稿者AIKO

こんばんは。いつも早々のご回答ありがとうございます。

>> それより、ご自分でも事前に検索して下調べをするようにして下さい。
過去のログにも同様の質問がありますよ。

花ちゃんさん、どうもすみません。
この掲示板の「ワード検索」で調べ、私の希望に合うものが無かったので
質問させて頂いたのですが、過去ログの存在をすっかり忘れてしまってました。
以後気をつけます。すみませんでした。

早速、過去ログを拝見させて頂き、ボタンの文字変更に関しまして
「これっ!」と思ったものがあったのですが、アイコンまで変わっちゃうので、
何とか自力で・・・と思い触ってみましたが歯が立ちませんでした。


YKさん、ボタンの文字変更の具体的記述ありがとうございました。
言葉足らずだったのでしょうか、出来ましたら標準のMsgBoxの様に表示指定する
アイコン(標準の4種類)は表示出来ないでしょうか?

標準のアイコン:
vbCritical(警告メッセージ)
vbQuestion(問い合わせメッセージ)
vbExclamation(注意メッセージ)
vbInformation(情報メッセージ)

[ツリー表示へ]
タイトルRe^2: MsgBoxのボタンの文字変更
記事No13188
投稿日: 2008/10/25(Sat) 20:54
投稿者かさのば
> 言葉足らずだったのでしょうか、出来ましたら標準のMsgBoxの様に表示指定する
> アイコン(標準の4種類)は表示出来ないでしょうか?

↓の部分書き換えりゃいいだけなんじゃない?
>lngRtn = MsgBox("ボタンテキストのテスト", vbYesNoCancel, mTitle)

[ツリー表示へ]
タイトル【解決】MsgBoxのボタンの文字変更
記事No13190
投稿日: 2008/10/25(Sat) 23:36
投稿者AIKO
> ↓の部分書き換えりゃいいだけなんじゃない?
> >lngRtn = MsgBox("ボタンテキストのテスト", vbYesNoCancel, mTitle)

かさのばさん、こんばんわorz
YKさんに作って頂いた記述に感激して、ユーザー定義を何一つ
分かってない私はテンバッテしまってました。

ご指摘通り、通常のMsgBox通りに「vbCritical」等を記述追加
したら、無事に解決いたしました。
ご指導ありがとうございました。

花ちゃんさん、今後、過去ログ検索を忘れずに行い、行き詰まったら時に
質問させて頂きます。
今回はどうかお許し頂き、どうぞこれからもヨロシクお願いいたします。

YKさん、迅速丁寧なコーディングサンプルをありがとうございました。
私の希望するものが出来ました。ありがとうございました。


かさのばさん、的確なご指摘ありがとうございました。
無事に解決いたしました。

みなさん、ご迷惑とお手を取って頂いたことにお詫びと感謝いたします。
ありがとうございました。

[ツリー表示へ]
タイトル【ごめんなさい未解決でした】MsgBoxのボタンの文字変更
記事No13191
投稿日: 2008/10/26(Sun) 00:33
投稿者AIKO
YKさん、
> lngRtn = MsgBox("ボタンテキストのテスト", vbYesNoCancel, mTitle)

「vbYesNoCancel」を「vbOKOnly」(ボタン1つ)や「vbYesNo」(ボタン2つ)を
指定した場合、標準のボタン文字になってしまいます。

何処の何を変更すればいいのでしょうか?
はなはだ申し訳ないのですが教えて頂けますように、どうぞヨロシクお願いいたします。

[ツリー表示へ]
タイトルRe: 【ごめんなさい未解決でした】MsgBoxのボタンの文字変更
記事No13192
投稿日: 2008/10/26(Sun) 18:29
投稿者かさのば
> YKさん、
> > lngRtn = MsgBox("ボタンテキストのテスト", vbYesNoCancel, mTitle)
>
> 「vbYesNoCancel」を「vbOKOnly」(ボタン1つ)や「vbYesNo」(ボタン2つ)を
> 指定した場合、標準のボタン文字になってしまいます。
>
> 何処の何を変更すればいいのでしょうか?
> はなはだ申し訳ないのですが教えて頂けますように、どうぞヨロシクお願いいたします。

問題です。
↓の処理は何をしているでしょーか?
>btn1hWnd = FindWindowEx(dlghWnd, 0&, "Button", "はい(&Y)")

[ツリー表示へ]
タイトル【今度こそ解決】MsgBoxのボタンの文字変更
記事No13193
投稿日: 2008/10/27(Mon) 07:02
投稿者AIKO
皆様、どうもありがとうございました。
自分で「vbYesNo」と言っておきながら、MsgBoxを呼び出す時、
同じボタン数の「vbOKCancel」を指定していました。
また、vbOKOnlyについてはmItem1に"OK"文を新たに追加すると
うまくいきました。
皆様、温かく教えて頂いてありがとうございました。
感謝!感謝orz

[ツリー表示へ]