Sign in to follow this  
Followers 0
Vadtec

OSD with moveable objects

13 posts in this topic

Hello all,

I am mostly new to AutoIt, though I am familiar with GUI programming in general. Up until this point, I have only had a need for simple top down style AutoIt scripts for testing and/or automating programs. However, I ran into a situation where I cannot rely on screen coordinates remaining the same. Sadly, the automated build process for the program in question changes the coordinates of the dialog I need to use, which is Flash based. I have read up on interfacing with Flash, and I would rather avoid that situation if possible, especially since it is actually a Flex application.

So, rather than having to figure out what the offsets are going to be for each day I run this app, I had an idea. Why could I not create a GUI that allows me to display little colored dots representing the points I want clicked that I can move each day before I run the actual script? I already have a config file for the script, so adding new items to it would be extremely simple.

The two problems I ran into are 1) how to display the dots on the screen OSD style (that is, without a GUI underneath them to control them), and 2) how to make them clickable and dragable so that they can be repositioned easily once displayed.

I spent the better part of 2 hours looking through the help file and about an hour more looking here in the forums, but I did not find anything that gave any hints as to where to go. So, as such, I make my plea here. Does anyone have an example, or know which set of functions I need to look at to try and implement such an idea? I really only need the OSD functionality, having the dots be clickable and dragable would just be icing on the cake.

Any help is greatly appreciated.

Vadtec

Share this post


Link to post
Share on other sites



Vadtec,

Welcome to the AutoIt forum. ;)

This produces 3 very small GUIs which are "clickable and dragable":

#include <GuiconstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>

Global Const $SC_DRAGMOVE = 0xF012

HotKeySet("{ESC}", "On_Exit")
Func On_Exit()
    Exit
EndFunc

$hGUI_X = GUICreate("X", 10, 10, 100, 100, BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOPMOST)
GUISetBkColor(0xFF0000, $hGUI_X)
GUISetState()

$hGUI_Y = GUICreate("Y", 10, 10, 200, 200, BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOPMOST)
GUISetBkColor(0x00FF00, $hGUI_Y)
GUISetState()

$hGUI_Z = GUICreate("Z", 10, 10, 300, 300, BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOPMOST)
GUISetBkColor(0xFF0000, $hGUI_Z)
GUISetState()

While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[0]
        Case $GUI_EVENT_PRIMARYDOWN
            Switch $aMsg[1]
                Case $hGUI_X
                    _SendMessage($hGUI_X, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_Y
                    _SendMessage($hGUI_Y, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_Z
                    _SendMessage($hGUI_Z, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
            EndSwitch
    EndSwitch
WEnd

It is trivial to get their positions with WinGetPos.

I hope it is useful. :evil: Do come back if there is anything that is not clear.

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

That's just plain slick; and I imagine infinitely more simple than OSD. (If OSD on windows is anything like it is on Linux/X.org, I imagine its a bit of a pain as well.) I also like the idea that I could create context-menus, which gives me more flexibility. I hadn't though of creating multiple GUI's like this, so I must say, props on that idea.

I will give this a whirl and expect that I will make great strides in automating this particularly long, boring, annoying and cumbersome process.

Many thanks,

Vadtec

Edited by Vadtec

Share this post


Link to post
Share on other sites

Maybe I am missing something, but...

I am using your example and getting the small GUIs positioned like I need them. I also used your example GUI to create a sort of "control panel" using the same GUICreate command. I added a button to the "control panel" and have been trying to process it. Alas, I ran into a snag.

#include <GuiconstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <Timers.au3>
#include <Array.au3>

AutoItSetOption('MustDeclareVars', 1)
AutoItSetOption("MouseCoordMode", 1)

Global Const $SC_DRAGMOVE = 0xF012

Dim $file_path = ""
Dim $file_handle = -1
Dim $line = ""
Dim $line_array
Dim $aMsg = 0

Dim $cp_x = 100
Dim $cp_y = 0
Dim $map_x = 0
Dim $map_y = 0
Dim $goto_x = 0
Dim $goto_y = 20
Dim $X_box_x = 0
Dim $X_box_y = 40
Dim $Y_box_x = 0
Dim $Y_box_y = 60

HotKeySet("{ESC}", "On_Exit")

Dim $hGUI_Map = GUICreate("Map Button", 10, 15, $map_x, $map_y, BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST)
GUISetBkColor(0xFF0000, $hGUI_Map)
GUICtrlCreateLabel("M", 1, 1)
GUISetState()

Dim $hGUI_Goto = GUICreate("Goto Button", 10, 15, $goto_x, $goto_y, BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST)
GUISetBkColor(0xFF0000, $hGUI_Goto)
GUICtrlCreateLabel("G", 1, 1)
GUISetState()

Dim $hGUI_X = GUICreate("X Coordinate Textbox", 10, 15, $X_box_x, $X_box_y, BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST)
GUISetBkColor(0x00FF00, $hGUI_X)
GUICtrlCreateLabel("X", 1, 1)
GUISetState()

Dim $hGUI_Y = GUICreate("Y Coordinate Textbox", 10, 15, $Y_box_x, $Y_box_y, BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST)
GUISetBkColor(0x00FF00, $hGUI_Y)
GUICtrlCreateLabel("Y", 1, 1)
GUISetState()

Dim $hGUI_Control = GUICreate("Control Panel", 200, 380, $cp_x, $cp_y, BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST)
Dim $save_coords_button = GUICtrlCreateButton("Save coordinates", 3, 3)
GUISetState()

While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[0]
        Case $GUI_EVENT_PRIMARYDOWN
            Switch $aMsg[1]
                Case $hGUI_Map
                    _SendMessage($hGUI_Map, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_Goto
                    _SendMessage($hGUI_Goto, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_X
                    _SendMessage($hGUI_X, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_Y
                    _SendMessage($hGUI_Y, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_Control
                    Dim $bMsg = GUIGetMsg(1)
                    _ArrayDisplay($aMsg)
                    ConsoleWrite($hGUI_Control & @CRLF)
                    ConsoleWrite($save_coords_button & @CRLF)
                    Switch $aMsg[2]
                        Case $aMsg[2] == $save_coords_button
                            ConsoleWrite("Test" & @CRLF)
                        Case Else
                            _SendMessage($hGUI_Control, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                    EndSwitch
            EndSwitch
    EndSwitch
WEnd

Func On_Exit()
    Exit
EndFunc   ;==>On_Exit

When I click anywhere in the "control panel" it executes the code insde the 2nd switch statement, but it is always the case that prints test. I cannot drag the GUI, nor can I seem to get the button to function on its own.

Am I going about creating that GUI wrong, or am I not trapping the button click properly?

Vadtec

Share this post


Link to post
Share on other sites

Vadtec,

Am I going about creating that GUI wrong, or am I not trapping the button click properly?

The latter. ;) If you use GUIGetMsg with the Advanced parameter (to distinguish between various GUIs), you have to differentiate carefully between the elements of the returned array.

- The [0] element is a ControlID or EventID - i.e. a button or a mouse event - which triggered the message.

- The [1] element is the GUI from which the message originated.

If you think of the closure [X], you can see how important it is to know from which GUI the event (which is the same $GUI_EVENT_CLOSE in all cases) originates. :evil:

So in this case, you only need to distinguish between GUIs to run the "Drag/Drop" code. All ControlID events, like a button press, can be dealt with in the main loop. So change your loop to read like this:

While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[0] ; These are the events within your GUI(s) like button presses or mouse events
        Case $GUI_EVENT_PRIMARYDOWN ; Which GUI did we get this from?
            Switch $aMsg[1] ; These are the GUIs themselves
                Case $hGUI_Map
                    _SendMessage($hGUI_Map, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_Goto
                    _SendMessage($hGUI_Goto, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_X
                    _SendMessage($hGUI_X, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_Y
                    _SendMessage($hGUI_Y, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
                Case $hGUI_Control
                    _SendMessage($hGUI_Control, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
            EndSwitch
        Case $save_coords_button ; We know where this comes from!
            ConsoleWrite("You pressed the $save_coords_button" & @CRLF)
            ; Put your code for saving the coords here
    EndSwitch
WEnd

I hope that is clear. if not, please ask! :evil:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

That is what I was thinking in my mind, I just wasn't translating it to the code. Silly me. :evil:;) Thanks for pointing that out. So far I'm figuring things out, so maybe you won't hear from me much.

Vadtec

Edited by Vadtec

Share this post


Link to post
Share on other sites

Vadtec,

Do not hesitate to post again if you run into a problem. That is why we are here, after all! ;)

M23

P.S. By the way, when you reply it helps if you use the "Add Reply" button at the top and bottom of the page rather then the "Reply" button in the post itself. That way you do not get the contents of the previous post quoted in your reply, you do not have to "snip" the content, and the whole thread becomes easier to read. :evil:


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

P.S. By the way, when you reply it helps if you use the "Add Reply" button at the top and bottom of the page rather then the "Reply" button in the post itself. That way you do not get the contents of the previous post quoted in your reply, you do not have to "snip" the content, and the whole thread becomes easier to read. ;)

(Pun intended...) Yes, I know. I could have not done the last quoting and been just fine. :evil:

Aside from all that, I do have another question. A co-worker of mine asked what sort of performance hit we might take if we were to have say 50 or 60 of the little GUIs floating around to keep track of. He has delusions about creating a pseudo "state machine" for controling his "bastion". Long story short, does AutoIt have the sort of feature I had asked about initially in this thread? I'm sure keeping track of OSD sprites would be less resource intensive (and just as cool). I am quite content to use the GUIs as they are. It also gives us flexibility in the things each GUI could be made to do, compare to a context only or GUI overlay for the OSD sprites.

Vadtec

Share this post


Link to post
Share on other sites

Vadtec,

Beyond me to answer this, I am afraid. I am a mere hobbyist coder, more used to helping the beginners. ;) Have you actually tried using that many GUIs in a script? I would like to hear how you got on! :evil: My initial feeling is that as you are not doing much with them there should not be too much of a performance hit...but I might well be wrong! :evil:

I would strongly suggest starting a new topic (the more experienced members tend not to butt in on each other once there is a running converation) showing what you have done and asking if there is a better way do do it with a large number of GUIs. I will not take offence, promise! :idea:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Ok, I will see if I can dissuade my co-worker from being sprite happy and see if he can just accept the GUIs. I doubt on these machines it would make much of a dent in their processing. Quad quad cores with 16G of RAM tend to not care about such things. My home PC on the other hand might. ;) Thanks for all the great input. Much appreciated.

Vadtec

Share this post


Link to post
Share on other sites

Vadtec,

Here is a version with 70 small "sprites" which does not seem to slow my machine down at all - although it takes a moment to create them all ;) :

#include <GuiconstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>

AutoItSetOption('MustDeclareVars', 1)
AutoItSetOption("MouseCoordMode", 1)

; Set up colour array
Global $aColours[7][2] = [[0xFF0000, 0xFFFFFF], [0xFF8000, 0xFFFFFF], [0xFFFF00, 0x000000], [0x00FF00, 0x000000], _
                          [0x00FFFF, 0x000000], [0x0000FF, 0xFFFFFF], [0xFF00FF, 0xFFFFFF]]

; Create small sprites
Global $aSprites[71][3]
For $j = 0 To 6
    For $i = 0 To 9
        $aSprites[($j*10) + $i][1] = $j*20 + 10
        $aSprites[($j*10) + $i][2] = $i*20 + 10
        ; Use the hidden AutoIt window as a parent to prevent buttons appearing on the taskbar!
        $aSprites[($j*10) + $i][0] = GUICreate(($j*10) + $i, 10, 15, $j*20 + 10, $i*20 + 10, BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST, WinGetHandle(AutoItWinGetTitle()))
            GUISetBkColor($aColours[$j][0], $aSprites[($j*10) + $i][0])
        ; Use the label to drag the GUI rather than the method we use for the Control panel below
        GUICtrlCreateLabel($i, 1, 0, -1, -1, -1, $GUI_WS_EX_PARENTDRAG)
            GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
            GUICtrlSetColor(-1, $aColours[$j][1])
        GUISetState()
    Next
Next

; Create the Control Panel - as we have no label to fill here, we will move it via SendMessage $SC_DRAGMOVE. But we do have a taskbar button!
$aSprites[70][1]  = 200
$aSprites[70][2] = 10
$aSprites[70][0] = GUICreate("Control Panel", 200, 380, 200, 10, BitOR($WS_POPUP, $WS_BORDER), $WS_EX_TOPMOST)

Global $hSave_Button = GUICtrlCreateButton("Save coordinates", 10, 10, 100, 30)
Global $hReset_Button = GUICtrlCreateButton("Reset Sprites", 10, 50, 100, 30)
Global $hExit_Button = GUICtrlCreateButton("Exit", 10, 90, 100, 30)

GUISetState()

While 1
    Global $aMsg = GUIGetMsg(1)
    Switch $aMsg[0]
        ; Mouse was pressed - if it was in the Control Panel, move it
        Case $GUI_EVENT_PRIMARYDOWN
            If $aMsg[1] = $aSprites[70][0] Then _SendMessage($aSprites[70][0], $WM_SYSCOMMAND, 0xF012, 0) ; $SC_DRAGMOVE
        Case $hSave_Button
            ConsoleWrite("You pressed the $save_coords_button" & @CRLF)
            ; Put your code for saving the coords here
        Case $hReset_Button
            ; Move all the sprites back to their positions, which we carefully stored on creation
            For $i = 0 To 70
                WinMove($aSprites[$i][0], "", $aSprites[$i][1], $aSprites[$i][2])
            Next
        Case $hExit_Button
            Exit
    EndSwitch
WEnd

You will see I have made a few improvements. The sprites do not have taskbar buttons - I thought 70+ was pushing it a bit! :evil: They also move using a different method - the internal label drags them along, a neat trick! I have also given you a reset button - I thought it might get a bit complicated at times and a reset would be a good idea.

You will also see that I have used Global rather than Dim when declaring variables. As you should always scope variables on creation, it is best to use the Global/Local keywords so as to make absolutely sure what you mean. AutoIt will assume Global in the main script and Local in a function, but it cannot read your mind. The only time I use Dim is to reset an array and blank its contents.

I hope this is useful. :evil:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

That is quite interesting, both on getting rid of the taskbar buttons and how the "sprites" are moved. I do have one question though, how does your code name each window? Or more appropriately, how do you get the coords of each window/"sprite"? I assume, correctly I hope, that you still use WinGetPos() to grab the coords, but I'm not sure.

I will give this code a good looking over, and see if I can work it into my current version of the app. I have it running 100% right now (its actually automating my report generator for me right now, yippie!), so I don't want to change it just yet. I also modified it to be more like a state machine, though its really just a terrible kludge to implement some semblance of an event system. The big test for this app will come in a few hours when I have it automate "the big one" and have it run control tweaks on the hardware. So far, it's generating 30 reports nicely for me, so I expect it will run just fine doing other tasks as well.

Thanks for the improved version, I really do hope it will fit within my needs without to much modification. Much appreciated.

Vadtec

Share this post


Link to post
Share on other sites

#13 ·  Posted (edited)

Vadtec,

I do have one question though, how does your code name each window? Or more appropriately, how do you get the coords of each window/"sprite"? I assume, correctly I hope, that you still use WinGetPos() to grab the coords

But of course! ;)

The "sprite" handles are in the [?][0] element of the $aSprites array, which is formed as they are created. So the numbering goes like this:

Red      Orange    Yellow   Green 

0 = 0    0 = 10    0 = 20   0 = 30
1 = 1    1 = 11    1 = 21   ...
...      ...       ...
9 = 9    9 = 19    9 = 29

and so on. I just used a single digit on different colours to keep the sprites as small as possible - if you wanted to enlarge them you could easily get individual IDs on them which would simplify matters.

Change the Case statement for $hSave_Button in the earlier script to this - then move the "Red 0" sprite around and press the "Save" button:

Case $hSave_Button
        ConsoleWrite("You pressed the $save_coords_button" & @CRLF)
        ; Put your code for saving the coords here
        Global $aPos = WinGetPos($aSprites[0][0]) ; Sprite "Red 0" = 0, so use $aSprites[0][0] to identify it
        ConsoleWrite($aPos[0] & " - " & $aPos[1] & @CRLF)

I am delighted that you have the original working - I only developed this version to help out your co-worker. We would not want him to feel left out, now would we? :evil:

M23

Edit: Speeling!

Edited by Melba23

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0