1. win32lib: support for longer than 80-char long tooltips
- Posted by Tone Škoda <tskoda at email.si> Feb 10, 2005
- 525 views
i modified win32lib so that longer than 80 characters long tooltips are whole shown. Derek, you could add this to win32lib. it's from MSDN article "HOWTO: Display More Than 80 Characters in a Tooltip Control" i dont know if i did it correct. it's for win32lib Version: 0.60.5 05/September/2004 article says u have to use TTS_NOPREFIX flag, so: setHintEx (id, "tip", TTS_NOPREFIX) better add it to win32lib docs. I also made it so that width of tooltip is auto calculated, based on widest tooltip text line. -- start tone skoda: support for longer than 80-char long tooltips atom TTTextPtr TTTextPtr = 0 -- end tone skoda ---------------------------------------------------- function fDoTTN_GETDISPINFO(integer id, atom hWnd, atom wParam, atom lParam) ---------------------------------------------------- sequence lText atom hFrom atom lTextLen -- start tone skoda: autowidth of tooltip sequence lineText integer largestWid, lineWid sequence screenSize -- end tone skoda id = getId( wParam ) if id = 0 then id = w32fetch(lParam, NMHDR_idFrom ) end if if id > 0 and id <= length(ctrl_Hint_Text) then if atom(ctrl_Hint_Text[id]) then if integer(ctrl_Hint_Text[id]) and ctrl_Hint_Text[id] >= 0 then -- The user routine returns either a string or a sequence in -- the form of { string, width }, eg. {"Sample text", 120} lText = call_func(ctrl_Hint_Text[id], {id, ctrl_Hint_Width[id]}) if length(lText) = 2 and sequence(lText[1]) and integer(lText[2]) then ctrl_Hint_Width[id] = lText[2] lTextLen = lText[2] lText = lText[1] elsif length(lText) = 0 then lTextLen = 0 else lTextLen = ctrl_Hint_Width[id] end if else lText = sprintf("Invalid routine_id %g", ctrl_Hint_Text[id]) lTextLen = ctrl_Hint_Width[id] end if else lText = ctrl_Hint_Text[id] lTextLen = ctrl_Hint_Width[id] end if w32store( lParam, NMTTDISPINFO_szText, lText ) -- start tone skoda: support for longer than 80-char long tooltips if length (lText) > 80 then if TTTextPtr != 0 then w32release_mem (TTTextPtr) end if TTTextPtr = w32acquire_mem (0, lText) w32store( lParam, NMTTDISPINFO_lpszText, TTTextPtr ) end if -- end tone skoda -- start tone skoda: autowidth of tooltip -- 1.get largestWid lineText = "" largestWid = 0 for i = 1 to length (lText) do if lText [i] = '\n' or i = length (lText) then if i = length (lText) then lineText &= lText [i] end if lineWid = getTextWidth (tooltipControl, lineText) if lineWid > largestWid then largestWid = lineWid end if lineText = "" else lineText &= lText [i] end if end for -- 2. get lTextLen, if larger than screen then adjust to screen lTextLen = largestWid screenSize = getCtlSize( Screen ) if lTextLen > screenSize [1] then lTextLen = screenSize [1] end if -- end tone skoda VOID = w32Func(xSendMessage,{w32fetch(lParam, NMHDR_hwndFrom ), TTM_SETMAXTIPWIDTH, 0, lTextLen}) end if return {kMainMsg} end function
2. Re: win32lib: support for longer than 80-char long tooltips
- Posted by Al Getz <Xaxo at aol.com> Feb 10, 2005
- 551 views
Something sounds 'fishing' Sounds like you'd want to use a multiline tool tip control rather than a single line...looks neater on screen anyway. Take care, Al And, good luck with your Euphoria programming! My bumper sticker: "I brake for LED's"