Mauszeiger -> Sanduhr

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Mauszeiger -> Sanduhr

Beitrag von satmax »

Hallo,

ich bekomme das mit der Sanduhr nicht hin. Einzig wenn die Maus über der Titelleiste ist wird die Eieruhr angezeigt.

Das Fenster wird in einem eigenen Thread ausgeführt, innerhalb dieses Threads rufe ich folgende Funktion auf:

Code: Alles auswählen


STATIC FUNCTION neueSuche(oDlg)
LOCAL nTreffer:=0

oDlg:drawingarea:SetPointer(nil,XBPSTATIC_SYSICON_WAIT, XBPWINDOW_POINTERTYPE_SYSPOINTER )
oDlg:setPointer(nil,XBPSTATIC_SYSICON_WAIT, XBPWINDOW_POINTERTYPE_SYSPOINTER)

// Some code: 2-3 seconds

oDlg:drawingarea:SetPointer(nil,0,XBPWINDOW_POINTERTYPE_SYSPOINTER )
oDlg:SetPointer(nil,0, XBPWINDOW_POINTERTYPE_SYSPOINTER )

RETURN nil

Was mach ich hier falsch?

Gruß
Markus
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Mauszeiger -> Sanduhr

Beitrag von satmax »

Kleiner Nachtrag: die Sanduhr wird angezeigt, nur wenn man die Maus bewegt (auch wenn nur innerhalb des Dialoges) wird sofort ein normaler Cursor daraus.
Gruß
Markus
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: Mauszeiger -> Sanduhr

Beitrag von Magic »

satmax hat geschrieben:Einzig wenn die Maus über der Titelleiste ist wird die Eieruhr angezeigt.
Ist richtig so. Du muss (so mache ich es) den Mauszeiger für alle XbaseParts ändern.
Ich mache es folgedermaßen (als self Parameter übergebe ich i.d.R. den aktuellen Dialog):

Code: Alles auswählen

   // Sanduhr als Mauszeiger anzeigen
   ::_setPointer( self, .F. )

Code: Alles auswählen

********************************************************************************
METHOD MAINDIALOG:_setPointer( pxXbasePart, plDefault )
 * Mauszeiger verändern
 * Parameter: pxXbasePart: XbasePArt dessen Mauszeiger verändert werden soll
 *            plDefault: Defaultmauszeiger, sonst Sanduhr
 * Return: NIL
********************************************************************************

   LOCAL aChildList  := pxXbasePart:childList(), ;
         nLen        := 0, ;
         i           := 0

      IF plDefault
         IF .NOT. ( "Button" $ pxXbasePart:className() )
            pxXbasePart:setPointer( , XBPSTATIC_SYSICON_DEFAULT, XBPWINDOW_POINTERTYPE_SYSPOINTER )
         ELSE
            pxXbasePart:setPointer( , ICON_HAND, XBPWINDOW_POINTERTYPE_ICON )
         ENDIF
      ELSE
         pxXbasePart:setPointer( , XBPSTATIC_SYSICON_WAIT, XBPWINDOW_POINTERTYPE_SYSPOINTER )
      ENDIF

      nLen := Len( aChildList )
      FOR i := 1 TO nLen
         ::_setPointer( aChildList[i], plDefault )
      NEXT

RETURN NIL
und zurück

Code: Alles auswählen

   // Mauszeiger default wieder setzen
   ::_setPointer( self, .T. )
Gruß,
Magic
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Mauszeiger -> Sanduhr

Beitrag von satmax »

Hallo Magic,

super, funktioniert einwandfrei!

Danke
Markus
Gruß
Markus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Mauszeiger -> Sanduhr

Beitrag von brandelh »

Wenn man die Anwendung vor "Störungen" blockieren will, kann man neben disable (was nicht immer erwünscht ist) auch einfach ein durchsichtiges Static control erstellen und so groß wie die Anwendung (Anwendungsmodal oder mit eigener Eventloop) anzeigen. Dieses schluckt dann alle Eingaben ;-)
Gruß
Hubert
Antworten