Войти

Показать полную графическую версию : [решено] Tip (GUICtrlSetTip) в n строк/Авторазбиение Tip на строки заданной длины


saavaage
19-09-2010, 15:41
Проблема:
есть, положим, простейший скрипт с подсказкой:

#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("OPPPPP", 619, 442, 189, 122)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)
$DriverErrors = GUICtrlCreateTabItem("XXXXXXXXXX")

GUICtrlCreateGroup("YYYYYYYYYYYYYYYY", 14, 40, 255, 345)

GUICtrlCreateLabel('Подсказка. Наведи мышку!', 300, 250, 250, 45)
GUICtrlSetTip(-1, 'Внимание! Для показа защищенных системных файлов, необходимо отмениь скрытие папок и файлов!')

GUICtrlCreateTabItem("")
GUISetState()

While 1
Sleep(100)
WEnd

Func CLOSEClicked()
Exit
EndFunc

Как сделать, чтобы подсказка выводилась в несколько строк? Как сделать, чтобы длина строки подсказки была определенной длины?

PS в справке ничего подобного не нашел :( . Версия Autoit 3.3.6.1

Заранее спасибо за любую помощь.

Creat0R
19-09-2010, 16:03
Как сделать, чтобы подсказка выводилась в несколько строк? »
Добавить @CRLF там где нужно разделить строку.

Как сделать, чтобы длина строки подсказки была определенной длины? »
StringLeft($sTip, N)?

saavaage
19-09-2010, 16:25
Creat0R, спасибо. Я был невнимателен: пробовал использовать @CRLF, но забывал ставить после @CRLF знак &.
Итак, правильный вариант :

GUICtrlSetTip(-1, 'Внимание! Для показа защищенных системных файлов,' & @CRLF & 'необходимо отмениь скрытие папок и файлов!')

Creat0R, по второму вопросу я был немного неточен.
Я хотел узнать, можно ли, задав длину подсказки, получить автоматический вывод текста подсказки в несколько строк?
То есть, у меня срока подсказки содержит 500 символов. Я задаю длину в 50 и получаю на мониторе подсказку в 10 строк? при этом разбиение происходит по словам - если граница строки приходится на слово, то слово не бьется, а перенос на следующую строку происходит после его окончания. Не уверен, но, возможно, это можно реализовать через регулярные выражения + @CRLF?

Creat0R
19-09-2010, 17:24
срока подсказки содержит 500 символов. Я задаю длину в 50 и получаю на мониторе подсказку в 10 строк? при этом разбиение происходит по словам - если граница строки приходится на слово, то слово не бьется, а перенос на следующую строку происходит после его окончания. »

Пример (http://autoit-script.ru/index.php/topic,1819.msg12983.html#msg12983):

$sStr = 'В соответствии со статьей 21 Закона от 21.07.1997 г. N 122-ФЗ "О государственной регистрации прав на недвижимое имущество и сделок с ним" срок исправления технических ошибок, допущенных при государственной регистрации прав, не должен превышать трех календарных дней с момента обнаружения ошибки или получения заявления от любого заинтересованного лица в письменной форме об исправлении технических ошибок. До получения заявителем документов после проведения государственной регистрации прав срок исправления технических ошибок осуществляется в течение дня, отведенного для получения документов.'

#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <GUIConstantsEx.au3>

$hGUI = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("_StringAlignment", 250, 150)

GUICtrlCreateCheckbox (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateCheckbox.htm)("Закон 122-ФЗ", 20, 20)
GUICtrlSetTip (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetTip.htm)(-1, _StringAlignment($sStr, 50, 4))

GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@sw_show), $hGUI)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$nMsg = GUIGetMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIGetMsg.htm)()

Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) $nMsg
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $GUI_EVENT_CLOSE
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _StringAlignment($sStr, $iWidth, $iIndent = 0, $iMaxExpand = -1, $fLastExpand = 0)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $Part, $Pos, $Count = 0, $Prev = 0, $Stop = 0, $Result = '', $Tab = ''

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iIndent > 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $iIndent
$Tab &= @TAB (http://www.autoitscript.com/autoit3/docs/macros.htm#@tab)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$sStr = $Tab & StringStripWS (http://www.autoitscript.com/autoit3/docs/functions/StringStripWS.htm)($sStr, 7)
Do (http://www.autoitscript.com/autoit3/docs/keywords.htm#Do)
$Pos = StringInStr (http://www.autoitscript.com/autoit3/docs/functions/StringInStr.htm)($sStr, ' ', 0, 1, $Prev + 1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $Pos Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$Pos = StringLen (http://www.autoitscript.com/autoit3/docs/functions/StringLen.htm)($sStr)
$Stop = 1
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $Pos > $iWidth + 1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$Part = StringLeft (http://www.autoitscript.com/autoit3/docs/functions/StringLeft.htm)($sStr, $Prev - 1)
$sStr = StringTrimLeft (http://www.autoitscript.com/autoit3/docs/functions/StringTrimLeft.htm)($sStr, $Prev)
$Result &= _StringExpand($Part, $iWidth, $iMaxExpand) & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)
$Prev = $Pos - $Prev
$Count += 1
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$Prev = $Pos
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Until (http://www.autoitscript.com/autoit3/docs/keywords.htm#Until) $Stop
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) ($fLastExpand) And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) ($Count) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sStr = _StringExpand($sStr, $iWidth, $iMaxExpand)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$Result &= $sStr
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iIndent > 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$Result = StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($Result, $Tab, StringReplace (http://www.autoitscript.com/autoit3/docs/functions/StringReplace.htm)($Tab, @TAB (http://www.autoitscript.com/autoit3/docs/macros.htm#@tab), ' '), 1)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $Result
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_StringAlignment

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _StringExpand($sStr, $iWidth, $iMaxExpand)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aWord, $Add, $Num, $Space

; $sStr = StringStripWS($sStr, 7)
$aWord = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)($sStr, ' ')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $aWord[0] < 2 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $sStr
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$Num = $iWidth - (StringLen (http://www.autoitscript.com/autoit3/docs/functions/StringLen.htm)($sStr) - $aWord[0] + 1)
$Add = Mod (http://www.autoitscript.com/autoit3/docs/functions/Mod.htm)($Num, $aWord[0] - 1)
$Num = ($Num - $Add) / ($aWord[0] - 1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) ($iMaxExpand > 0) And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) ($Num >= $iMaxExpand) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$Num = $iMaxExpand
$Add = 0
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$Space = StringFormat (http://www.autoitscript.com/autoit3/docs/functions/StringFormat.htm)('%' & $Num & 's', '')
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $Add
$aWord[$i] &= ' '
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
$sStr = $aWord[1]
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 2 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aWord[0]
$sStr &= $Space & $aWord[$i]
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $sStr
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_StringExpand

saavaage
19-09-2010, 17:39
Creat0R, если бы можно было, нажал бы спасибо 3 раза. Спасибо! Тема решена.




© OSzone.net 2001-2012