I recently added a feature to the LitDev Extension to create a completely transparent GraphicsWindow.
The method to do this is:
LDUtilities
.
TransparentGW
(
)
I can't show a screenshot because there is absolutely nothing to see!
So, what's the point...
Well, anything we add to the transparent GraphicsWindow will be visible, so we can do things like:
- Create a window with a non-rectangular shape by drawing a png image.
- Create nice simple widget applications.
- Make things appear to float free from a containing window.
Features
- The transparent GraphicsWindow must be created before any other command creates a GraphicsWindow.
- Once a transparent GraphicsWindow is created it cannot be changed back to a normal GraphicsWindow.
- Because the window is completely transparent, it doesn't even register Mouse Clicks or other events unless something is drawn on it or its background is modified with GraphicsWindow.BackgroundColor.
- A partially transparent color can be created using the hex format with the first 2 characters being opacity (e.g. "#01FFFFFF" is almost completely transparent white - you won't see it but it will register events if used as a background).
- You can add anything to the transparent GraphicsWindow that you would to a normal one, including drawings, shapes and controls as well as move, rotate, show/hide and zoom (everything you can do normally).
- You can use the associated new method LDUtilities.TopMostGW("True") to ensure that the window always remains above all other windows, good for widgets.
Example
The following is the code for a simple clock widget using these methods.
'Simple LitDev Extension widget clock
'Transparent Topmost GraphicsWindow
LDUtilities
.
TransparentGW
(
)
LDUtilities
.
TopMostGW
(
"True"
)
'Clock Face
GraphicsWindow
.
Width
=
100
GraphicsWindow
.
Height
=
100
GraphicsWindow
.
BrushColor
=
"#40FFFFFF"
'Partially transparent White
GraphicsWindow
.
FillEllipse
(
0
,
0
,
100
,
100
)
GraphicsWindow
.
FontSize
=
10
For
i
=
1
To
12
angle
=
i
*
Math
.
PI
/
6
-
Math
.
Pi
/
2
GraphicsWindow
.
DrawText
(
50
+
45
*
Math
.
Cos
(
angle
)
-
3
,
50
+
45
*
Math
.
Sin
(
angle
)
-
7
,
i
)
EndFor
'Hands
GraphicsWindow
.
PenColor
=
"Black"
GraphicsWindow
.
PenWidth
=
4
hourHand
=
Shapes
.
AddLine
(
0
,
0
,
0
,
0
)
GraphicsWindow
.
PenWidth
=
2
minuteHand
=
Shapes
.
AddLine
(
0
,
0
,
0
,
0
)
GraphicsWindow
.
PenColor
=
"Red"
GraphicsWindow
.
PenWidth
=
1
secondHand
=
Shapes
.
AddLine
(
0
,
0
,
0
,
0
)
'Register Events
GraphicsWindow
.
MouseDown
=
OnMouseDown
GraphicsWindow
.
MouseUp
=
OnMouseUp
LDDialogs
.
AddRightClickMenu
(
"1=Exit;"
,
""
)
LDDialogs
.
RightClickMenu
=
OnRightClickMenu
'MAIN LOOP
While
(
"True"
)
'Get angles (Clockwise from top)
second
=
Clock
.
Second
*
Math
.
PI
/
30
-
Math
.
Pi
/
2
minute
=
(
Clock
.
Minute
+
Clock
.
Second
/
60
)
*
Math
.
PI
/
30
-
Math
.
Pi
/
2
hour
=
(
Clock
.
Hour
+
Clock
.
Minute
/
60
+
Clock
.
Second
/
3600
)
*
Math
.
PI
/
6
-
Math
.
Pi
/
2
'Move hands - extension used to move lines coz its easier
LDShapes
.
MoveLine
(
hourHand
,
50
,
50
,
50
+
35
*
Math
.
Cos
(
hour
)
,
50
+
35
*
Math
.
Sin
(
hour
)
)
LDShapes
.
MoveLine
(
minuteHand
,
50
,
50
,
50
+
45
*
Math
.
Cos
(
minute
)
,
50
+
45
*
Math
.
Sin
(
minute
)
)
LDShapes
.
MoveLine
(
secondHand
,
50
,
50
,
50
+
50
*
Math
.
Cos
(
second
)
,
50
+
50
*
Math
.
Sin
(
second
)
)
'Move the clock with mouse down
If
(
mouseDown
)
Then
GraphicsWindow
.
Left
=
offsetX
+
Mouse
.
MouseX
GraphicsWindow
.
Top
=
offsetY
+
Mouse
.
MouseY
EndIf
Program
.
Delay
(
100
)
' Delay 0.1 sec to prevent mashing cpu unnecessarily
EndWhile
'EVENT HANDLING SUBROUTINES
Sub
OnMouseDown
mouseDown
=
"True"
offsetX
=
GraphicsWindow
.
Left
-
Mouse
.
MouseX
offsetY
=
GraphicsWindow
.
Top
-
Mouse
.
MouseY
EndSub
Sub
OnMouseUp
mouseDown
=
"False"
EndSub
Sub
OnRightClickMenu
If
(
LDDialogs
.
LastRightClickMenuItem
=
1
)
Then
Program
.
End
(
)
EndIf
EndSub
The partially transparent clock floats above all windows, it can be moved by grabbing with a mouse click and dragging. A right click gives an option to exit it.
With these basic code segments you can create your own fancy professional looking widgets, perhaps with options to change and store settings.