WM_SETREDRAW

Sujets variés concernant le développement en PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

WM_SETREDRAW

Message par Anonyme2 »

Salut à toutes et tous,
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 ... :mrgreen:

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()
les 2 macros de blocage/déblocage du gadget
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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: WM_SETREDRAW

Message par nico »

Tu peux utiliser: SetGadgetData(#Gadget, Valeur)

Valeur = 1 disable
Valeur = 0 enable
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: WM_SETREDRAW

Message par Anonyme2 »

nico a écrit :Tu peux utiliser: SetGadgetData(#Gadget, Valeur)

Valeur = 1 disable
Valeur = 0 enable
Oui Nico, tu as raison mais je l'utilise déjà avec des SetGadgetData dans tous les coins, alors pour modifier ça va vite devenir pénible.
J'aurais du écrire une macro pour SetGadgetData , comme ça, on change que la macro et ça roule, mais bon je ne suis pas un pro...
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: WM_SETREDRAW

Message par Patrick88 »

il me semble qu'avec un ContainerGadget, lorsqu'il est désactivé, TOUT les gadgets qu'il contient le sont aussi.

Pat
Répondre