Cursor ändern

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von TheMaxiSoftware.

    Cursor ändern

    Ich habe bereits rausgefunden, wie man in einem programm den Cursor ändern kann, aber mein Problem ist es, dass der cursor nur in der Form geändert ist.



    Hier ist mein Code:


    VB.NET-Quellcode

    1. Public Class Form1
    2.  
    3. Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As IntPtrDim g As IntPtr = LoadCursorFromFile("C:\Users\Public\Pictures\Sample Pictures\icon.ico")
    4. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.LoadMe.Cursor = New Cursor(g)
    5. End Sub
    6. End Class

    TheMaxiSoftware schrieb:

    aber die Beispiel sind in C# geschrieben

    Gusst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    TheMaxiSoftware schrieb:

    und ich kann nur Basic.
    Ich neme an, du meinst Visual Basic - Basic ist eine völlig andere Sprache. Bitte verwende VB zum abkürzen.
    Danke für diese Seite. Ich wusste nicht, dass es sowas gibt.

    Den Code hab ich jetzt eingegeben aber das LoadCursor ist nicht deklariert:

    VB.NET-Quellcode

    1. Private Sub SetSystemCursor()
    2. Dim hcursor As IntPtr = LoadCursor(IntPtr.Zero, IDC_STANDARD_CURSORS.IDC_ARROW)
    3. Dim ret_val As Boolean = SetSystemCursor(hcursor, OCR_SYSTEM_CURSORS.OCR_NORMAL)
    4. End Sub


    Und wie vorher schon erwähnt, ich mag einen eigenen Coursor benutzen.
    Welcher wäre das?

    Ich glaube dieser:
    Declare Function LoadCursor Lib "user32.dll" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Any) As Long

    Aber hier wird das Any in der Declare-Anweisung nicht unterstützt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TheMaxiSoftware“ ()

    Weist du, was dein Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As IntPtr überhaupt bedeutet?
    Das ist genau so ein API-Aufruf!
    Du musst das dann nur noch für "LoadCursor" leicht verändern!

    EDIT: Gepostet, bevor ich die Veränderung gesehen habe...
    Hast du mal auf der Seite gesucht, die ich dir geschrieben habe? Wenn man sucht findet man das:

    VB.NET-Quellcode

    1. <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
    2. Public Shared Function LoadCursor( _
    3. ByVal hInstance As IntPtr, _
    4. ByVal lpCursorName As String) As IntPtr
    5. End Function
    Danke für eure schnellen Antworten.


    Ich habe es jetzt hinbekommen:

    VB.NET-Quellcode

    1. Private Declare Function SystemParametersInfo Lib "USER32.DLL" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As Integer, ByVal fuWinIni As Integer) As Integer
    2. Private Declare Function LoadCursorFromFile Lib "USER32.DLL" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As IntPtr
    3. Private Declare Function SetSystemCursor Lib "USER32.DLL" (ByVal hCursor As IntPtr, ByVal id As Integer) As Boolean
    4. Private Const SPIF_UPDATEINIFILE As Integer = &H1
    5. Private Const SPIF_SENDWININICHANGE As Integer = &H2
    6. Private Const SPI_SETCURSORS As Integer = &H57 '//zurückbringen des System Cursors



    Dann habe ich die Windows Cursor deklariert:

    VB.NET-Quellcode

    1. Private Enum IDC_STANDARD_CURSORS As Integer
    2. IDC_ARROW = 32512
    3. IDC_IBEAM = 32513
    4. IDC_WAIT = 32514
    5. IDC_CROSS = 32515
    6. IDC_UPARROW = 32516
    7. IDC_SIZE = 32640
    8. IDC_ICON = 32641
    9. IDC_SIZENWSE = 32642
    10. IDC_SIZENESW = 32643
    11. IDC_SIZEWE = 32644
    12. IDC_SIZENS = 32645
    13. IDC_SIZEALL = 32646
    14. IDC_NO = 32648
    15. IDC_APPSTARTING = 32650
    16. IDC_HELP = 32651
    17. End Enum



    Wenn man auf Button1 drückt, dann ändert sich der Cursor "ARROW" in meinen eigenen Cursor:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. SetSystemCursor(LoadCursorFromFile("C:\Users\Maxi\Pictures\nat1009.cur"), IDC_STANDARD_CURSORS.IDC_ARROW)
    3. End Sub



    Und wenn man auf Button2 drückt, dann werden die Cursor wieder zurückgesetzt:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    2. SystemParametersInfo(SPI_SETCURSORS, 0, 0, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
    3. End Sub



    EDIT: Dass alles geht auch mit Icon-Dateien

    Hier ist ein Tutorial:
    youtube.com/watch?v=GYTyK0pzwww

    LG, TheMaxiSoftware

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TheMaxiSoftware“ ()