lorsque l'on utilise WM_SETREDRAW on a 2 cas de figure :
SendMessage_(hwnd, #WM_SETREDRAW, #False, 0) pour bloquer l'affichage et SendMessage_(Gadget_ID, #WM_SETREDRAW, #True, 0) pour débloquer l'affichage.
J'ai cherché comment savoir si l'affichage est bloqué pour la fenêtre/gadget mais je n'ai pas trouvé, je suis peut-être passé à côté.
Le message WM_GETREDRAW n'existe pas.
J'ai une solution en créant un compteur que j'incrémente pour chaque fenêtre/gadget avec une MAP mais pour l'instant je ne l'ai pas fait.
J'ai des appels de fonctions imbriqués avec des WM_SETREDRAW un peu partout et je n'ai pas toujours le résultat que je cherche (blocage de l'affichage).
Avez-vous une idée ?
Merci
-************** Edit
Finalement, avec la MAP ça a l'air d'aller, ça m'a permis de corriger mon code.
Le problème c'est qu'avec l'imbrication des appels, on sait pas toujours s'il y aura un blocage ou déblocage.
Donc on bloque quand le compteur vaut 0 et on l'incrémente.
Si le compteur est supérieur à 1, on l'incrémente mais on ne bloque pas puisqu'il est déjà bloqué.
On débloque l'affichage lorsque le compteur vaut 1 puis on le met à 0 puisqu'il est débloqué.
Il est impératif d'avoir autant d'appels de blocage que de déblocage sinon l'affichage va craindre ...
Vous pouvez supprimer les debug qui me permettent de savoir ou j'en suis.
La création de la MAP
Code : Tout sélectionner
;// Map des appels à SendMessage_(hwnd, #WM_SETREDRAW, xx, 0)
Global NewMap SendMessage_WM_SETREDRAW.i()
Attention si vous utilisez des fenêtres, il faut soit modifier les macros soit en écrire d'autres pour les fenêtres
Code : Tout sélectionner
Macro MAC_Bloque_Affichage_Gadget(Gadget)
;// bloque l'affichage du gadget
If IsGadget(Gadget)
If SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget))) < 0
SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget))) = 0
EndIf
Select SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget)))
Case 0
;// ici bloque l'affichage et on incrémente
SendMessage_(GadgetID(Gadget), #WM_SETREDRAW, #False, 0)
SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget))) + 1
Default
;// ici l'affichage est déjà bloqué, on incrémente simplement l'élément
SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget))) + 1
EndSelect
If gadget = #ExplorerListGadget
Debug "MAC_Bloque_Affichage_Gadget : " + Str(SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget))))
EndIf
EndIf
EndMacro
Macro MAC_Debloque_Affichage_Gadget(Gadget)
;// débloque l'affichage du gadget
If IsGadget(Gadget)
;// on ne débloque l'affichage que lorsque l'on a la valeur 1
Select SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget)))
Case 0
;// ici on est débloqué, on ne fait rien, c'est un appel pour rien ...
Case 1
SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget))) = 0
SendMessage_(GadgetID(Gadget), #WM_SETREDRAW, #True, 0)
InvalidateRect_(GadgetID(Gadget), 0, #True)
UpdateWindow_(GadgetID(Gadget))
Default
;// ici on ne fait que de décrémenter
SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget))) - 1
EndSelect
If gadget = #ExplorerListGadget
Debug "MAC_Debloque_Affichage_Gadget : " + Str(SendMessage_WM_SETREDRAW(Str(GadgetID(Gadget))))
EndIf
EndIf
EndMacro