PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → évènements minimiser fenêtre
évènements minimiser fenêtre
Started by pgendron, Apr., 25 2006 11:58 PM - 4 replies
Posted on April, 25 2006 - 11:58 PM
Bonjour,

est-il possible d'ajouter un évènement lorsque l'utilisateur clique sur le bouton pour minimiser la fenêtre... je ne veux pas utiliser la fonction "modification taille fenêtre", car elle se déclanche lorsque l'utilisiteur restaure la fenêtre également.

merci !
Posted on April, 26 2006 - 10:51 AM
Salut,

il n'y a pas d'événement qui gère cela directement.

Voici une solution:
Tu dois surclasser la fenêtre.

Voici comment faire:

//--Code de déclarations globales de ta fenêtre--
EXTERN "WinConst.wl"
CONSTANTE
GWL_WNDPROC = -4
SC_MINIMIZE = 0xF020
FIN
//modification de la procedure par défaut
defWindowProc est un entier
defWindowProc =
API("user32","SetWindowLongA",Handle(MaFenêtre),GWL_WNDPROC,&MaProcedure)

//--Code de fermeture de ta fenêtre--
//restauration de la procedure par défaut
SI defWindowProc <> 0ALORS
API("user32","SetWindowLongA",Handle(MaFenêtre),GWL_WNDPROC,defWindowProc)
defWindowProc = 0
FIN


//--Fonction locale MaProcedure--
PROCEDURE MaProcedure(hwnd,uMsg,wParam,lParam)
iRetour est un entier = -1
SI hwnd = Handle(MaFenêtre) ALORS
SI uMsg = WM_SYSCOMMAND ALORS
SI wParam = SC_MINIMIZE ALORS
Info("min")
//Ceci permet d'annuler le clic sur le bouton minimiser
iRetour = 0
FIN
FIN
FIN
SI iRetour = -1 ALORS
//Appel de la procedure normale
iRetour =
API("user32","CallWindowProcA",defWindowProc,hwnd,uMsg,wParam,lParam)
FIN
RENVOYER iRetour

La fonction MaProcedure te permet de décider ce qui arrivera lors d'un clic
sur le bouton minimiser. Si la valeur retournée par la procédure est 0, la
procédure normale d'un clic sur le bouton minimiser ne sera pas effectuée.

Mathieu
Posted on April, 26 2006 - 10:52 AM
Tout d'abord déclarer les constantes

//Specifies the type of resizing requested. This parameter can be one of the following values.
CONSTANT
SIZE_MAXHIDE= 0x0004
//Message is sent to all pop-up windows when some other window is
maximized.
SIZE_MAXIMIZED = 0x0003
//The window has been maximized.
SIZE_MAXSHOW = 0x0002
//Message is sent to all pop-up windows when some other window has
been restored to its former size.
SIZE_MINIMIZED = 0x0001
//The window has been minimized.
SIZE_RESTORED = 0x0000
//The window has been resized, but neither the SIZE_MINIMIZED nor
SIZE_MAXIMIZED value applies.

//lParam
//The low-order word of lParam specifies the new width of the client area.
//The high-order word of lParam specifies the new height of the client area.

FIN

Ensuite dans le code de déclaration des globales appeler la fonction sur evenemet

Evénement("ON_WM_SIZE", "*.", WM_SIZE)

puis créer la fonction ON_WM_SIZE

PROCEDURE ON_WM_SIZE(message,wParam,lParam)

SELON wParam
//Specifies the type of resizing requested. This parameter can be one of the following values.
CAS SIZE_MAXHIDE // ( 4 ou 0x0004 )
//Message is sent to all pop-up windows when some other window is
maximized.
Trace("SIZE_MAXHIDE largeur : "+PoidsFaible(lParam)+" Hauteur : "+PoidsFort(lParam))

CAS SIZE_MAXIMIZED // ( 3 ou 0x0003 )
//The window has been maximized. ( CLICK SUR LE BOUTON
D'AGRANDISSEMENT MAXI bouton de droite )
Trace("SIZE_MAXIMIZED largeur : "+PoidsFaible(lParam)+" Hauteur : "+PoidsFort(lParam))

CAS SIZE_MAXSHOW //( 2 ou 0x0002 )
//Message is sent to all pop-up windows when some other window
has been restored to its former size.
Trace("SIZE_MAXSHOW largeur : "+PoidsFaible(lParam)+" Hauteur : "+PoidsFort(lParam))

//
// MINIMISER C ICI
//
CAS SIZE_MINIMIZED // ( 1 ou 0x0001 )
//The window has been minimized. ( CLIC SUR LE BOUTON DE
REDUCTION bouton de gauche)
Trace("SIZE_MINIMIZED largeur : "+PoidsFaible(lParam)+" Hauteur : "+PoidsFort(lParam))

// ICI PoidsFaible(lParam) est toujours égal à 0 et PoidsFort(lParam)<=0
// j'ai toujours PoidsFort(lParam)=0 en MDI et PoidsFort(lParam) =-24 sans MDI

//
//

CAS SIZE_RESTORED // ( 0 ou 0x0000 )
//Changemet de taille manuel ( coin droite bas ) ou restoration
de la taille bouton du milieu .
Trace("SIZE_RESTORED largeur : "+PoidsFaible(lParam)+" Hauteur : "+PoidsFort(lParam))


//lParam
//The low-order word of lParam specifies the new width of the client area.
//The high-order word of lParam specifies the new height of the client area.
AUTRE CAS

FIN


bon Wdev

patrice
Posted on April, 26 2006 - 2:56 PM
Peut-être plus simple.
Possibilité 1:Avec l'événement resize.
SI tu teste l'état de ta fenêtre, tu sauras si l'action était un minimize.
Possibilité 2. Tu te crées un bouton minimise et maximise, comme dans l'exemple de Windev CRM.
Michel, Montréal
Posted on April, 26 2006 - 6:46 PM
Merci Patrice...

c'est ton exemple que j'utilise et ça fonctionne à merveille !

Paul