Hypnotix Posted May 18, 2012 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)
Hypnotix Posted May 19, 2012 Author 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
Recommended Posts