Mauszeiger ändern unter Linux

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Mauszeiger ändern unter Linux

Beitrag von tmjuk »

Hallo,

ich möchte gern den Mauszeiger unter Linux ändern. Z.B. als Uhr darstellen.
Bei Bill's OS macht man dann mittels Api die Sanduhr an.
Aber wie funktioniert das unter Linux?

Ich hatte Folgendes probiert:

Code: Alles auswählen

; Mousezeiger verändern mittels Linux Api

cursor = gdk_cursor_new_(#GDK_CLOCK)
OpenWindow(1,100,100,500,500,"Test Maus",#PB_Window_SystemMenu)
CreateGadgetList(WindowID(1))
ButtonGadget(1,100,100,70,20,"Test")
ButtonGadget(2,100,140,70,20,"Schließen")
Repeat
    eventid = WaitWindowEvent()
    If eventid = #PB_Event_Gadget
        Select EventGadget()
            Case 1
                gdk_window_set_cursor_(WindowID(1),cursor)
                
            Case 2
                End
        EndSelect    
    EndIf
Until eventid = #PB_Event_CloseWindow
Funktioniert bloß leider nicht so wie ich dachte. Eben noch zu wenig Kenntnisse :oops:

Hat mal jemand von euch einen Tip?

Danke
Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ich weiß selbst, dass es keine große Hilfe ist aber wenn sonst nichts kommt,
könntest du in den Source von XChat schauen, dort wird der Cursor auch zu
einer zeigenden Hand geändert, wenn man mit der Maus über ein Link fährt.
Bild
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

@MVXA
Trotzdem danke.
Vielleicht hat ja noch jemand was, mit dem er mich in die richtige Richtung schubst.

Gruß Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Mauszeiger ändern unter Linux

Beitrag von Kukulkan »

Ok, schon veralteter Thread. Aber evtl. hilft es ja jemandem:

Code: Alles auswählen

; Mousezeiger verändern mittels Linux Api

*cursor.GdkCursor = gdk_cursor_new_(#GDK_CLOCK)
OpenWindow(1,100,100,500,500,"Test Maus",#PB_Window_SystemMenu)
CreateGadgetList(WindowID(1))
ButtonGadget(1,100,100,70,20,"Test")
ButtonGadget(2,100,140,70,20,"Schließen")
Repeat
  eventid = WaitWindowEvent()
  gdk_window_set_cursor_(gtk_widget_get_parent_window_(GadgetID(1)), *cursor)
  If eventid = #PB_Event_Gadget
      Select EventGadget()
          Case 1
              
          Case 2
            eventid = #PB_Event_CloseWindow
      EndSelect    
  EndIf
Until eventid = #PB_Event_CloseWindow

End
Leider klappt es nicht, wenn man WindowID(1) an gdk_window_set_cursor_() übergibt. Man bekommt den passenden Handle nur über gtk_widget_get_parent_window_() und über ein Gadget auf dem Fenster.

Man muss auch begreifen, dass das dann nicht dauerhaft gilt, sondern nur bis nur nächsten Bewegung. Daher muss man das immer im Haupt-Loop neu aufrufen. Es empfiehlt sich, ein paar Proceduren oder Makros dafür zu machen.

Grüße,

Kukulkan
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Mauszeiger ändern unter Linux

Beitrag von Shardik »

Kukulkan hat geschrieben:Man muss auch begreifen, dass das dann nicht dauerhaft gilt, sondern nur bis nur nächsten Bewegung. Daher muss man das immer im Haupt-Loop neu aufrufen.
Wenn man es richtig macht, ist dies nicht nötig... :wink:
Man kann an gdk_window_set_cursor_() nicht WindowID(1) direkt übergeben,
sondern muß über die Struktur Widget/window gehen:

Code: Alles auswählen

OpenWindow(0, 100, 100, 170, 160, "Cursor-Test")
ButtonGadget(0, 10, 10, WindowWidth(0) - 20, 24, "X-Cursor")
ButtonGadget(1, 10, 40, WindowWidth(0) - 20, 24, "O-Cursor")
ButtonGadget(2, 10, 70, WindowWidth(0) - 20, 24, "+-Cursor")
ButtonGadget(3, 10, 100, WindowWidth(0) - 20, 24, "Sprühflasche")
ButtonGadget(4, 10, 130, WindowWidth(0) - 20, 24, "Uhr")

Procedure ChangeCursor(CursorID.I)
  *Widget.GtkWidget = WindowID(0)
  *Cursor.GdkCursor = gdk_cursor_new_(CursorID)

  If *Cursor
    gdk_window_set_cursor_(*Widget\window, *Cursor)
  EndIf
EndProcedure

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0
          ChangeCursor(#GDK_X_CURSOR)
        Case 1
          ChangeCursor(#GDK_CIRCLE)
        Case 2
          ChangeCursor(#GDK_TCROSS)
        Case 3
          ChangeCursor(#GDK_SPRAYCAN)
        Case 4
          ChangeCursor(#GDK_WATCH)
      EndSelect
  EndSelect
ForEver
Wer selbst entworfene Cursor verwenden möchte, sollte sich dieses
Beispiel von Erlend ansehen:
http://www.purebasic.fr/english/viewtop ... 09&start=1

GBeebe hat gezeigt, wie man ein PNG-Bild als Cursor einsetzt:
http://www.purebasic.fr/english/viewtop ... 12&t=41209
Antworten