Page 1 sur 2

Demande de précision sur l'utilisation des curseurs Windows

Publié : mer. 24/nov./2010 19:15
par boddhi
Salut à tous !

Voilà, ça fait (très) longtemps que je bute (et que je laisse cela de côté :) ) un problème sur les curseurs de la souris sous Windows.
J'ai décidé de prendre le taureau par les cornes et de résoudre enfin ce problème (enfin pour moi c'en est un :) !!)

J'avais à l'époque étudié le topic ci-dessous et essayé de l'adapter à mes besoins :
http://www.purebasic.fr/french/viewtopi ... lit=cursor

Mon but est d'afficher, sur une fenêtre "disabled", un curseur IDC_WAIT afin de faire comprendre à l'utilisateur qu'un processus est en cours.
Mais voilà, lorsqu'un on affecte un curseur à une fenêtre, c'est uniquement sur le fond de cette dernière que le curseur modifié devient actif.
Le curseur n'est pas valable sur ses gadgets.

Cela sous-entendrait-il qu'il faille nécessairement affecter également le curseur à chaque gadget, (ainsi qu'à certains autres types de contrôles tels que les en-têtes de colonnes des ListIcon, ...) ou y aurait-il un moyen d'affecter un curseur de souris à une fenêtre et à l'ensemble de ses gadgets, quels qu'ils soient, de manière plus simple ???

Merci.

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 19:41
par Backup
.............................

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 20:04
par boddhi
@Dobro
C'est bien pour cela que j'avais fini par laisser tomber !!!
A partir de ton code :

Code : Tout sélectionner

OpenWindow(0,100,100,500,500,"Essai curseur",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(0,50,50,400,400,"ListIcon",380)
hcur=LoadCursor_(0,#IDC_WAIT)
Debug hdc
SetCursor_(hcur )
Repeat
  Evenmt=WaitWindowEvent()
Until Evenmt=#PB_Event_CloseWindow
Aucun changement du curseur

Alors que :

Code : Tout sélectionner

OpenWindow(0,100,100,500,500,"Essai curseur",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(0,50,50,400,400,"ListIcon",380)
SetClassLong_(WindowID(0),#GCL_HCURSOR,LoadCursor_(0,#IDC_WAIT))
Repeat
  Evenmt=WaitWindowEvent()
Until Evenmt=#PB_Event_CloseWindow
Le curseur change sur le fond de la fenêtre mais pas sur le gadget...

et

Code : Tout sélectionner

OpenWindow(0,100,100,500,500,"Essai curseur",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(0,50,50,400,400,"ListIcon",380)
SetClassLong_(WindowID(0),#GCL_HCURSOR,LoadCursor_(0,#IDC_WAIT))
SetClassLong_(GadgetID(0),#GCL_HCURSOR,LoadCursor_(0,#IDC_WAIT))
Repeat
  Evenmt=WaitWindowEvent()
Until Evenmt=#PB_Event_CloseWindow
Le curseur change sur le fond de la fenêtre et sur l'intérieur du ListIcon mais pas sur l'en-tête de colonne...


:( :?:

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 20:20
par Patrick88
ajoute

Code : Tout sélectionner

DisableGadget(0,#True)
juste après la définition du gadget et là ça marche

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 20:52
par boddhi
@Dobro et Patrick88
L'exemple ci-dessous fonctionne...

Code : Tout sélectionner

Procedure Traitement()
  DisableWindow(0,#True)
  For Compteur=1 To 20
    If Compteur&1
      hcur=LoadCursor_(0,#IDC_CROSS)
    Else
      hcur=LoadCursor_(0,#IDC_SIZEALL)
    EndIf
    SetCursor_(hcur)
    ExamineDirectory(0,"c:\windows","*.*")
    While NextDirectoryEntry(0)
      Debug DirectoryEntryName(0)
      ;WindowEvent()
    Wend
    FinishDirectory(0)
  Next
  AddGadgetItem(0,-1,"Traitement terminé")
  DisableWindow(0,#False)
EndProcedure

OpenWindow(0,100,100,500,500,"Essai curseur",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(0,50,50,400,400,"ListIcon",380)
ButtonGadget(1,210,470,80,22,"Traitement")
Repeat
  Evenmt=WaitWindowEvent()
  Select Evenmt
    Case #PB_Event_Gadget
      If EventGadget()=1:Traitement():EndIf
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Mais dans mon code, le résultat escompté ne se produit pas...
Je vais essayer de trouver d'où cela vient...

Merci à vous deux en tout cas.

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 21:05
par boddhi
Je ne voudrais pas jouer les lourdingues :D mais y a quand même un truc qui me chiffonne..
Dans le code suivant

Code : Tout sélectionner

OpenWindow(0,100,100,500,500,"Essai curseur",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(0,50,50,400,400,"ListIcon",380)
hcur=LoadCursor_(0,#IDC_WAIT)
Debug hdc
SetCursor_(hcur )
Repeat
  Evenmt=WaitWindowEvent()
Until Evenmt=#PB_Event_CloseWindow
On peut simplement souhaiter que le curseur change d'apparence sans pour autant que la fenêtre ou son(ses) gadget(s) soi(en)t désactivé(s)..
Pourquoi ne fonctionne-t-il pas alors ?

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 21:08
par Backup
..........................

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 21:38
par boddhi
@Dobro
Autre approche intéressante qui fonctionne (Mais diable ! Pourquoi faire simple quand on peut faire plus compliqué :lol: )

Note :

Code : Tout sélectionner

Declare WindowCallback( windowid ,message,wParam,lParam)
n'est pas utile puisque pas de callback... (un ';' oublié je suppose :wink: )

Merci de ton aide.

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 21:44
par boddhi
@Dobro

Du coup ton code m'a donné une idée. Si on inclut le SetCursor_() dans la boucle, comme ceci, là ça fonctionne...:

Code : Tout sélectionner

OpenWindow(0,100,100,500,500,"Essai curseur",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(0,50,50,400,400,"ListIcon",380)
hcur=LoadCursor_(0,#IDC_WAIT)
Repeat
  SetCursor_(hcur )
  Evenmt=WaitWindowEvent()
Until Evenmt=#PB_Event_CloseWindow
Tu crois que c'est normal ?

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 21:45
par Backup
boddhi a écrit : n'est pas utile puisque pas de callback... (un ';' oublié je suppose :wink: )

Merci de ton aide.
oui :)

question : pourquoi te connecte tu en mode invisible ?

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 21:50
par boddhi
Dobro a écrit :question : pourquoi te connecte tu en mode invisible ?
Ah oui, tiens j'avais jamais fait gaffe...
Pourtant, je ne coche jamais la case 'cacher le statut en ligne'...
Je vais aller voir du côté du profil... peut-être que cela vient de là ???

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 21:55
par boddhi
boddhi a écrit :Je vais aller voir du côté du profil... peut-être que cela vient de là ???
Je confirme...

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 21:58
par boddhi
Arggh, je suis vert maintenant !!! :lol: :lol:

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 22:40
par Backup
boddhi a écrit :Arggh, je suis vert maintenant !!! :lol: :lol:
Comment ça t'es vert ?

Re: Demande de précision sur l'utilisation des curseurs Wind

Publié : mer. 24/nov./2010 22:49
par falsam
Depuis qu'il n'est plus en mode connecté invisible, il vient de se rendre compte qu'il ressemble à Hulk (Bon ok, elle est vraiment nulle)