Jump to content
Sign in to follow this  

Modify Floating Text

Recommended Posts


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

Opt("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))
$hwnd2 = GUICreate("Text Region", @DesktopWidth, @DesktopHeight, @DesktopWidth / 2 - 200, @DesktopHeight / 2 - 100, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))

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) 

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])
    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)

Share this post

Link to post
Share on other sites

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

Share this post

Link to post
Share on other sites

Locked for violating the rules.

Share this post

Link to post
Share on other sites
This topic is now closed to further replies.
Sign in to follow this