Hypnotix Posted May 18, 2012 Share Posted May 18, 2012 Hello everybody. Recently I started doing a project which served as a utility for a game on a platform called byond (Not sure if you guys have heard of it, but that is irrelevent) My goal was to show the cooldowns of skills on the screen as a tooltip. Being a beginner at best i started off with the basic tooltip function. When I realized i could only use one at a time, I decided to look up floating text which led me to this code expandcollapse popupOpt("OnExitFunc", "endscript") #include <GUIConstants.au3> #include <WindowsConstants.au3> $hwnd = GUICreate("Text Region", @DesktopWidth, @DesktopHeight, @DesktopWidth / 2 - 250, @DesktopHeight / 2 - 150, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) GUISetBkColor(0x00FF01) GUISetState() $hwnd2 = GUICreate("Text Region", @DesktopWidth, @DesktopHeight, @DesktopWidth / 2 - 200, @DesktopHeight / 2 - 100, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) GUISetBkColor(0x00FF01) GUISetState() While 1 $rgn = CreateTextRgn($hwnd, "rawr", 20, "Times New Roman", 2000) $rgn2 = CreateTextRgn($hwnd2, "rawr5", 20, "Times New Roman", 2000) SetWindowRgn($hwnd, $rgn) SetWindowRgn($hwnd2, $rgn2) Sleep(500) WEnd Func endscript() ControlShow("Program Manager", "", "[CLASSNN:SHELLDLL_DefView1]") EndFunc ;==>endscript Func SetWindowRgn($h_win, $rgn) DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $rgn, "int", 1) EndFunc ;==>SetWindowRgn Func CreateTextRgn(ByRef $CTR_hwnd, $CTR_Text, $CTR_height, $CTR_font = "Times New Roman", $CTR_weight = 1000) Local Const $ANSI_CHARSET = 0 Local Const $OUT_CHARACTER_PRECIS = 2 Local Const $CLIP_DEFAULT_PRECIS = 0 Local Const $PROOF_QUALITY = 2 Local Const $FIXED_PITCH = 1 Local Const $RGN_XOR = 3 If $CTR_font = "" Then $CTR_font = "Microsoft Sans Serif" If $CTR_weight = -1 Then $CTR_weight = 1000 Local $gdi_dll = DllOpen("gdi32.dll") Local $CTR_hDC = DllCall("user32.dll", "int", "GetDC", "hwnd", $CTR_hwnd) Local $CTR_hMyFont = DllCall($gdi_dll, "hwnd", "CreateFont", "int", $CTR_height, "int", 0, "int", 0, "int", 0, _ "int", $CTR_weight, "int", 0, "int", 0, "int", 0, "int", $ANSI_CHARSET, "int", $OUT_CHARACTER_PRECIS, _ "int", $CLIP_DEFAULT_PRECIS, "int", $PROOF_QUALITY, "int", $FIXED_PITCH, "str", $CTR_font) Local $CTR_hOldFont = DllCall($gdi_dll, "hwnd", "SelectObject", "int", $CTR_hDC[0], "hwnd", $CTR_hMyFont[0]) DllCall($gdi_dll, "int", "BeginPath", "int", $CTR_hDC[0]) DllCall($gdi_dll, "int", "TextOut", "int", $CTR_hDC[0], "int", 0, "int", 0, "str", $CTR_Text, "int", StringLen($CTR_Text)) DllCall($gdi_dll, "int", "EndPath", "int", $CTR_hDC[0]) Local $CTR_hRgn1 = DllCall($gdi_dll, "hwnd", "PathToRegion", "int", $CTR_hDC[0]) Local $CTR_rc = DllStructCreate("int;int;int;int") DllCall($gdi_dll, "int", "GetRgnBox", "hwnd", $CTR_hRgn1[0], "ptr", DllStructGetPtr($CTR_rc)) Local $CTR_hRgn2 = DllCall($gdi_dll, "hwnd", "CreateRectRgnIndirect", "ptr", DllStructGetPtr($CTR_rc)) DllCall($gdi_dll, "int", "CombineRgn", "hwnd", $CTR_hRgn2[0], "hwnd", $CTR_hRgn2[0], "hwnd", $CTR_hRgn1[0], "int", $RGN_XOR) DllCall($gdi_dll, "int", "DeleteObject", "hwnd", $CTR_hRgn1[0]) DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $CTR_hwnd, "int", $CTR_hDC[0]) DllCall($gdi_dll, "int", "SelectObject", "int", $CTR_hDC[0], "hwnd", $CTR_hOldFont[0]) DllClose($gdi_dll) Return $CTR_hRgn2[0] EndFunc ;==>CreateTextRgn which is apparently pretty popular around here. After much testing and tinkering I was able to figure out how to actually make the tooltips work (never messed with guis before) and i managed to Put each skill into their own tooltip and using a loop I was able to make it display the cooldowns actively. The next problem I came across was that it only wanted to let one timer go at a time, so i managed to Form it into a loop to where it checks them all at once. Now what i would like to do is, even though my program is functional, I would like to try to modify this to where I can combine them all into one multi lined Gui/tooltip, but I have no grasp of how these dlls work or how to modify the innate function that was provided without ruining it. I tried adding a basic @cr into the text field, but it seems like that function is disabled by default. Anybody know how i can do this? (Sorry for the huge post, I just wanted to explain the concept/evolution of my project so perhaps you guys can better help me help myself) Link to comment Share on other sites More sharing options...
Hypnotix Posted May 19, 2012 Author Share Posted May 19, 2012 hmm i just realized this was the wrong forums. Perhaps thats why the thread has so many views and no responses, I guess you guys can delete this if yo uwant ima take it over to the GUI forums since i cant get help here x.x Link to comment Share on other sites More sharing options...
Valik Posted May 19, 2012 Share Posted May 19, 2012 Locked for violating the rules. Link to comment Share on other sites More sharing options...
Recommended Posts