Joined: June 18th, 2008, 8:36 am Posts: 4923 Location: AHK Forum
|
For AHK_L or AHK_H I reccomend to use TT().
Many thanks to:
- DerRaphael for sTooltip - colored standard tooltip with timeout.
- Sean for BalloonTip
- Superfraggle for Add ToolTips to controls.
- Lexikos for Menu Icons v2 (stdlib)
- majkinetor for RemoteBuffer 2.0 (requiered to show ToolTip at TrayIcon coordinates)
Important Information wrote: Please note some options like Close Button and Link will require Win2000++ (+version 6.0 of comctl32.dll) Background and Text color do not work in Vista ToolTips, but you can disable it using Q option. AutoHotKey Version 1.0.48++ is required due to "assume static mode" If you use 1 ToolTip for several controls, the only difference between those can be the text. - Rest, like Title, color and so on, will be valid globally In Vista you can use Option Q (Q1) to disable Vista or XP Theme for the ToolTip - this option will enable usual ToolTip and you can use colors
Options wrote: A - Aim ConrolId or ClassNN (Button1, Edit2, ListBox1, SysListView321...) - using this, ToolTip will be shown when you point mouse on a control - D (delay) can be used to change how long ToolTip is shown - W (wait) can wait for specified seconds before ToolTip will be shown - Some controls like Static require a subroutine to have a ToolTip!!!
B and F - Specify here the color for ToolTip in 6-digit hexadecimal RGB code - B = Background color, F = Foreground color (text color) - this can be 0x00FF00 or 00FF00 or Blue, Lime, Black, White...
C - Close button for ToolTip/BalloonTip. See ToolTip actions how to use it
D - Delay. This option will determine how long ToolTip should be shown.30 sec. is maximum - this option is also available when assigning the ToolTip to a control.
E - Edges for ToolTip, Use this to set margin of ToolTip window (space between text and border) - Supply Etop.left.bottom.right in pixels, for example: E10.0.10.5
G - Execute one or more internal Labels of ToolTip function only. For example: - Track the position only, use ToolTip(1,"","","Xcaret Ycaret gTTM_TRACKPOSITION") - When X+Y are empty (= display near mouse position) you can use TTM_UPDATE - Update text only, use ToolTip(1,"text","","G1"). Note specify L1 if links are used. - Update title only, use ToolTip(1,"","Title","G1") - Hide ToolTip, use ToolTip(1,"","","gTTM_POP") - To show ToolTip again use ToolTip(1,"","","gTTM_TRACKPOSITION.TTM_TRACKACTIVATE") - Update background color + text color, specify . between gLabels to execute several: - ToolTip(1,"","","BBlue FWhite gTTM_SETTIPBKCOLOR.TTM_SETTIPTEXTCOLOR") - Following labels can be used: TTM_SETTITLEA + TTM_SETTITLEW (title+I), TTM_POPUP, TTM_POP TTM_SETTIPBKCOLOR (B), TTM_SETTIPTEXTCOLOR (F), TTM_TRACKPOSITION (N+X+Y), TTM_SETMAXTIPWIDTH (R), TTM_SETMARGIN (E), TT_SETTOOLINFO (text+A+P+N+X+Y+S+L) TTM_SETWINDOWTHEME (Q)
H - Hide ToolTip after a link is clicked.See L option
I - Icon 1-3, e.g. I1. If this option is missing no Icon will be used (same as I0) - 1 = Info, 2 = Warning, 3 = Error, > 3 is meant to be a hIcon (handle to an Icon) Use Included MI_ExtractIcon and GetAssociatedIcon functions to get hIcon
J - Justify ToolTip to center of control
L - Links for ToolTips. Here an example for Links feature and another one for dynamic Text.Code: OnMessage(0x4e,"WM_NOTIFY") ;Will make LinkClick and ToolTipClose possible WM_NOTIFY(wParam, lParam, msg, hWnd) { ToolTip("",lParam) } Sleep, 10 ToolTip(1,"<a>Click</a>`n<a>Onother one</a>`n" . "<a This link is different`nit uses different text>Different</a>`n" . "<a>ExitApp</a>","ClickMe","L1 P99 C1") Return ToolTip: link:=ErrorLevel SetTimer, MsgBox, -10 Return
ToolTipClose: ExitApp
MsgBox: If Link=ExitApp ExitApp MsgBox % Link Return
Code: OnMessage(0x4e,"WM_NOTIFY") Gui,Add,Button,,Time Gui,Add,Button,,Username Gui,Add,Button,,User is Admin? Gui,Add,Button,,IP addresses Loop 4 ToolTip("Button1"," ","","p1 aButton" . A_Index) gui,show Sleep, 3000 ToolTip("Button1","hallo","","G1") Return
WM_NOTIFY(wParam,lParam){ If (control:=ToolTip("",lparam)){ Tool:=ErrorLevel MouseGetPos,,,,ClassNN If (ClassNN="Button1"){ FormatTime,text,%A_Now%,HH:mm:ss Title:="Time" } else if (ClassNN="Button2"){ text:=A_UserName,title:="UserName" } else if (ClassNN="Button3"){ text:=(A_ISAdmin ? "Yes" : "No"),title:="User is Admin?" } else if (ClassNN="Button4"){ text:= "1: " A_IPAddress1 "`n2: " A_IPAddress2 "`n3: " A_IPAddress3 "`n4: " A_IPAddress4 title:="IP Addresses" } ToolTip(control,text,title,"G1 A" . ErrorLevel) } }
GuiClose: ExitApp
M - Mouse click-trough. So a click will be forwarded to the window underneath ToolTip
N - Do NOT activate ToolTip (N1), To activate (show) call ToolTip(1,"","","gTTM_TRACKACTIVATE")
O - Oval ToolTip (BalloonTip). Specify O1 to use a BalloonTip instead of ToolTip.
P - Parent window hWnd or GUI number. This will assign a ToolTip to a window. - Reqiered to assign ToolTip to controls and actions.
Q - Quench Style/Theme. Use this to disable Theme of ToolTip. Using this option you can have for example colored ToolTips in Vista.
R - Restrict width. This will restrict the width of the ToolTip. So if Text is to long it will be shown in several lines
S - Show at coordinates regardless of position. Specify S1 to use that feature - normally it is fed automaticaly to show on screen
T - Transparency. This option will apply Transparency to a ToolTip. - this option is not available to ToolTips assigned to a control.
V - Visible: even when the parent window is not active, a control-ToolTip will be shown
W - Wait time in seconds (max 30) before ToolTip pops up when pointing on one of controls.
X and Y - Coordinates where ToolTip should be displayed, e.g. X100 Y200 - leave empty to display ToolTip near mouse - you can specify Xcaret Ycaret to display at caret coordinates
A few examples: InfoToolTipCode: ;-- Build GUI gui -MinimizeBox Gui +LastFound GuiHwnd:=WinExist() gui Add,Button,w150 hwndButton1_hWnd gButton1,Test Button 1 Tip:="Button 1: Press me to change my tooltip" ToolTip(1,Tip,"","A" . Button1_hWnd . " P" . GuiHwnd)
gui Add,Button,y+0 w150 hwndButton2_hWnd gButton2,Test Button 2 Tip:="Button 2: Press me to turn off the tooltip for this button" ToolTip(2,Tip,"","A" . Button2_hWnd . " P" . GuiHwnd)
gui Add,Button,y+0 w150 hwndButton3_hWnd gButton3,Test Button 3 Tip= (ltrim A Multiline Test Tooltip 2nd line 3rd line 4th line. Press me to turn off all tooltips ) ToolTip(3,Tip,"","A" . Button3_hWnd . " P" . GuiHwnd)
gui Add,Checkbox,w150 hwndCheckbox_hWnd,Checkbox Control Tip:="Tooltip for the Checkbox control" ToolTip(4,Tip,"","A" . Checkbox_hWnd . " P" . GuiHwnd)
gui Add,Radio,w150 hwndRadio_hWnd,Radio Control Tip:="Tooltip for the Radio control" ToolTip(5,Tip,"","A" . Radio_hWnd . " P" . GuiHwnd)
gui Add,Edit,w150 hwndEdit_hWnd,Edit Control Tip:="Tooltip for the Edit control" ToolTip(6,Tip,"","A" . Edit_hWnd . " P" . GuiHwnd)
gui Add,Text,w150 hwndText_hWnd gNull,Text Control Tip= (ltrim join`s Tooltip for the Text control.`nNote that the Tooltip for a Text control does not show unless a g-label for the control is defined. ) ToolTip(7,Tip,"","A" . Text_hWnd . " P" . GuiHwnd)
gui Add,Picture,w150 h100 hwndPicture_hWnd gNull,Picture.bmp Tip= (ltrim join`s Tooltip for the Picture control.`nNote that the Tooltip for a Picture control does not show unless a g-label for the control is defined. ) ToolTip(9,Tip,"","A" . Picture_hWnd . " P" . GuiHwnd)
gui Add,DropDownList,w150 r3 hwndDropDownList_hWnd,DropDownList Control||2|3 Tip:="Tooltip for the DropDownList control" ToolTip(10,Tip,"","A" . DropDownList_hWnd . " P" . GuiHwnd)
gui Add,ComboBox,w150 r3 hwndComboBox_hWnd,ComboBox Control||2|3 ;-- A ComboBox is actually two controls: An Edit control and a Drop-down ; button. Note that handle returned for this control is for the ; drop-down button, not for the Edit control. Tip= (ltrim join`s Tooltip for the drop-down button piece of the ComboBox control.`nNote that this tip is different than the Edit piece of the control. ) ToolTip(11,Tip,"","A" . ComboBox_hWnd . " P" . GuiHwnd)
gui Add,ListBox,w150 r3 hwndListBox_hWnd,ListBox Control||2|3 Tip:="Tooltip for the ListBox control" ToolTip(12,Tip,"","A" . ListBox_hWnd . " P" . GuiHwnd)
gui Add,ListView,w150 h50 hwndListView_hWnd,ListView Control Tip= (ltrim join`s Tooltip for the ListView control.`nNote that this tip is different than the header piece of the control. ) ToolTip(13,Tip,"","A" . ListView_hWnd . " P" . GuiHwnd)
gui Add,DateTime,w150 hwndDateTime_hWnd ;,DateTime Control Tip:="Tooltip for the DateTime control" ToolTip(14,Tip,"","A" . DateTime_hWnd . " P" . GuiHwnd)
gui Add,UpDown,hwndUpDown_hWnd Range 1-100,5 Tip:="Tooltip for the UpDown control" ToolTip(20,Tip,"","A" . UpDown_hWnd . " P" . GuiHwnd)
gui Show,,Tooltip Test
;-- Note: The following information cannot be collected until after the window ; has been rendered
;-- Get hWnd to the Edit control piece of the ComboBox ControlGet EditComboBox_hWnd,hWnd,,Edit2,Tooltip Test Tip= (ltrim join`s Tooltip for the Edit piece of the ComboBox control.`nNote that this tip is different than the drop-down button piece of this control. ) ToolTip(11,Tip,"","A" . EditComboBox_hWnd . " P" . GuiHwnd)
;-- Get hWnd to the Edit control piece of the ComboBox ControlGet ListViewHeader_hWnd,hWnd,,SysHeader321,Tooltip Test Tip= (ltrim join`s Tooltip for the header of the ListView control.`nNote that this tip is different than the rest of the ListView control. ) ToolTip(13,Tip,"","A" . ListViewHeader_hWnd . " P" . GuiHwnd) return
Button1: ToolTip(1,"Button 1: New Text","","AButton1 P" . GuiHwnd) return
Button2: ToolTip(2) return
Button3: ToolTip() MsgBox 64,ToolTips Cleared,All Tooltips destroyed. %A_Space% return
Null: return
GUIClose: GUIescape: Gui,Destroy ExitApp Return Code: OnMessage(0x4e,"WM_NOTIFY") ;Will make LinkClick and ToolTipClose possible OnMessage(0x404,"AHK_NotifyTrayIcon") ;Will pop up the ToolTip when you click on Tray Icon OnExit, ExitApp #NoEnv #SingleInstance Force
Restart: ToolTip(99,"Please click a link:`n`n" . "<a>My Favorite Websites</a>`n`n" . "<a>ToolTip Examples</a>`n`n" . "<a notepad.exe >Notepad</a>`n" . "<a explorer.exe >Explorer</a>`n" . "<a calc.exe >Calculator</a>`n" . "`n<a>Hide ToolTip</a>`n - To show this ToolTip again click onto Tray Icon" . "`n<a>ExitApp</a>`n" , "Welcome to ToolTip Control" , "L1 H1 O1 C1 T220 BLime FBlue I" . GetAssociatedIcon(A_ProgramFiles . "\Internet Explorer\iexplore.exe") . " P99 X" A_ScreenWidth . " Y" . A_ScreenHeight) Return
My_Favorite_Websites: ToolTip(98,"<a http://www.autohotkey.com >AutoHotkey</a> - <a http://de.autohotkey.com>DE</a>" . " - <a http://autohotkey.free.fr/docs/>FR</a> - <a http://www.autohotkey.it/>IT</a>" . " - <a http://www.script-coding.info/AutoHotkeyTranslation.html>RU</a>" . " - <a http://lukewarm.s101.xrea.com/>JP</a>" . " - <a http://lukewarm.s101.xrea.com/>GR</a>" . " - <a http://www.autohotkey.com/docs/Tutorial-Portuguese.html>PT</a>" . " - <a http://cafe.naver.com/AutoHotKey>KR</a>" . " - <a http://forum.ahkbbs.cn/bbs.php>CN</a>" . "`n<a http://www.google.com>Google</a> - <a http://www.maps.google.com>Maps</a>`n" . "<a http://social.msdn.microsoft.com/Search/en-US/?Refinement=86&Query=>MSDN</a>`n" , "My Websites" , "L1 O1 C1 BSilver FBlue I" . GetAssociatedIcon(A_ProgramFiles . "\Internet Explorer\iexplore.exe") . " P99") Return
ToolTip_Examples: ToolTip(97, "<a>Message Box ToolTip</a>`n" . "<a>Change ToolTip</a>`n" . "<a>ToolTip Loop #1</a>`n" . "<a>ToolTip Loop #2</a>`n" . "<a>ToolTip Loop #3</a>`n`nClose to return to previous ToolTip" , "ToolTip Examples" , "L1 O1 C1 BYellow FBlue I" . GetAssociatedIcon(A_ProgramFiles . "\Internet Explorer\iexplore.exe") . " P99") Return
99ToolTip: If InStr(link:=ErrorLevel,"http://") Run iexplore.exe %link% else if IsLabel(link:=RegExReplace(link,"[^\w\.]","_")) SetTimer % link,-150 else if link { Run % link SetTimer, Restart, -100 } Return
98ToolTip: Run iexplore.exe %ErrorLevel% Return
97ToolTip: IsLabel(ErrorLevel:=RegExReplace(ErrorLevel,"[^\w]","_")) SetTimer % ErrorLevel,-100 Return
99ToolTipClose: MsgBox,262148,Closing ToolTip..., ToolTip is about to close`nClick no to disable ToolTip`n -You can show it again by clicking onto the Tray Icon`nDo you want to exit script? IfMsgBox Yes ExitApp Return
97ToolTipClose: 98ToolTipClose: SetTimer, Restart, -100 Return
WM_NOTIFY(wParam, lParam, msg, hWnd){ ToolTip("",lParam,"") }
AHK_NotifyTrayIcon(wParam, lParam) { If (lparam = 0x201 or lparam = 0x202) SetTimer, Restart, -250 }
Hide_ToolTip: ToolTip(99) Return Execute: Run %ErrorLevel%.exe SetTimer, Restart, -100 Return
ExitApp: Loop, Parse, #_hIcons, | If A_LoopField DllCall("DestroyIcon",UInt,%A_LoopField%) ExitApp Return
ToolTip_Loop__1: ToolTip(100,"`nJust an example ToolTip following mouse movements" ,"This ToolTip will be destroyed in " . 4 . " Seconds","o1 I" . GetAssociatedIcon(A_AhkPath) . " B0000FF FFFFFFF") Start:=A_TickCount end= While, end < 10 { ToolTip(100,"In this example text and Title are updated continuously.`nTickCount:" . A_TickCount,"This ToolTip will be destroyed in " . 11 - Round(end:=(A_TickCount-Start)/1000) . " Seconds","I" . GetAssociatedIcon(A_AhkPath)) } ToolTip(100) Return ToolTip_Loop__2: end= ToolTip(100,"In this example only position is tracked.","This ToolTip will be destroyed in 10 Seconds","D10 I" . GetAssociatedIcon(A_AhkPath) . " B0000FF FFFFFFF") ToolTip(100) Return
ToolTip_Loop__3: end= ToolTip(100,"`nHere only title is being changed" ,"This ToolTip will be destroyed in 10 Seconds","I" . GetAssociatedIcon(A_AhkPath) . " B0000FF FFFFFFF") Start:=A_TickCount While, end < 10 { ToolTip(100,"","This ToolTip will be destroyed in " . 11 - Round(end:=(A_TickCount-Start)/1000) . " Seconds","I" . GetAssociatedIcon(A_AhkPath)) } ToolTip(100) Return
Message_Box_Tooltip: SetTimer,proceed, -200 MsgBox,4,Test,Hallo,`nPoint onto yes or no proceed: hwnd:=WinExist("Test ahk_class #32770") ToolTip(101,"Click here to accept and proceed.","Here you see an example how to assign a ToolTip to MsgBox controls","I1 B00FF00 AButton1 P" . hwnd) ToolTip(101,"Click here to refuse and proceed","","AButton2 P" . hwnd) IfWinExist Test ahk_class #32770 { WinWaitClose, Test ahk_class #32770 Return } ToolTip(101) Return
Change_ToolTip: Gui, Add,Button,,Point your mouse cursor here Gui,+LastFound ToolTip(1,"Test deleting and creating same Tooltip","TEST","Abutton1 P" . WinExist()) Gui,Show Sleep, 5000 ToolTip(1) Gui,Destroy Sleep, 1000 Gui, Add,Button,,Move your mouse cursor a little Gui,+LastFound ToolTip(1,"Test deleting and creating same Tooltip`nTooltips were destroyed and recreated.","New Tooltip with different text and title.","Abutton1 P" . WinExist()) Gui,Show Sleep, 5000 Gui,Destroy ToolTip(1) Return Functions and info: Code: /* ToolTip() by HotKeyIt http://www.autohotkey.com/forum/viewtopic.php?t=40165
Syntax: ToolTip(Number,Text,Title,Options)
Return Value: ToolTip returns hWnd of the ToolTip
| Options can include any of following parameters separated by space | Option | Meaning | A | Aim ConrolId or ClassNN (Button1, Edit2, ListBox1, SysListView321...) | | - using this, ToolTip will be shown when you point mouse on a control | | - D (delay) can be used to change how long ToolTip is shown | | - W (wait) can wait for specified seconds before ToolTip will be shown | | - Some controls like Static require a subroutine to have a ToolTip!!! | B + F | Specify here the color for ToolTip in 6-digit hexadecimal RGB code | | - B = Background color, F = Foreground color (text color) | | - this can be 0x00FF00 or 00FF00 or Blue, Lime, Black, White... | C | Close button for ToolTip/BalloonTip. See ToolTip actions how to use it | D | Delay. This option will determine how long ToolTip should be shown.30 sec. is maximum | | - this option is also available when assigning the ToolTip to a control. | E | Edges for ToolTip, Use this to set margin of ToolTip window (space between text and border) | | - Supply Etop.left.bottom.right in pixels, for example: E10.0.10.5 | G | Execute one or more internal Labels of ToolTip function only. | | For example: | | - Track the position only, use ToolTip(1,"","","Xcaret Ycaret gTTM_TRACKPOSITION") | | - When X+Y are empty (= display near mouse position) you can use TTM_UPDATE | | - Update text only, use ToolTip(1,"text","","G1"). Note specify L1 if links are used. | | - Update title only, use ToolTip(1,"","Title","G1") | | - Hide ToolTip, use ToolTip(1,"","","gTTM_POP") | | - To show ToolTip again use ToolTip(1,"","","gTTM_TRACKPOSITION.TTM_TRACKACTIVATE") | | - Update background color + text color, specify . between gLabels to execute several: | | - ToolTip(1,"","","BBlue FWhite gTTM_SETTIPBKCOLOR.TTM_SETTIPTEXTCOLOR") | | - Following labels can be used: TTM_SETTITLEA + TTM_SETTITLEW (title+I), TTM_POPUP, TTM_POP | | TTM_SETTIPBKCOLOR (B), TTM_SETTIPTEXTCOLOR (F), TTM_TRACKPOSITION (N+X+Y), | | TTM_SETMAXTIPWIDTH (R), TTM_SETMARGIN (E), TT_SETTOOLINFO (text+A+P+N+X+Y+S+L) | | TTM_SETWINDOWTHEME (Q) | H | Hide ToolTip after a link is clicked.See L option | I | Icon 1-3, e.g. I1. If this option is missing no Icon will be used (same as I0) | | - 1 = Info, 2 = Warning, 3 = Error, > 3 is meant to be a hIcon (handle to an Icon) | | Use Included MI_ExtractIcon and GetAssociatedIcon functions to get hIcon | J | Justify ToolTip to center of control | L | Links for ToolTips. See ToolTip actions how Links for ToolTip work. | M | Mouse click-trough. So a click will be forwarded to the window underneath ToolTip | N | Do NOT activate ToolTip (N1), To activate (show) call ToolTip(1,"","","gTTM_TRACKACTIVATE") | O | Oval ToolTip (BalloonTip). Specify O1 to use a BalloonTip instead of ToolTip. | P | Parent window hWnd or GUI number. This will assign a ToolTip to a window. | | - Reqiered to assign ToolTip to controls and actions. | Q | Quench Style/Theme. Use this to disable Theme of ToolTip. | | Using this option you can have for example colored ToolTips in Vista. | R | Restrict width. This will restrict the width of the ToolTip. | | So if Text is to long it will be shown in several lines | S | Show at coordinates regardless of position. Specify S1 to use that feature | | - normally it is fed automaticaly to show on screen | T | Transparency. This option will apply Transparency to a ToolTip. | | - this option is not available to ToolTips assigned to a control. | V | Visible: even when the parent window is not active, a control-ToolTip will be shown | W | Wait time in seconds (max 30) before ToolTip pops up when pointing on one of controls. | X + Y | Coordinates where ToolTip should be displayed, e.g. X100 Y200 | | - leave empty to display ToolTip near mouse | | - you can specify Xcaret Ycaret to display at caret coordinates | | To destroy a ToolTip use ToolTip(Number), to destroy all ToolTip() | | ToolTip Actions (NOTE, OPTION P MUST BE PRESENT TO USE THAT FEATURE) | Assigning an action to a ToolTip to works using OnMessage(0x4e,"Function") - WM_NOTIFY | Parameter/option P must be present so ToolTip will forward messages to script | All you need to do inside this OnMessage function is to include: | - If wParam=0 | ToolTip("",lParam[,Label]) | | Additionally you need to have one or more of following labels in your script | - ToolTip: when clicking a link | - ToolTipClose: when closing ToolTip | - You can also have a diferent label for one or all ToolTips | - Therefore enter the number of ToolTip in front of the label | - e.g. 99ToolTip: or 1ToolTipClose: | | - Those labels names can be customized as well | - e.g. ToolTip("",lParam,"MyTip") will use MyTip: and MyTipClose: | - you can enter the number of ToolTip in front of that label as well. | | - Links have following syntax: | - <a>Link</a> or <a link>LinkName</a> | - When a Link is clicked, ToolTip() will jump to the label | - Variable ErrorLevel will contain clicked link | | - So when only LinkName is given, e.g. <a>AutoHotkey</a> Errorlevel will be AutoHotkey | - When using Link is given as well, e.g. <a http://www.autohotkey.com>AutoHotkey</a> | - Errorlevel will be set to http://www.autohotkey.com | | Please note some options like Close Button and Links will require Win2000++ (+version 6.0 of comctl32.dll) | AutoHotKey Version 1.0.48++ is required due to "assume static mode" | If you use 1 ToolTip for several controls, the only difference between those can be the text. | - Other options, like Title, color and so on, will be valid globally */
ToolTip(ID="",TEXT="",TITLE="",OPTIONS=""){ static local option,a,b,c,d,e,f,g,h,i,k,l,m,n,o,p,q,r,s,t,v,w,x,y,xc,yc,xw,yw,RECT,#_DetectHiddenWindows,OnMessage If !Init Gosub, TTM_INIT OnMessage:=OnMessage(0x4e,"") ,DetectHiddenWindows:=A_DetectHiddenWindows DetectHiddenWindows, On If !ID { If text If text is Xdigit GoTo, TTN_LINKCLICK Loop, Parse, hWndArray, % Chr(2) ;Destroy all ToolTip Windows { If WinExist("ahk_id " . A_LoopField) DllCall("DestroyWindow","Uint",A_LoopField) hWndArray%A_LoopField%= } hWndArray= Loop, Parse, idArray, % Chr(2) ;Destroy all ToolTip Structures { TT_ID:=A_LoopField If TT_ALL_%TT_ID% Gosub, TT_DESTROY } idArray= Goto, TT_EXITFUNC } TT_ID:=ID TT_HWND:=TT_HWND_%TT_ID% ;___________________ Load Options Variables and Structures ___________________ If (options){ Loop,Parse,options,%A_Space% If (option:= SubStr(A_LoopField,1,1)) %option%:= SubStr(A_LoopField,2) } If (G){ ; If (Title!=""){ Gosub, TTM_SETTITLE Gosub, TTM_UPDATE ; } ; If (Text!=""){ If (InStr(text,"<a") and TOOLLINK%TT_ID%){ TOOLTEXT_%TT_ID%:=text text:=RegExReplace(text,"<a\K[^<]*?>",">") } else TOOLTEXT_%TT_ID%:= NumPut(&text,TOOLINFO_%TT_ID%,36) Gosub, TTM_UPDATETIPTEXT ; } Loop, Parse,G,. If IsLabel(A_LoopField) Gosub, %A_LoopField% Sleep,10 Goto, TT_EXITFUNC } ;__________________________ Save TOOLINFO Structures _________________________ If P { If (p<100 and !WinExist("ahk_id " p)){ Gui,%p%:+LastFound P:=WinExist() } If !InStr(TT_ALL_%TT_ID%,Chr(2) . Abs(P) . Chr(2)) TT_ALL_%TT_ID% .= Chr(2) . Abs(P) . Chr(2) } If !InStr(TT_ALL_%TT_ID%,Chr(2) . ID . Chr(2)) TT_ALL_%TT_ID% .= Chr(2) . ID . Chr(2) If H TT_HIDE_%TT_ID%:=1 ;__________________________ Create ToolTip Window __________________________ If (!TT_HWND and text) { TT_HWND := DllCall("CreateWindowEx", "Uint", 0x8, "str", "tooltips_class32", "str", "", "Uint", 0x02 + (v ? 0x1 : 0) + (l ? 0x100 : 0) + (C ? 0x80 : 0)+(O ? 0x40 : 0), "int", 0x80000000, "int", 0x80000000, "int", 0x80000000, "int", 0x80000000, "Uint", P ? P : 0, "Uint", 0, "Uint", 0, "Uint", 0) TT_HWND_%TT_ID%:=TT_HWND hWndArray .=(hWndArray ? Chr(2) : "") . TT_HWND idArray .=(idArray ? Chr(2) : "") . TT_ID Gosub, TTM_SETMAXTIPWIDTH DllCall("SendMessage", "Uint", TT_HWND, "Uint", 0x403, "Uint", 2, "Uint", (D ? D*1000 : -1)) ;TTDT_AUTOPOP DllCall("SendMessage", "Uint", TT_HWND, "Uint", 0x403, "Uint", 3, "Uint", (W ? W*1000 : -1)) ;TTDT_INITIAL DllCall("SendMessage", "Uint", TT_HWND, "Uint", 0x403, "Uint", 1, "Uint", (W ? W*1000 : -1)) ;TTDT_RESHOW } else if (!text and !options){ DllCall("DestroyWindow","Uint",TT_HWND) Gosub, TT_DESTROY GoTo, TT_EXITFUNC } ;______________________ Create TOOLINFO Structure ______________________ Gosub, TT_SETTOOLINFO
If (Q!="") Gosub, TTM_SETWINDOWTHEME If (E!="") Gosub, TTM_SETMARGIN If (F!="") Gosub, TTM_SETTIPTEXTCOLOR If (B!="") Gosub, TTM_SETTIPBKCOLOR If (title!="") Gosub, TTM_SETTITLE If (!A){ Gosub, TTM_UPDATETIPTEXT Gosub, TTM_UPDATE If D { A_Timer := A_TickCount, D *= 1000 Gosub, TTM_TRACKPOSITION Gosub, TTM_TRACKACTIVATE Loop { Gosub, TTM_TRACKPOSITION If (A_TickCount - A_Timer > D) Break } Gosub, TT_DESTROY DllCall("DestroyWindow","Uint",TT_HWND) TT_HWND_%TT_ID%= } else { Gosub, TTM_TRACKPOSITION Gosub, TTM_TRACKACTIVATE If T WinSet,Transparent,%T%,ahk_id %TT_HWND% If M WinSet,ExStyle,^0x20,ahk_id %TT_HWND% } }
;________ Return HWND of ToolTip ________ Gosub, TT_EXITFUNC Return TT_HWND ;________________________ Internal Labels ________________________ TT_EXITFUNC: If OnMessage OnMessage(0x4e,OnMessage) DetectHiddenWindows, %#_DetectHiddenWindows% Return TTM_POP: ;Hide ToolTip TTM_POPUP: ;Causes the ToolTip to display at the coordinates of the last mouse message. TTM_UPDATE: ;Forces the current tool to be redrawn. DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", 0) Return TTM_TRACKACTIVATE: ;Activates or deactivates a tracking ToolTip. DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", (N ? 0 : 1), "Uint", &TOOLINFO_%ID%) Return TTM_UPDATETIPTEXT: TTM_GETBUBBLESIZE: TTM_ADDTOOL: TTM_DELTOOL: TTM_SETTOOLINFO: DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", &TOOLINFO_%ID%) Return TTM_SETTITLE: title := (StrLen(title) < 96) ? title : (Chr(133) SubStr(title, -97)) DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", I, "Uint", &Title) Return TTM_SETWINDOWTHEME: If Q DllCall("uxtheme\SetWindowTheme", "Uint", TT_HWND, "Uint", 0, "UintP", 0) else DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", &K) Return TTM_SETMAXTIPWIDTH: DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", R ? R : A_ScreenWidth) Return TTM_TRACKPOSITION: VarSetCapacity(xc, 20, 0), xc := Chr(20) DllCall("GetCursorInfo", "Uint", &xc) yc := NumGet(xc,16), xc := NumGet(xc,12) SysGet,xl,76 SysGet,xr,78 SysGet,yl,77 SysGet,yr,79 xc+=15,yc+=15 If (x="caret" or y="caret"){ WinGetPos,xw,yw,,,A If x=caret { xc:=xw+A_CaretX +1 xc:=(xl>xc ? xl : (xr<xc ? xr : xc)) } If (y="caret"){ yc:=yw+A_CaretY+15 yc:=(yl>yc ? yl : (yr<yc ? yr : yc)) } } else if (x="TrayIcon" or y="TrayIcon"){ Process, Exist PID:=ErrorLevel hWndTray:=WinExist("ahk_class Shell_TrayWnd") ControlGet,hWndToolBar,Hwnd,,ToolbarWindow321,ahk_id %hWndTray% RemoteBuf_Open(TrayH,hWndToolBar,20) DataH:=NumGet(TrayH,0) SendMessage, 0x418,0,0,,ahk_id %hWndToolBar% Loop % ErrorLevel { SendMessage,0x417,A_Index-1,RemoteBuf_Get(TrayH),,ahk_id %hWndToolBar% RemoteBuf_Read(TrayH,lpData,20) VarSetCapacity(dwExtraData,8) pwData:=NumGet(lpData,12) DllCall( "ReadProcessMemory", "uint", DataH, "uint", pwData, "uint", &dwExtraData, "uint", 8, "uint", 0 ) BWID:=NumGet(dwExtraData,0) WinGet,BWPID,PID, ahk_id %BWID% If (BWPID!=PID and BWPID!=#__MAIN_PID_) continue SendMessage, 0x41d,A_Index-1,RemoteBuf_Get(TrayH),,ahk_id %hWndToolBar% RemoteBuf_Read(TrayH,rcPosition,20) If (NumGet(lpData,8)>7){ ControlGetPos,xc,yc,xw,yw,Button2,ahk_id %hWndTray% xc+=xw/2, yc+=yw/4 } else { ControlGetPos,xc,yc,,,ToolbarWindow321,ahk_id %hWndTray% halfsize:=NumGet(rcPosition,12)/2 xc+=NumGet(rcPosition,0)+ halfsize yc+=NumGet(rcPosition,4)+ (halfsize/2) } WinGetPos,xw,yw,,,ahk_id %hWndTray% xc+=xw,yc+=yw break } RemoteBuf_close(TrayH) } If xc not between %xl% and %xr% xc=xc<xl ? xl : xr If yc not between %yl% and %yr% yc=yc<yl ? yl : yr If (!x and !y) Gosub, TTM_UPDATE else if !WinActive("ahk_id " . TT_HWND) DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", (x<9999999 ? x : xc & 0xFFFF)|(y<9999999 ? y : yc & 0xFFFF)<<16) Return TTM_SETTIPBKCOLOR: If B is alpha If (%b%) B:=%b% B := (StrLen(B) < 8 ? "0x" : "") . B B := ((B&255)<<16)+(((B>>8)&255)<<8)+(B>>16) ; rgb -> bgr DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", B, "Uint", 0) Return TTM_SETTIPTEXTCOLOR: If F is alpha If (%F%) F:=%f% F := (StrLen(F) < 8 ? "0x" : "") . F F := ((F&255)<<16)+(((F>>8)&255)<<8)+(F>>16) ; rgb -> bgr DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint",F & 0xFFFFFF, "Uint", 0) Return TTM_SETMARGIN: VarSetCapacity(RECT,16) Loop,Parse,E,. NumPut(A_LoopField,RECT,(A_Index-1)*4) DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", &RECT) Return TT_SETTOOLINFO: If A { If A is not Xdigit ControlGet,A,Hwnd,,%A%,ahk_id %P% ID :=Abs(A) If !InStr(TT_ALL_%TT_ID%,Chr(2) . ID . Chr(2)) TT_ALL_%TT_ID% .= Chr(2) . ID . Chr(2) . ID+Abs(P) . Chr(2) If !TOOLINFO_%ID% VarSetCapacity(TOOLINFO_%ID%, 40, 0),TOOLINFO_%ID%:=Chr(40) else Gosub, TTM_DELTOOL Numput((N ? 0 : 1)|(J ? 2 : 0)|(L ? 0x1000 : 0)|16,TOOLINFO_%ID%,4),Numput(P,TOOLINFO_%ID%,8),Numput(ID,TOOLINFO_%ID%,12) If (text!="") NumPut(&text,TOOLINFO_%ID%,36) Gosub, TTM_ADDTOOL ID :=ID+Abs(P) If !TOOLINFO_%ID% { VarSetCapacity(TOOLINFO_%ID%, 40, 0),TOOLINFO_%ID%:=Chr(40) Numput(0|16,TOOLINFO_%ID%,4), Numput(P,TOOLINFO_%ID%,8), Numput(P,TOOLINFO_%ID%,12) } Gosub, TTM_ADDTOOL ID :=Abs(A) } else { If !TOOLINFO_%ID% VarSetCapacity(TOOLINFO_%ID%, 40, 0),TOOLINFO_%ID%:=Chr(40) If (text!=""){ If InStr(text,"<a"){ TOOLTEXT_%ID%:=text text:=RegExReplace(text,"<a\K[^<]*?>",">") } else TOOLTEXT_%ID%:= NumPut(&text,TOOLINFO_%ID%,36) } NumPut((J ? 2 : 0)|(!(x . y) ? 0 : 0x20)|(S ? 0x80 : 0)|(L ? 0x1000 : 0),TOOLINFO_%ID%,4), Numput(P,TOOLINFO_%ID%,8), Numput(P,TOOLINFO_%ID%,12) Gosub, TTM_ADDTOOL } TOOLLINK%ID%:=L Return TTN_LINKCLICK: Loop 4 m += *(text + 8 + A_Index-1) << 8*(A_Index-1) If !(TTN_FIRST-2=m or TTN_FIRST-3=m) Return, OnMessage ? OnMessage(0x4e,OnMessage) : 0 Loop 4 p += *(text + 0 + A_Index-1) << 8*(A_Index-1) If (TTN_FIRST-3=m) Loop 4 option += *(text + 16 + A_Index-1) << 8*(A_Index-1) Loop,Parse,hWndArray,% Chr(2) If (p=A_LoopField and i:=A_Index) break Loop,Parse,idArray,% Chr(2) { If (i=A_Index){ text:=TOOLTEXT_%A_LoopField% If (TTN_FIRST-2=m){ If Title { If IsLabel(A_LoopField . title . "Close") Gosub % A_LoopField . title . "Close" else If IsLabel(title . "Close") Gosub % title . "Close" } else { If IsLabel(A_LoopField . A_ThisFunc . "Close") Gosub % A_LoopField . A_ThisFunc . "Close" else If IsLabel(A_ThisFunc . "Close") Gosub % A_ThisFunc . "Close" } } else If (InStr(TOOLTEXT_%A_LoopField%,"<a")){ Loop % option+1 StringTrimLeft,text,text,% InStr(text,"<a")+1 If TT_HIDE_%A_LoopField% %A_ThisFunc%(A_LoopField,"","","gTTM_POP") If ((a:=A_AutoTrim)="Off") AutoTrim, On ErrorLevel:=SubStr(text,1,InStr(text,">")-1) StringTrimLeft,text,text,% InStr(text,">") text:=SubStr(text,1,InStr(text,"</a>")-1) If !ErrorLevel ErrorLevel:=text ErrorLevel=%ErrorLevel% AutoTrim, %a% If Title { If IsFunc(f:=(A_LoopField . title)) %f%(ErrorLevel) else if IsLabel(A_LoopField . title) Gosub % A_LoopField . title else if IsFunc(title) %title%(ErrorLevel) else If IsLabel(title) Gosub, %title% } else { if IsFunc(f:=(A_LoopField . A_ThisFunc)) %f%(ErrorLevel) else If IsLabel(A_LoopField . A_ThisFunc) Gosub % A_LoopField . A_ThisFunc else If IsLabel(A_ThisFunc) Gosub % A_ThisFunc } } break } } DetectHiddenWindows, %#_DetectHiddenWindows% Return OnMessage ? OnMessage(0x4e,OnMessage) : 0 TT_DESTROY: Loop, Parse, TT_ALL_%TT_ID%,% Chr(2) If A_LoopField { ID:=A_LoopField Gosub, TTM_DELTOOL TOOLINFO_%A_LoopField%:="", TT_HWND_%A_LoopField%:="", TOOLTEXT_%A_LoopField%:="", TT_HIDE_%A_LoopField%:="",TOOLLINK%A_LoopField%:="" } TT_ALL_%TT_ID%= Return TTM_INIT: Init:=1 ; Messages TTM_ACTIVATE := 0x400 + 1, TTM_ADDTOOL := A_IsUnicode ? 0x432 : 0x404, TTM_DELTOOL := A_IsUnicode ? 0x433 : 0x405 ,TTM_POP := 0x41c, TTM_POPUP := 0x422, TTM_UPDATETIPTEXT := 0x400 + (A_IsUnicode ? 57 : 12) ,TTM_UPDATE := 0x400 + 29, TTM_SETTOOLINFO := 0x409, TTM_SETTITLE := 0x400 + (A_IsUnicode ? 33 : 32) ,TTN_FIRST := 0xfffffdf8, TTM_TRACKACTIVATE := 0x400 + 17, TTM_TRACKPOSITION := 0x400 + 18 ,TTM_SETMARGIN:=0x41a, TTM_SETWINDOWTHEME:=0x200b, TTM_SETMAXTIPWIDTH:=0x418,TTM_GETBUBBLESIZE:=0x41e ,TTM_SETTIPBKCOLOR:=0x413, TTM_SETTIPTEXTCOLOR:=0x414 ;Colors ,Black:=0x000000, Green:=0x008000,Silver:=0xC0C0C0 ,Lime:=0x00FF00, Gray:=0x808080, Olive:=0x808000 ,White:=0xFFFFFF, Yellow:=0xFFFF00, Maroon:=0x800000 ,Navy:=0x000080, Red:=0xFF0000, Blue:=0x0000FF ,Purple:=0x800080, Teal:=0x008080, Fuchsia:=0xFF00FF ,Aqua:=0x00FFFF Return }
Last edited by HotKeyIt on December 3rd, 2010, 12:08 am, edited 91 times in total.
|
|