Переделанная функция (
взята у
Smoke_N на
офф. форуме 
) _MsgBox() - Если текста для показа слишком много, то текст можно прокрутить и просмотреть (используется Edit-элемент, а для прокрутки есть две самопальные стрелочки

), окно MsgBox меняет размеры в соответствии с текстом и с разрешением экрана.
Код:

$Text = ""
For $i = 1 To 50
$Text &= "Line " & $i & " Line " & $i & " Line " & $i & @CRLF
Next
_MsgBox(104, "Test", $Text)
Func _MsgBox($mb_Icon, $mb_Title, $mb_Text, $mb_Time = '')
Local $StrnLenText = MsgLongestString($mb_Text)
Local $NumberOfLines = (UBound(StringSplit($mb_Text, @CRLF)) - 1) * 6.5
If (160 + $NumberOfLines) >= @DesktopHeight Then $NumberOfLines = @DesktopHeight - 200
Local $Button1Txt = "OK"
Local $Button2Txt = "Cancel"
Local $MsgValue = 0
Local $Timer = ''
Local $ScrollLabel1 = -1, $ScrollLabel2 = -1
Local $iMsgBox = GUICreate($mb_Title, $StrnLenText + 190, 100 + $NumberOfLines, -1, -1, 0x00400000, 0x00000008)
Local $Edit = GUICtrlCreateEdit($mb_Text, 60, 10, $StrnLenText + 105, 30 + $NumberOfLines, 64+128+2048+4, 0x990)
GUICtrlCreateIcon(@SystemDir & "\User32.dll", $mb_Icon, 10, 10, 35, 35)
$Button1 = GUICtrlCreateButton($Button1Txt, 30 + ($StrnLenText / 2), 45 + $NumberOfLines, 60 + StringLen($Button1Txt), 25)
$Button2 = GUICtrlCreateButton($Button2Txt, 100 + ($StrnLenText / 2), 45 + $NumberOfLines, 60 + StringLen($Button2Txt), 25)
If $NumberOfLines = (@DesktopHeight - 200) Then
$ScrollLabel1 = GUICtrlCreateLabel("т", 40, ((100 + $NumberOfLines)/2)+20, 20)
GUICtrlSetTip(-1, "Click here to scroll Down")
GUICtrlSetFont(-1, 18, 600, 0, "Wingdings")
$ScrollLabel2 = GUICtrlCreateLabel("с", 40, ((100 + $NumberOfLines)/2)-20, 20)
GUICtrlSetTip(-1, "Click here to scroll UP")
GUICtrlSetFont(-1, 18, 600, 0, "Wingdings")
EndIf
GUISetState()
If $mb_Time <> 0 Then $Timer = TimerInit()
While 1
$imsg = GUIGetMsg()
Select
Case $imsg = $Button1
$MsgValue = 6
ExitLoop
Case $imsg = $Button2
$MsgValue = 7
ExitLoop
Case $imsg = $ScrollLabel1
ControlSend($iMsgBox, "", $Edit, "{PgDn}")
Case $imsg = $ScrollLabel2
ControlSend($iMsgBox, "", $Edit, "{PgUp}")
Case $mb_Time <> 0
If TimerDiff($Timer) / 1000 >= $mb_Time Then ExitLoop
EndSelect
WEnd
GUIDelete($iMsgBox)
Return $MsgValue
EndFunc
Func MsgLongestString($sText)
Local $Times = ''
Local $sSplit = StringSplit($sText, @CRLF)
If Not @error Then
ArraySortByLen($sSplit)
If StringLen($sSplit[1]) <= 100 Then $Times = 2.25
If StringLen($sSplit[1]) >= 101 And StringLen($sSplit[1]) <= 150 Then $Times = 2.5
If StringLen($sSplit[1]) >= 151 And StringLen($sSplit[1]) <= 201 Then $Times = 3
If StringLen($sSplit[1]) >= 202 Then $Times = 3.25
Return Round(StringLen($sSplit[1])*$Times)
Else
If StringLen($sText) <= 100 Then $Times = 2.25
If StringLen($sText) >= 101 And StringLen($sText) <= 150 Then $Times = 2.5
If StringLen($sText) >= 151 And StringLen($sText) <= 201 Then $Times = 3
If StringLen($sText) >= 202 Then $Times = 3.25
Return Round(StringLen($sText)*$Times)
EndIf
EndFunc
Func ArraySortByLen(ByRef $nArray, $Start = 1)
For $i = $Start To UBound($nArray) - 2
Local $SE = $i
For $x = $i To UBound($nArray) - 1
If StringLen($nArray[$SE]) < StringLen($nArray[$x]) Then $SE = $x
Next
Local $HLD = $nArray[$i]
$nArray[$i] = $nArray[$SE]
$nArray[$SE] = $HLD
Next
EndFunc