<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=172656&amp;view=findpost&amp;p=1458838</guid>
        <pubDate>Tue, 20 Feb 2007 04:40:22 +0000</pubDate>
        <title>Свой MessageBox</title>
        <link>https://forum.sources.ru/index.php?showtopic=172656&amp;view=findpost&amp;p=1458838</link>
        <description><![CDATA[ALXR: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Option Explicit</div><div class="code_line">&nbsp;</div><div class="code_line">Global Const MY_MBOX_DEFAULT1 As Long = vbDefaultButton1</div><div class="code_line">Global Const MY_MBOX_DEFAULT2 As Long = vbDefaultButton2</div><div class="code_line">Global Const MY_MBOX_DEFAULT3 As Long = vbDefaultButton3</div><div class="code_line">Global Const MY_MBOX_DEFAULT4 As Long = vbDefaultButton4</div><div class="code_line">Global Const MY_MBOX_DEFAULT5 As Long = &amp;H400</div><div class="code_line">&nbsp;</div><div class="code_line">Private Declare Function SoftModalMessageBox Lib &quot;user32.dll&quot; (lpmb As MSGBOXDATA) As Long</div><div class="code_line">Private Declare Function GetActiveWindow Lib &quot;user32.dll&quot; () As Long</div><div class="code_line">Private Declare Function GetVersionExA Lib &quot;kernel32.dll&quot; (posv As OSVERSIONINFO) As Long</div><div class="code_line">&nbsp;</div><div class="code_line">Private Type OSVERSIONINFO</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwOSVersionInfoSize As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwMajorVersion As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwMinorVersion As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwBuildNumber As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwPlatformId As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;szCSDVersion As String * 128</div><div class="code_line">End Type</div><div class="code_line">&nbsp;</div><div class="code_line">Private Type MSGBOXPARAMS</div><div class="code_line">&nbsp;&nbsp; &nbsp;cbSize As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;hwndOwner As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;hInstance As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpszText As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpszCaption As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwStyle As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpszIcon As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwContextHelpId As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lpfnMsgBoxCallback As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwLanguageId As Long</div><div class="code_line">End Type</div><div class="code_line">&nbsp;</div><div class="code_line">Private Type MSGBOXDATA</div><div class="code_line">&nbsp;&nbsp; &nbsp;mbp As MSGBOXPARAMS</div><div class="code_line">&nbsp;&nbsp; &nbsp;pwndOwner As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;wLanguageId As Integer</div><div class="code_line">&nbsp;&nbsp; &nbsp;pidButton As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;ppszButtonText As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;cButtons As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;DefButton As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;CancelId As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwTimeout As Long</div><div class="code_line">End Type</div><div class="code_line">&nbsp;</div><div class="code_line">Public Function MyMsgBox(ByVal lpszPrompt As String, ByVal lpszTitle As String, ByVal dwStyle As VbMsgBoxStyle, _</div><div class="code_line">&nbsp;&nbsp; &nbsp;ByVal nCancelId As Long, ByVal hParentWnd As Long, ParamArray sButtons()) As VbMsgBoxResult</div><div class="code_line">&nbsp;&nbsp; &nbsp;On Error Resume Next</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim mbd As MSGBOXDATA, idb() As Long, pszTexts() As String, i As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim osv As OSVERSIONINFO</div><div class="code_line">&nbsp;&nbsp; &nbsp;osv.dwOSVersionInfoSize = Len(osv)</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetVersionExA osv</div><div class="code_line">&nbsp;&nbsp; &nbsp;If osv.dwMajorVersion &#60; 5 Then MyMsgBox = -1: Exit Function</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;If hParentWnd = 0 Then hParentWnd = GetActiveWindow()</div><div class="code_line">&nbsp;&nbsp; &nbsp;With mbd</div><div class="code_line">&nbsp;&nbsp; &nbsp;.cButtons = UBound(sButtons): If Err.Number = 9 Then Err.Clear Else: .cButtons = .cButtons + 1</div><div class="code_line">&nbsp;&nbsp; &nbsp;If .cButtons &#62; 0 Then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ReDim idb(0 To .cButtons - 1), pszTexts(0 To .cButtons - 1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;For i = 0 To .cButtons - 1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;idb(i) = i + 1: pszTexts(i) = sButtons(i)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Next</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.DefButton = (dwStyle \ &amp;H100) And &amp;HF</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;If nCancelId &#62;= 1 And nCancelId &#60;= .cButtons Then .CancelId = nCancelId</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.pidButton = VarPtr(idb(0)): .ppszButtonText = VarPtr(pszTexts(0))</div><div class="code_line">&nbsp;&nbsp; &nbsp;Else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.pidButton = 0: .ppszButtonText = 0: .cButtons = 0: .DefButton = 0: .CancelId = 0</div><div class="code_line">&nbsp;&nbsp; &nbsp;End If</div><div class="code_line">&nbsp;&nbsp; &nbsp;With mbd.mbp</div><div class="code_line">&nbsp;&nbsp; &nbsp;.cbSize = Len(mbd.mbp)</div><div class="code_line">&nbsp;&nbsp; &nbsp;.dwStyle = (dwStyle And &amp;HFFF0&amp;) Or 1</div><div class="code_line">&nbsp;&nbsp; &nbsp;.hInstance = App.hInstance</div><div class="code_line">&nbsp;&nbsp; &nbsp;.hwndOwner = hParentWnd</div><div class="code_line">&nbsp;&nbsp; &nbsp;.lpszCaption = StrConv(lpszTitle, vbUnicode)</div><div class="code_line">&nbsp;&nbsp; &nbsp;.lpszText = StrConv(lpszPrompt, vbUnicode)</div><div class="code_line">&nbsp;&nbsp; &nbsp;.lpszIcon = 0</div><div class="code_line">&nbsp;&nbsp; &nbsp;End With</div><div class="code_line">&nbsp;&nbsp; &nbsp;If osv.dwMajorVersion = 5 And osv.dwMinorVersion &#62;= 1 Or osv.dwMajorVersion &#62; 5 Then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.dwTimeout = -1</div><div class="code_line">&nbsp;&nbsp; &nbsp;Else: .dwTimeout = 0</div><div class="code_line">&nbsp;&nbsp; &nbsp;End If</div><div class="code_line">&nbsp;&nbsp; &nbsp;End With</div><div class="code_line">&nbsp;&nbsp; &nbsp;MyMsgBox = SoftModalMessageBox(mbd)</div><div class="code_line">End Function</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Пользоваться так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Dim lButtonIndex As Long</div><div class="code_line">lButtonIndex = MyMsgBox(&quot;Текст сообщения&quot;, &quot;Заголовок&quot;, MY_MBOX_DEFAULT5 Or vbQuestion, 0, _</div><div class="code_line">&nbsp;&nbsp; &nbsp;0, &quot;Button1&quot;, &quot;Button2&quot;, &quot;Button3&quot;, &quot;Button4&quot;, &quot;Button5&quot;)</div></ol></div></div></div></div>]]></description>
        <author>ALXR</author>
        <category>Формы, окна, диалоги, десктоп</category>
      </item>
	
      </channel>
      </rss>
	