RESIZE UNE FORM SANS CLIGNOTEMENT MOCHE

Signaler
Messages postés
3
Date d'inscription
lundi 19 août 2002
Statut
Membre
Dernière intervention
21 août 2002
-
Messages postés
130
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
28 janvier 2013
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/2381-resize-une-form-sans-clignotement-moche

Messages postés
130
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
28 janvier 2013

Bon ben moi c'est 100% = ok avec une seul astuce, (la tienne LuTo)
"Cette pitite source propose une solution simple pour eviter ca en simulant le relachement du bouton gauche de la sourie"
et rien d'autre !
soit :

Public Declare Sub mouse_event Lib "user32" (ByVal dwflags As Long, _
ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, _
ByVal dwExtraInfo As Long)
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Type POINTAPI
X As Long
Y As Long
End Type

Dim position_souris As POINTAPI
GetCursorPos position_sourisX% position_souris.X: Y% position_souris.Y
Call mouse_event(MOUSEEVENTF_LEFTUP, X%, Y%, 0, 0) 'on relache le bouton

en faite dés le relâchement du clic gauche de la souris le redimensionnement s'arrete !
et cela marche aussi bien au haut que en bas, à gauche et à droite !!!

en faite moi j'ai même utilisé qu'une seul ligne, puisque j'ai déjà une procédure qui s'occupe de la gestion de la souris !

...

Private Sub Form_Resize()
ecran.Top Client_poste.Top + Client_poste.Height + 5: ecran.Left 5
If zz_CD.Width \ Screen.TwipsPerPixelY < ecran.Left + 200 Then zz_CD.Width = (ecran.Left + 200) * Screen.TwipsPerPixelY: choix% = 1
If zz_CD.Height \ Screen.TwipsPerPixelY < ecran.Top + 150 + Stop_clavier_souris.Height Then zz_CD.Height = (ecran.Top + 150 + Stop_clavier_souris.Height) * Screen.TwipsPerPixelY: choix% = 1
If choix% = 1 Then Sendmouse , , Relache_gauche_: Exit Sub '<<<<<<<<<<<<<<<<<<<<< elle est là !!!!
...
...
...
etc.

a plus les petites souris :)
Messages postés
98
Date d'inscription
samedi 30 novembre 2002
Statut
Membre
Dernière intervention
10 septembre 2007
1
Cool, merci!

Pour enlever complètement les clignotements, remplacez:


If .Width < LargeurMin And .Height < HauteurMin Then
Call mouse_event(MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
End If


par:

If .Width < LargeurMin Or .Height < HauteurMin Then
Call mouse_event(MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
End If


Bref, remplacez le "And" par "Or"

Ça éviteras les clignotements. Cepandant, si la largeur arrive à sa limit et que l'hauteur (ou vise verça) n'y est pas, l'évènement MOUSSEEVENTF_ABSOLUTE auras lieu donc le bouton de la sourie seras relâché.

Je trouve ça toujours mieux que le clignotement.

Merci encore.
Messages postés
14
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
6 février 2006

Excellent pile poil ce qu'il me fallait

Chez moi ça 'clignote' encore quand je resize sur la largeur ou la hauteur. Cependant quand je resize à partir du coin bas à droite pas de prob.
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
ouais, j'ai proposé une nouvelle source, qui améliore grandement cela...
C'est du vrai Resizing... il ne faut pas utiliser la méthode de l"évenement Resize d'une forme, mais utiliser la technique de sous-classement, c'est à dire intercepter directempent le message qui arrive à Windows comme quoi la fenetre est redimensionné...
Afficher les 7 commentaires