プロが教える店舗&オフィスのセキュリティ対策術

msgboxのフォント変更に関しては、既に質問NO.384428「フォントの大きさ」に解決策が示されています。
その回答の中の、「msgboxとそっくり同じ物はちょっと面倒ですが、フォントサイズを変えて、表示するだけでしたら、Formとラベルとボタンだけですので、そんなに難しくはないと思います。」という方法に関して、出来れば具体的に教えていただきたいのですが。

A 回答 (2件)

私の回答ですよね?


考え方は#1さんのおっしゃる通りなので、サンプルを作ってみました。
(私はUnloadしてますが)

どの程度、メッセージボックスに似せればいいのか分からなかったので、
少々長くなってしまいました。

テストをあまりしてませんので、バグがあるかもしれません。
そのまま使わない方がいいかも・・・
★は設定しておけば、プログラム内に書かなくてよいです。

'******* Form1(Main Form) 適当です。********
Private Sub Command1_Click()
  If (MsgBox2("testです" & Chr(13) & "いいですか?", vbYesNo, "Test") = vbYes) Then
    MsgBox "Yes"
  Else
    MsgBox "No"
  End If
End Sub

'******* Form2(MsgBox)********
'Command1(0)~Command1(2)
'Label1
'を貼り付けてください。
Private Sub Command1_Click(Index As Integer)
  Select Case Command1(Index).Caption
    Case "OK"
      MsgNo = vbOK
    Case "Cancel", "キャンセル"
      MsgNo = vbCancel
    Case "中止"
      MsgNo = vbAbort
    Case "再試行"
      MsgNo = vbRetry
    Case "無視"
      MsgNo = vbIgnore
    Case "はい"
      MsgNo = vbYes
    Case "いいえ"
      MsgNo = vbNo
  End Select
  Unload Me
End Sub

'******* Module1(標準モジュール)********
Public MsgNo As Long

Public Function MsgBox2(Prompt As String, Optional buttons As VbMsgBoxStyle = vbOKOnly, Optional Title As String) As VbMsgBoxResult
  Dim BCnt As Integer 'ボタン数
  Dim Y As Long '最後のボタンの右位置
  Load Form2
  With Form2
    'タイトル設定
    If (Title <> "") Then
      .Caption = Title
    Else
      .Caption = App.EXEName
    End If
    'メッセージ設定
    With .Label1
      .Move 200, 200 '★
      .AutoSize = True '★
      .Caption = Prompt
      'ボタンの設定
      Select Case buttons
        Case vbOKOnly
          Y = Button_Set(.Top + .Height, "OK")
        Case vbOKCancel
          Y = Button_Set(.Top + .Height, "OK", "Cancel")
        Case vbAbortRetryIgnore
          Y = Button_Set(.Top + .Height, "中止", "再試行", "無視")
        Case vbYesNoCancel
          Y = Button_Set(.Top + .Height, "はい", "いいえ", "キャンセル")
        Case vbYesNo
          Y = Button_Set(.Top + .Height, "はい", "いいえ")
        Case vbRetryCancel
          Y = Button_Set(.Top + .Height, "再試行", "キャンセル")
      End Select
    End With
    'フォームのサイズおよび表示位置設定
    If (.Label1.Left + .Label1.Width > Y) Then
      Y = .Label1.Width + .Label1.Left * 2
    Else
      Y = Y + .Label1.Left * 2
    End If
    .Move (Screen.Width - .Width) / 2, (Screen.Height - .Height) / 2, Y, .Command1(0).Top + .Command1(0).Height + 500
    'メッセージボックス表示
    .Show vbModal
  End With
  MsgBox2 = MsgNo
End Function

Private Function Button_Set(ByVal CapY As Long, ByVal Cap0 As String, Optional ByVal Cap1 As String = "", Optional ByVal Cap2 As String = "") As Long
  Dim Y As Long
  With Form2
    With .Command1(0)
      .Top = CapY + 200
      .Left = 200 '★
      .Caption = Cap0
      Y = .Left + .Width
    End With
    With .Command1(1)
      If (Cap1 <> "") Then
        .Top = CapY + 200
        .Left = .Parent.Command1(0).Left + .Parent.Command1(0).Width + 200 '★
        .Caption = Cap1
        Y = .Left + .Width
      Else
        .Visible = False
      End If
    End With
    With .Command1(2)
      If (Cap2 <> "") Then
        .Top = CapY + 200
        .Left = .Parent.Command1(1).Left + .Parent.Command1(1).Width + 200 '★
        .Caption = Cap2
        Y = .Left + .Width
      Else
        .Visible = False
      End If
    End With
  End With
  Button_Set = Y
End Function

プログラムの書き方に文句は言わないように!
    • good
    • 0
この回答へのお礼

わざわざサンプルをありがとうございます。すばらしい労作ですので、ありがたく参考にさせて使わせていただきます。

お礼日時:2004/03/11 10:06

メインのフォーム以外にフォームモジュールを追加して、そのフォームをメッセージボックスそっくりに作って、(ラベルとか、ボタンとかで)、メッセージを表示したい時にそのメッセージフォームを表示させる。

ということなのだと思います。表示したくない時は、Visible = Falseにすればいいのです(^^)。

メッセージで押されたボタンの戻り値は、Public変数に設定すればメインのフォームで利用できますしね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A