Resize de form sans bordure propre

5/5 (7 avis)

Vue 5 616 fois - Téléchargée 640 fois

Description

Je n'avais jamais vu de codes propres pour les redim de forms et puis après quelques recherches, G trouvé ca. Ca devrait aider quelque uns...

J'ai meme mis les curseurs. Vous pouvez modif qq constantes...

Je mets le code ici pour les users de la compil (et les otres [:)] )

Source / Exemple :


'>> feuille

Private Sub Form_Load()
'>> Juste pour faire bô
Me.Print "Test Form" & vbNewLine & vbNewLine & "Try to resize/move the window"
Me.Line (0, 20)-(Screen.Width, 20)
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'>> Transmet les informations vers le module
FormMouseDown Me, Button, X, Y
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
FormMouseMove Me, X, Y
End Sub

'> module

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "user32" ()

Private Const WM_NCLBUTTONDOWN = &HA1

Private Const HTCAPTION = 2
Private Const HTLEFT = 10
Private Const HTRIGHT = 11
Private Const HTTOP = 12
Private Const HTTOPLEFT = 13
Private Const HTTOPRIGHT = 14
Private Const HTBOTTOM = 15
Private Const HTBOTTOMLEFT = 16
Private Const HTBOTTOMRIGHT = 17

Const BorderWidth = 5   '>> C'est la distance 'sensible' par rapport au bord
                        '>> là, G mit 5, à vous de le modif si ca vous chante
Const MoveLeft = 5
Const MoveRight = 5     '>> Marge de la zone de mouvement
Const MoveTop = 5       '>> Modèle pour feuille standard
Const MoveHeight = 15

Public Sub FormMouseDown(MForm As Form, Button As Integer, X As Single, Y As Single)

If Button = 1 Then
    '>> Pour le redimensionnement
    Dim VerifAr(3)
    VerifAr(0) = X < BorderWidth
    VerifAr(1) = Y < BorderWidth
    VerifAr(2) = X > MForm.ScaleWidth - BorderWidth
    VerifAr(3) = Y > MForm.ScaleHeight - BorderWidth
    
    Dim MsgToSend
    If VerifAr(0) And Not (VerifAr(1) Or VerifAr(3)) Then MsgToSend = HTLEFT
    If VerifAr(1) And Not (VerifAr(0) Or VerifAr(2)) Then MsgToSend = HTTOP
    If VerifAr(2) And Not (VerifAr(1) Or VerifAr(3)) Then MsgToSend = HTRIGHT
    If VerifAr(3) And Not (VerifAr(0) Or VerifAr(2)) Then MsgToSend = HTBOTTOM
    If VerifAr(0) And VerifAr(1) Then MsgToSend = HTTOPLEFT
    If VerifAr(0) And VerifAr(3) Then MsgToSend = HTBOTTOMLEFT
    If VerifAr(2) And VerifAr(1) Then MsgToSend = HTTOPRIGHT
    If VerifAr(2) And VerifAr(3) Then MsgToSend = HTBOTTOMRIGHT
    
    Call ReleaseCapture
    SendMessage MForm.hwnd, WM_NCLBUTTONDOWN, MsgToSend, 0&
    
    '>> Pour le mouvement
    VerifAr(0) = X > MoveLeft
    VerifAr(1) = Y > MoveTop
    VerifAr(2) = X < MForm.ScaleWidth - MoveRight
    VerifAr(3) = Y < MoveHeight
    
    If VerifAr(0) And VerifAr(1) And VerifAr(2) And VerifAr(3) Then
        Call ReleaseCapture
        SendMessage MForm.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
    End If
End If

End Sub

Public Sub FormMouseMove(MForm As Form, X As Single, Y As Single)

'>> Les zolis curseurs
Dim NoWhere As Boolean
'>> Pour le redimensionnement
Dim VerifAr(7)
VerifAr(0) = X < BorderWidth
VerifAr(1) = Y < BorderWidth
VerifAr(2) = X > MForm.ScaleWidth - BorderWidth
VerifAr(3) = Y > MForm.ScaleHeight - BorderWidth

If (VerifAr(0) Or VerifAr(2)) And Not (VerifAr(1) Or VerifAr(3)) Then MForm.MousePointer = 9: NoWhere = True
If (VerifAr(1) Or VerifAr(3)) And Not (VerifAr(0) Or VerifAr(2)) Then MForm.MousePointer = 7: NoWhere = True
If (VerifAr(0) And VerifAr(1)) Or (VerifAr(2) And VerifAr(3)) Then MForm.MousePointer = 8: NoWhere = True
If (VerifAr(0) And VerifAr(3)) Or (VerifAr(2) And VerifAr(1)) Then MForm.MousePointer = 6: NoWhere = True

'>> Pour le mouvement
VerifAr(4) = X > MoveLeft
VerifAr(5) = Y > MoveTop
VerifAr(6) = X < MForm.ScaleWidth - MoveRight
VerifAr(7) = Y < MoveHeight

If VerifAr(4) And VerifAr(5) And VerifAr(6) And VerifAr(7) Then MForm.MousePointer = 15: NoWhere = True

'>> Bah... rien
If Not (NoWhere) And MForm.MousePointer <> 0 Then MForm.MousePointer = 0

End Sub

Conclusion :


je vais essayer de mettre un zip, mais, déjà que j'ai du mal a poster cette maudite source !

PS: remarker la répartition aléatoire des constantes comme HTTOPLEFT, impossible d'appliquer des masques binaires : rien, voyez le bordel...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 2
27 juin 2006 à 12:48
exactement ce que je cherchais!!!
10
Alan71 Messages postés 530 Date d'inscription lundi 3 juin 2002 Statut Membre Dernière intervention 13 juin 2004
20 mars 2003 à 18:59
ok ok, alors, on peu bouger le feuille avec mon control, hein Renfield :), la feuille, C une feuille de test a la con, G pété ca pour un exemple.

alors, pour les newbies, ils ne savent pour la majorité ce qu'est une api, cependant, je répond a toutes vos kestion sur la messagerie VBFrance..
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 1
20 mars 2003 à 18:07
Sa c'est sur,sa va etre mieux
C'est tres utile ta source,mais tu devrais expliker plus comment sa fonctionne...pour les newbie :)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
19 mars 2003 à 22:16
autre chose , dans le code de ta fenter , ajoute quand meme 2 trucs !!!

me.autoredraw = true
me.borderstyle = 0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
19 mars 2003 à 22:15
ah !!! , j'ai compris !! ca sert a redimensionner la fenetre (zone sensible sous le caption.....)

tu t'amuses dis donc !!

NOTA: si vous utilisez la constant HT_CAPTION (lors du sendmessage) , la fenetre se deplace........
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.