Your DesktopX Documentation Resource Guide

Documentation Home

Quick Start

User's Guide

Developer's Guide

Resources

Tutorials


Script Tutorials
#7 - Replacing the Right-Click Menu
A series by RomanDA

Today's Lesson: "Replacing the Right-Click Menu"

This is something that I have found myself working on a LOT lately.   Replacing the standard right-click menu that DX puts on everything with my own menu.  There are lots of reasons for this.

  • You want to remove the DX About box
  • You want to add more functions to this menu
  • You just don't like the standard menu, whatever...
  • You want to hide the standard preferences box
  • If you make it with PRO, you dont want the "CREATED WITH DESKTOPX PRO" on the about box!!

This is not going to be a simple STEP-BY-STEP, I'm assuming if you are this advanced into DX, I don't need to explain how to get the script windows up, or edit properties!  This is more like a SCRIPT example, not a step-by-step.

---- UPDATE - REVISED THE CODE and uploaded this as a widget for you to download and enjoy HERE

For this and all the Step-By-Step DX Tutorials you will need to purchase DesktopX for $14.95 from Stardock.

Lets get started.

 
STEP 1 - RegisterController
In order for DX to ignore the built-in right-click menu, you have to work a little magic.
Its not that complex, but it has to be setup in order to work.
  • Create a new object (see Tutorial #1)
  • Make it whatever you want, image/text.
  • Add the following to the script
  'Place this at the TOP of your code.
Dim IsMinimized
'We will use this to determine if the widget is minimized or not.
Dim ShowMenu  'Used to decide if we need to show/not show the right click menu

Sub Object_OnScriptEnter
  IsMinimized = False
'Set the IsMinimized to False
 
ShowMenu = False  'Use to set the right-click menu NOT to show
  desktopx.RegisterController Object.Name
'this code sets this object as the control for handling the right-clicks, etc.  The ides is to use the script into the MAIN object, and never add this in more then 1 place!!  It will mess things up.
End Sub
 
STEP 2 - OnControl Function
The OnControl function handles clicks on the tray icon, as well as right clicks coming from your widget.
  • Add the code below to the above script.
  Function OnControl(lType, lCode)
  OnControl = True
'Allow control to run
  ShowMenu = True
'Show the menu - by default
 
'These codes are there to allow you to use the RIGHT-CLICK from the tray icon, as well as the RIGHT-CLICK from the widget.
 
If lType=2 And lCode=517 Then ShowMenu = True ' RIGHT CLICK ON TRAY ICON
  If lType=1 And lCode=2 Then ShowMenu = True
' RIGHT CLICK ON ITEM

  If ShowMenu = True Then ' If we right-clicked on the tray or widget then...
  OnControl = True
'allow control to pass to the object
  If IsMinimized = False Then
'If the object isnt minimized (we will set this later in the popup menu) run the main popupmenu / else run the minimize popupmenu minimized function.
    Call PopupMenu
  Else
    Call PopupMenuMin
  End If
 End If
End Function

 
STEP 3 - Adding the POPUP Menu
The popup menu is the menu you want to show up when you RIGHT-CLICK on the widget/tray when the widget is not minimized, etc. (We will do the minimized version in a min).

I am not going to rip this all apart, there is another tutorial out there on making a right-click menu

  Function PopupMenu()
  Set mainmenu = nothing
  Set mainmenu = DesktopX.CreatePopupMenu
'-- Create Main Men
  If widget.Autorun=False Then
    mainmenu.AppendMenu 0, 1, "Autorun OFF"
  Else
    mainmenu.AppendMenu &H00000008, 1, "Autorun ON"
  End If
  mainmenu.AppendMenu 0, 2, "Minimize to Tray"
  mainmenu.AppendMenu 0, 3, "Close"
  mainmenu.AppendMenu &H00000800, 100, "seperator"
  mainmenu.AppendMenu 0, 4, "Preference"
  mainmenu.AppendMenu 0, 5, "About"

  '-- Save the results of mouse movements
  result = mainmenu.TrackPopupMenu(0, System.CursorX, System.CursorY)
  Select Case result
    Case 1
      If widget.Autorun = False Then
        widget.Autorun = True
      Else
        widget.Autorun = False
      End If
    Case 2
      IsMinimized = True
      object.Visible = False
    Case 3
      widget.Close
    Case 4
      widget.OpenProperties
    Case 5
      msgbox "This is my about box"
  End Select
End Function

 
STEP 4 - Minimized (Tray icon) menu
We are going to add a minimized menu, so that we have a way to restore the widget back to working order from minimized state.  Its not going to have all the functions of the main popup menu.

This menu will only be accessible with its minimized and from the tray icon.

  Function PopupMenuTray()
  Set mainmenu = nothing
  Set mainmenu = DesktopX.CreatePopupMenu
'-- Create Main Menu
  mainmenu.AppendMenu 0, 1, "Restore from Tray"
  mainmenu.AppendMenu 0, 2, "Close"
  '-- Save the results of mouse movements
  result = mainmenu.TrackPopupMenu(0, System.CursorX, System.CursorY)
  Select Case result
    Case 1
      IsMinimized = False
      object.Visible = True
    Case 2
    widget.Close
  End Select
End Function
 
STEP 5 - Add Left-Click menu
If you want you can also make the popup menu show when you LEFT-CLICK on the object as well.
This is a simple bit of code to be added to the object.
  Function Object_OnLButtonUp(x,y,dragged)
  If dragged = False Then
   Call PopupMenu
  End If
End Function
 

CONCLUSION

This should all work, there are a lot of options in the ONCONTROL function, as far as clicking works, this shuts off the CLICK HIDE/CLICK RESTORE on the tray icon as well, it has a way of messing things up.

This is not something i would recommend someone doing unless you really know DX.

One side effect of this is that you cant right-click on the main object anymore, it wont work, you will just get your menu (when editing things!!).  AND you will not be able to right-click the DX TRAY icon to pick edit, etc.  So just a warning.

I hope you have enjoyed this step into DX, and look forward to the next installment..


7/29 

SkinStudio 6.2 Released

7/25 

A God Has Fallen - New Demigod Trailer Released

7/24 

Sins of a Solar Empire v1.1 Beta has Arrived

7/23 

Stardock Releases New WindowBlinds 6.2 Update

7/22 

Stardock Releases The Political Machine v1.04 with New Characters

7/22 

Stardock Releases MyColors 2.5

7/17 

DesktopX 3.5 Officially Released

7/11 

Corel WinDVD 9 and Painter X Now Available on Impulse!