Partilhar via


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