Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RESIZE UNE FORM SANS CLIGNOTEMENT MOCHE


Information sur la source

Catégorie :Formulaire Classé sous : redimenssioner, resize, formulaire, form, feuille Niveau : Débutant Date de création : 09/01/2002 Date de mise à jour : 09/01/2002 08:50:35 Vu / téléchargé: 5 006 / 447

Note :
8,33 / 10 - par 3 personnes
8,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

Quand je veus limiter la taille minumum d'une form, j'utilise l'evenement Form_Resize et je change la taille de la form a ce moment-la. OK, mais ca fait super moche quand l'utilisateur deplace la sourie au-dessus de la form pendant qu'il la resize.
Cette pitite source propose une solution simple pour eviter ca en simulant le relachement du bouton gauche de la sourie et en deplacant le pointeur au niveau de la bordure.
C plus facile a comprendre avec le zip.
 

Source

  • '##########################################################
  • ' par LuTo
  • ' mail: ltousch@yahoo.com
  • ' site: http://ltousch.freeservers.com ' rien a voir avec la prog, mais bon
  • ' merci a Jeromax et Fabiin pour leurs codes sur les manipulations de sourie
  • '##########################################################
  • 'Declare les API
  • Private 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)
  • Private Declare Function SetCursorPos& Lib "user32" (ByVal x As Long, ByVal y As Long)
  • Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  • 'Declare le type utilise pour GetCursorPos
  • Private Type POINTAPI
  • x As Long
  • y As Long
  • End Type
  • 'Declare les constantes a utiliser avec mouse_event. ici, on s'en sert que de 2 mais bon
  • Const MOUSEEVENTF_ABSOLUTE = &H8000
  • Const MOUSEEVENTF_LEFTDOWN = &H2
  • Const MOUSEEVENTF_LEFTUP = &H4
  • Const MOUSEEVENTF_MIDDLEDOWN = &H20
  • Const MOUSEEVENTF_MIDDLEUP = &H40
  • Const MOUSEEVENTF_MOVE = &H1
  • Const MOUSEEVENTF_RIGHTDOWN = &H8
  • Const MOUSEEVENTF_RIGHTUP = &H10
  • Const MOUSEEVENTF_WHEEL = &H80
  • Const MOUSEEVENTF_XDOWN = &H100
  • Const MOUSEEVENTF_XUP = &H200
  • Const WHEEL_DELTA = 120
  • Const XBUTTON1 = &H1
  • Const XBUTTON2 = &H2
  • 'variables et constantes utilisateur
  • Private Pos As POINTAPI
  • Const LargeurMin = 3255
  • Const HauteurMin = 2880
  • Private Sub Form_Resize()
  • Dim Diff As Integer
  • With Me
  • ' si la form est minimisee, pas d'operation
  • If .WindowState = vbMinimized Then Exit Sub
  • ' si la largeur et la hauteur minimums sont
  • ' atteintes, termine le resize en simulant
  • ' le relachement du bouton gauche (c plus joli)
  • If .Width < LargeurMin And .Height < HauteurMin Then
  • Call mouse_event(MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
  • End If
  • 'obtient la position absolue de la sourie
  • GetCursorPos Pos
  • ' si la largeur minimum est atteinte, on
  • ' repositionement la sourie au niveau de la
  • ' bourdure de la form grace a l'API
  • If .Width < LargeurMin Then
  • SetCursorPos Pos.x + (LargeurMin - .Width) / 15, Pos.y
  • .Width = LargeurMin
  • End If
  • ' de meme pour la hauteur de la form
  • If .Height < HauteurMin Then
  • SetCursorPos Pos.x, Pos.y + (HauteurMin - .Height) / 15
  • .Height = HauteurMin
  • End If
  • End With
  • End Sub
'##########################################################
' par LuTo
' mail: ltousch@yahoo.com
' site: http://ltousch.freeservers.com ' rien a voir avec la prog, mais bon
' merci a Jeromax et Fabiin pour leurs codes sur les manipulations de sourie
'##########################################################

'Declare les API
Private 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)
Private Declare Function SetCursorPos& Lib "user32" (ByVal x As Long, ByVal y As Long)
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
'Declare le type utilise pour GetCursorPos
Private Type POINTAPI
        x As Long
        y As Long
End Type
'Declare les constantes a utiliser avec mouse_event. ici, on s'en sert que de 2 mais bon
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Const MOUSEEVENTF_WHEEL = &H80
Const MOUSEEVENTF_XDOWN = &H100
Const MOUSEEVENTF_XUP = &H200
Const WHEEL_DELTA = 120
Const XBUTTON1 = &H1
Const XBUTTON2 = &H2

'variables et constantes utilisateur
Private Pos As POINTAPI
Const LargeurMin = 3255
Const HauteurMin = 2880

Private Sub Form_Resize()
  Dim Diff As Integer
  
  With Me
    ' si la form est minimisee, pas d'operation
    If .WindowState = vbMinimized Then Exit Sub
    
    ' si la largeur et la hauteur minimums sont
    ' atteintes, termine le resize en simulant
    ' le relachement du bouton gauche (c plus joli)
    If .Width < LargeurMin And .Height < HauteurMin Then
      Call mouse_event(MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    End If
    
    'obtient la position absolue de la sourie
    GetCursorPos Pos
    
    ' si la largeur minimum est atteinte, on
    ' repositionement la sourie au niveau de la
    ' bourdure de la form grace a l'API
    If .Width < LargeurMin Then
      SetCursorPos Pos.x + (LargeurMin - .Width) / 15, Pos.y
      .Width = LargeurMin
    End If
    
    ' de meme pour la hauteur de la form
    If .Height < HauteurMin Then
      SetCursorPos Pos.x, Pos.y + (HauteurMin - .Height) / 15
      .Height = HauteurMin
    End If
  End With
End Sub 

Conclusion

Bien sur, ce code n'a d'interet que si l'option "afficher le contenu de la fenetre pendant qu'on la deplace" est activee dans Windoz.
Merci a Jeromix et Fabiin pour leurs codes sur les manipulations de sourie
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de elion le 21/08/2002 09:39:43

cool

signaler à un administrateur
Commentaire de jockos le 05/02/2003 12:49:19

Super cool même...

signaler à un administrateur
Commentaire de jack le 08/04/2003 19:47:03 administrateur CS

Nota :
Cette méthode ne fonctionne que si vous redimensionnez vos feuilles en les tirant par les bords droit (pour la largeur) et bas (pour la hauteur).
Si vous utilisez les bords gauche ou du haut, votre forme fait un bond !

vala

signaler à un administrateur
Commentaire de jockos le 09/04/2003 03:06:27

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é...

signaler à un administrateur
Commentaire de ramg le 16/04/2004 17:29:30

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.

signaler à un administrateur
Commentaire de BadNews le 06/06/2004 09:17:21

Cool, merci!

Pour enlever complètement les clignotements, remplacez:


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


par:

    If .Width &lt; LargeurMin Or .Height &lt; 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.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Modifier une form MDI depuis la form mère [ par JCLK ] Ce message s'adresse plus particulièrement au grandissime Amonbofis, mais les réponses de tout le monde sont les bienvenues.Dans un éditeur de texte, Urg : comment charger un formulaire qd on a son nom sous form de "string" [ par Webmineur ] qq sait comment je peux charger (load ou show) un formulaire dont j'ai juste le nom sous form de string.je pense qu'il faudrait pouvoir créer un objet Progressbar Prise de tête!!!! [ par sebinator ] Bonjour, Y aurait-il une bonne âme pour m'expliquer ?Sur le formulaire de démarrage de mon appli j'ai collé un progressbar, je sais le faire avancer a Ouvrir une feuille excel dans une form [ par ManBMai ] Bjr !je voudrai simplement ouvrir une feuille excel dans une textbox d'une form...je n'y arrive pointppouvez vous me donner un tuyau ! merci Récupérer un formulaire Access pour le mettre en Form VB [ par Derrick soft ] Bonjour,Petite question, j'ai une applis Access avec un peu près 1 000 formulaires, un peu près 100 champs par form, sans compter le code des formulai form1_resize() [ par rodo22 ] Bonjour,Comment peut-on avec la commande form_resize() faire en sorte que les contrôles qui se trouvent sur la feuille soient redimensionnés en même t Afficher une feuille excel dans un form [ par malu ] J'aimerais afficher une feuille excel dans un form afin de la modifier si necessaire et de l'imprimer.Quelqu'un peut-il m'aider?Merci! aspect visuel d'une feuille [ par lezabour ] Voila j'aimerai que ma form ne soit plus carré, mais qu'elle puisse etre ronde, ovale ou d'une forme que j'ai decider...il n'y a pas moyen de redessin Comment faire un filtre sur un sous formulaire Access via VB ??? [ par nitocris ] Je pense que le sujet explique bien le problème mais je vais détaillé.Je veux créer mon propre module de recherche sur ma base access. J'ai un formula access 2000/VBA : passer le focus d'1 form vers 1 sous-form puis du SF vers le F [ par marc el bichon ] Access2000/VBA:mon problème est le suivant :je dois, en cliquant sur un contrôle de formulaire principal, passer le focus à un sous-formulaire pour y


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.