|
-
Jan 29th, 2016, 09:24 AM
#1
Thread Starter
Member
[RESOLVED] Change cursor with code, by pressing keys, to the respective document.cur
I'm creating a project,
with a no border [FormBorderStyle=None] transparent [BackColor=White][TransparencyKey=White] screen sized [Size=1366; 768] form (with 10 PictureBoxes):

...and I need help to make the application work.
I want it to change the cursor (doesn't matter the location, inside or outside the form, I want always the cursor selected) to one of my 9 cursors stored on my pc (one for each command Alt+1 Alt+2 Alt+3 Alt+4 Alt+5 Alt+6 Alt+7 Alt+8 Alt+9).
I already have the code for the commands and the code to change the cursor, but it only works at the beggining (when the form is being loaded [Event Form1_Load] and at the end [Event Form1_FormClosed] so that it changes back to the default cursor).
I tried to put on the if Alt+1to9 code but it just doesn't work.
I think that I need to disable/unload the cursor, then change it, and enable/load it again but I don't know how to do it (or even destroy it and create a new one).
I searched everywhere but I can't understand the informations on the Internet because I can't find any example working or it's in C#/C++.
Here's all the code on the project:
Code:
Imports System.Runtime.InteropServices
Public Class Form1
<DllImport("user32.dll")> Public Shared Function CopyIcon(ByVal hIcon As IntPtr) As IntPtr
End Function
<DllImport("user32.dll")> Private Shared Function LoadCursorFromFile(ByVal fileName As String) As IntPtr
End Function
<DllImport("User32.dll")> Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
End Function
<DllImport("user32.dll")> Private Shared Function SetSystemCursor(ByVal hCursor As IntPtr, ByVal id As Integer) As Boolean
End Function
<DllImport("User32.dll")> Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
End Function
Const OCR_NORMAL As UInteger = 32512
Dim oldCursor As IntPtr
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
oldCursor = CopyIcon(Cursors.Default.CopyHandle)
SetSystemCursor(CopyIcon(LoadCursorFromFile("C:\Users\Rúben\Desktop\Rúben\Texturas\Cursor Grass Block 3D.cur")), OCR_NORMAL)
Me.PictureBox2.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox2.Location))
Me.PictureBox2.Parent = Me.PictureBox1
Me.PictureBox3.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox3.Location))
Me.PictureBox3.Parent = Me.PictureBox1
Me.PictureBox4.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox4.Location))
Me.PictureBox4.Parent = Me.PictureBox1
Me.PictureBox5.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox5.Location))
Me.PictureBox5.Parent = Me.PictureBox1
Me.PictureBox6.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox6.Location))
Me.PictureBox6.Parent = Me.PictureBox1
Me.PictureBox7.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox7.Location))
Me.PictureBox7.Parent = Me.PictureBox1
Me.PictureBox8.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox8.Location))
Me.PictureBox8.Parent = Me.PictureBox1
Me.PictureBox9.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox9.Location))
Me.PictureBox9.Parent = Me.PictureBox1
Me.PictureBox10.Location = Me.PictureBox1.PointToClient(Me.PointToScreen(Me.PictureBox10.Location))
Me.PictureBox10.Parent = Me.PictureBox1
RegisterHotKey(Me.Handle, 0, &H1, 0)
RegisterHotKey(Me.Handle, 100, &H1, Keys.D1)
RegisterHotKey(Me.Handle, 200, &H1, Keys.D2)
RegisterHotKey(Me.Handle, 300, &H1, Keys.D3)
RegisterHotKey(Me.Handle, 400, &H1, Keys.D4)
RegisterHotKey(Me.Handle, 500, &H1, Keys.D5)
RegisterHotKey(Me.Handle, 600, &H1, Keys.D6)
RegisterHotKey(Me.Handle, 700, &H1, Keys.D7)
RegisterHotKey(Me.Handle, 800, &H1, Keys.D8)
RegisterHotKey(Me.Handle, 900, &H1, Keys.D9)
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = &H312 Then
Dim id As IntPtr = m.WParam
Select Case (id.ToString)
Case "0"
PictureBox1.Image = My.Resources.Toolbar_0
PictureBox1.Visible = True
Case "100"
PictureBox1.Image = My.Resources.Toolbar_1
PictureBox1.Visible = True
Case "200"
PictureBox1.Image = My.Resources.Toolbar_2
PictureBox1.Visible = True
Case "300"
PictureBox1.Image = My.Resources.Toolbar_3
PictureBox1.Visible = True
Case "400"
PictureBox1.Image = My.Resources.Toolbar_4
PictureBox1.Visible = True
Case "500"
PictureBox1.Image = My.Resources.Toolbar_5
PictureBox1.Visible = True
Case "600"
PictureBox1.Image = My.Resources.Toolbar_6
PictureBox1.Visible = True
Case "700"
PictureBox1.Image = My.Resources.Toolbar_7
PictureBox1.Visible = True
Case "800"
PictureBox1.Image = My.Resources.Toolbar_8
PictureBox1.Visible = True
Case "900"
PictureBox1.Image = My.Resources.Toolbar_9
PictureBox1.Visible = True
End Select
End If
MyBase.WndProc(m)
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
PictureBox1.Visible = False
End Sub
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)
UnregisterHotKey(Me.Handle, 0)
UnregisterHotKey(Me.Handle, 100)
UnregisterHotKey(Me.Handle, 200)
UnregisterHotKey(Me.Handle, 300)
UnregisterHotKey(Me.Handle, 400)
UnregisterHotKey(Me.Handle, 500)
UnregisterHotKey(Me.Handle, 600)
UnregisterHotKey(Me.Handle, 700)
UnregisterHotKey(Me.Handle, 800)
UnregisterHotKey(Me.Handle, 900)
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
SetSystemCursor(CopyIcon(oldCursor), OCR_NORMAL)
End Sub
End Class
Note:The fact that there's no border on the form makes the 'change the cursor back to the default' not work, making me have to change the cursor every time I run the app. The form is invisible so it's like the cursor it's outside the form. On the code above, the 2 lines that sets the cursor are on the load event and what I'm trying to accomplish is to have it on each case statment.
My two threads about it:
http://www.vbforums.com/showthread.p...r-outside-form
http://www.vbforums.com/showthread.p...the-beggining)
If you want the program, inform me where I should display it. 
Any questions about the project, please post and I will try to answer right away...
Last edited by rdrmdr; Jan 29th, 2016 at 09:34 AM.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|