|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Tip (GUICtrlSetTip) в n строк/Авторазбиение Tip на строки заданной длины |
|
[решено] Tip (GUICtrlSetTip) в n строк/Авторазбиение Tip на строки заданной длины
|
Ветеран Сообщения: 904 |
Проблема:
есть, положим, простейший скрипт с подсказкой: #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 в справке ничего подобного не нашел ![]() Заранее спасибо за любую помощь. |
|
------- Отправлено: 15:41, 19-09-2010 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 16:03, 19-09-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 904
|
Профиль | Отправить PM | Цитировать Creat0R, спасибо. Я был невнимателен: пробовал использовать @CRLF, но забывал ставить после @CRLF знак &.
Итак, правильный вариант : GUICtrlSetTip(-1, 'Внимание! Для показа защищенных системных файлов,' & @CRLF & 'необходимо отмениь скрытие папок и файлов!') Я хотел узнать, можно ли, задав длину подсказки, получить автоматический вывод текста подсказки в несколько строк? То есть, у меня срока подсказки содержит 500 символов. Я задаю длину в 50 и получаю на мониторе подсказку в 10 строк? при этом разбиение происходит по словам - если граница строки приходится на слово, то слово не бьется, а перенос на следующую строку происходит после его окончания. Не уверен, но, возможно, это можно реализовать через регулярные выражения + @CRLF? |
------- Последний раз редактировалось saavaage, 19-09-2010 в 16:54. Отправлено: 16:25, 19-09-2010 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата saavaage:
$sStr = 'В соответствии со статьей 21 Закона от 21.07.1997 г. N 122-ФЗ "О государственной регистрации прав на недвижимое имущество и сделок с ним" срок исправления технических ошибок, допущенных при государственной регистрации прав, не должен превышать трех календарных дней с момента обнаружения ошибки или получения заявления от любого заинтересованного лица в письменной форме об исправлении технических ошибок. До получения заявителем документов после проведения государственной регистрации прав срок исправления технических ошибок осуществляется в течение дня, отведенного для получения документов.' #include <GUIConstantsEx.au3> $hGUI = GUICreate("_StringAlignment", 250, 150) GUICtrlCreateCheckbox("Закон 122-ФЗ", 20, 20) GUICtrlSetTip(-1, _StringAlignment($sStr, 50, 4)) GUISetState(@SW_SHOW, $hGUI) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func _StringAlignment($sStr, $iWidth, $iIndent = 0, $iMaxExpand = -1, $fLastExpand = 0) Local $Part, $Pos, $Count = 0, $Prev = 0, $Stop = 0, $Result = '', $Tab = '' If $iIndent > 0 Then For $i = 1 To $iIndent $Tab &= @TAB Next EndIf $sStr = $Tab & StringStripWS($sStr, 7) Do $Pos = StringInStr($sStr, ' ', 0, 1, $Prev + 1) If Not $Pos Then $Pos = StringLen($sStr) $Stop = 1 EndIf If $Pos > $iWidth + 1 Then $Part = StringLeft($sStr, $Prev - 1) $sStr = StringTrimLeft($sStr, $Prev) $Result &= _StringExpand($Part, $iWidth, $iMaxExpand) & @CRLF $Prev = $Pos - $Prev $Count += 1 Else $Prev = $Pos EndIf Until $Stop If ($fLastExpand) And ($Count) Then $sStr = _StringExpand($sStr, $iWidth, $iMaxExpand) EndIf $Result &= $sStr If $iIndent > 0 Then $Result = StringReplace($Result, $Tab, StringReplace($Tab, @TAB, ' '), 1) EndIf Return $Result EndFunc ;==>_StringAlignment Func _StringExpand($sStr, $iWidth, $iMaxExpand) Local $aWord, $Add, $Num, $Space ; $sStr = StringStripWS($sStr, 7) $aWord = StringSplit($sStr, ' ') If $aWord[0] < 2 Then Return $sStr EndIf $Num = $iWidth - (StringLen($sStr) - $aWord[0] + 1) $Add = Mod($Num, $aWord[0] - 1) $Num = ($Num - $Add) / ($aWord[0] - 1) If ($iMaxExpand > 0) And ($Num >= $iMaxExpand) Then $Num = $iMaxExpand $Add = 0 EndIf $Space = StringFormat('%' & $Num & 's', '') For $i = 1 To $Add $aWord[$i] &= ' ' Next $sStr = $aWord[1] For $i = 2 To $aWord[0] $sStr &= $Space & $aWord[$i] Next Return $sStr EndFunc ;==>_StringExpand |
|
------- Отправлено: 17:24, 19-09-2010 | #4 |
Ветеран Сообщения: 904
|
Профиль | Отправить PM | Цитировать Creat0R, если бы можно было, нажал бы спасибо 3 раза. Спасибо! Тема решена.
|
|
------- Отправлено: 17:39, 19-09-2010 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Delphi - строки! | nolx | Программирование и базы данных | 0 | 31-05-2010 19:28 | |
MySQL - Автозамена строки из другой строки - trigger? procedure ? | BugZZ | Программирование и базы данных | 0 | 18-09-2009 09:51 | |
[решено] Visual Tool Tip(добавление в автозагрузку) | KillHunter | Автоматическая установка приложений | 2 | 15-05-2008 18:54 | |
строки в С++ | rodman | Программирование и базы данных | 7 | 02-07-2004 12:54 | |
Строки в С\С++ | netmax | Программирование и базы данных | 30 | 03-11-2003 18:57 |
|