Jump to content

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

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

Guest
This topic is now closed to further replies.
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...