Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Переделанная функция (взята у 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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 17:01, 28-06-2007 | #114