Что нового

ToolTip фиксированная ширина

running-frag

why me?
Сообщения
441
Репутация
60
задача состоит вот в чём, есть длинный текст с проблемами (не суть), задача показать ToolTip с фиксированными размерами (в нашем случае это только ширина), т.е. не зависимо будет там один символ или строка в два абзаца

при чём текс должен сам переносится если не влазит в ширину

если по аналогии
HTML: то нужен DIV с точной шириной, в котором пишем "Войну и Мир"
ICQ\QIP: всплиывающие окна когда приходит новое сообщение

в итоге нужно просто "задать точно ширину ToolTip'a"
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
UDF конечно круто, а без него, ну как нибудь "попроще", ведь нужно только задать ширину... :(

ps: спасибо за линк это будет самый последний вариант, если хоть один можно реализовать


Добавлено:
Сообщение автоматически объединено:

Нашёл код. В прицепи он работает на ура для одиночной строки. Если строка слишком маленькая тупо забиваем пробелами ...

Код:
#include <GUIConstantsEx.au3>
#include <winapi.au3>

Opt('MustDeclareVars', 1)

Example()


Func Example()
    Local $msg, $lbl, $lbl2
    ;Local $sTT = "This is a sentence which is unnecessarily long just so that I can demonstrate a way to wrap text and doesn't assume a fixed space font"
	Local $sTT = "text                                                                                                                   1                               "
	Local $sTT2 = "text                                                                              1                               "
	
    GUICreate("My GUI control tip") ; will create a dialog box that when displayed is centered

    $lbl = GUICtrlCreateLabel("my label", 10, 20)
	$lbl2 = GUICtrlCreateLabel("my label", 10, 60)

    GUISetState()

    SetTipWrapped($lbl, $sTT, 300)
	SetTipWrapped($lbl2, $sTT2, 300)
    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
EndFunc ;==>Example


Func SetTipWrapped($iCtrl, $stext, $iMaxWid)
    Local $n
    GUICtrlSetTip($iCtrl, $stext);no wrapping to start
    $stext = StringReplace($stext, @CRLF, @CR)
    $stext = StringReplace($stext, @LF, @CR)

    Local $hTT = _WinAPI_GetWindowDC(WinGetHandle($stext))
    ConsoleWrite(Hex($hTT) & @CRLF)
    Local $aS = WinGetPos($hTT)
 
    Local $ts = _WinAPI_GetTextExtentPoint32($hTT, $stext)
    

    Local $iLinestart = 1, $iLineLen, $iLastLen
    Local $swrap = ''
    While $iLinestart <= StringLen($stext); + 1

    While $iLineLen + $iLinestart <= StringLen($stext)
		If StringMid($stext, $iLinestart, 1) <> ' ' Then ExitLoop
		$iLinestart += 1
    WEnd
    
    $iLineLen = 1
    $iLastLen = 1
    While $iLineLen + $iLinestart < StringLen($stext) + 1
		If StringMid($stext, $iLinestart + $iLineLen, 1) = ' ' Or $iLineLen + $iLinestart >= StringLen($stext) Then
			
			Local $mid = StringMid($stext, $iLinestart, $iLineLen)
			
			$ts = _WinAPI_GetTextExtentPoint32($hTT, $mid)
			
			If DllStructGetData($ts, 1) > $iMaxWid Then
			
			If $iLastLen > 1 Then $iLineLen = $iLastLen
				
			$swrap &= StringMid($stext, $iLinestart, $iLineLen) & @CR
			$iLinestart += $iLineLen + 1
			ExitLoop
		EndIf
	
		If $iLineLen + $iLinestart >= StringLen($stext) Then
			
			$swrap &= StringMid($stext, $iLinestart, $iLineLen + 1)
			$iLinestart += $iLineLen + 1
			ExitLoop
		EndIf
		
		$iLastLen = $iLineLen
	ElseIf StringMid($stext, $iLinestart + $iLineLen, 1) = @CR Then
		
		$swrap &= StringMid($stext, $iLinestart, $iLineLen)
		$iLinestart = $iLineLen + 1
		ExitLoop

	EndIf
	
	$iLineLen += 1
		
    WEnd


WEnd
    GUICtrlSetTip($iCtrl, $swrap)

EndFunc ;==>SetTipWrapped


взято отсюда http://www.autoitscript.com/forum/topic/104511-tooltip-wrapping/

но есть проблемка одна, если выводить массив - одно строка одно значение тут у нас начинается проблема с шириной


Добавлено:
Сообщение автоматически объединено:

Viktor1703 и я так и не понял как работает UDF и как в нём сделать то что мне нужно, описания функций тоже отсутсвуют как в самом файле .au3 так и в топике
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Так а что там может быть не понятного, по названиям функций и так можно догадаться для чего они.
 
Верх