• ベストアンサー

MSGBOXのフォント大きさ変更

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 プログラムの書き方に文句は言わないように!

noname#93878
質問者

お礼

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

その他の回答 (1)

  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.1

メインのフォーム以外にフォームモジュールを追加して、そのフォームをメッセージボックスそっくりに作って、(ラベルとか、ボタンとかで)、メッセージを表示したい時にそのメッセージフォームを表示させる。ということなのだと思います。表示したくない時は、Visible = Falseにすればいいのです(^^)。 メッセージで押されたボタンの戻り値は、Public変数に設定すればメインのフォームで利用できますしね。

関連するQ&A

専門家に質問してみよう