Small Basic – Transparent GraphicsWindow


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.

Comments (3)

  1. anonymouscommenter says:

    Thanks for distributing fabulous data. It' s my pleasure to read it.I have also bookmarked you for ascertaining out new mails.

    <a href="http://tips-commodity.net">Commodity tips</a>