Rendre mobile une form "none" et placement de départ : centre haut

dimic13 Messages postés 4 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 28 juin 2009 - 28 juin 2009 à 12:00
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 28 juin 2009 à 15:17
Bonjour,

Je voudrais rendre ma form mobile, c'est à dire pouvoir la déplacer lorsqu'on clique sur un espace vide de la form et que l'on déplace la souris. Biensur, la formborderstyle est 0 (none).

Ensuite, j'ai aussi besoin d'aide pour que ma fenêtre s'ouvre automatiquement en haut de l'écran, au centre.

Merci à vous !
A voir également:

8 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 juin 2009 à 12:07
re,

pour la position, à toi de jouer dans le _load avec les propriétés top et left en fonction de la taille de la form (.width et .height) et de l'écran

écran :



<hr />
'    RÉSOLUTION DE L'ÉCRAN
'    http://www.codyx.org/snippet_resolution-ecran_31.aspx#106
'    Posté par [ 53675 sebmafate ] le 24/03/2006
<hr />




Public




Function
GetScreenSize()

As
Size




Return

Screen.PrimaryScreen.Bounds
End

Function












et pour le déplacement :



<hr />
'     DÉPLACER UNE FORME SANS BARRE DE TITRE
'    http://www.codyx.org/snippet_deplacer-forme-sans-barre-titre_23.aspx#71
'    Posté par [ =399445 Pym Corp ] le 22/03/2006
<hr />



Private Declare Function
ReleaseCapture Lib"user32" () As Integer
Private Const HTCAPTION As
Integer = 2
Private Const WM_NCLBUTTONDOWN
As Integer = &HA1S
Private
Declare Function SendMessage Lib"user32"Alias"SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByRef lParam As Integer) As Integer
Private Sub Form_MouseDown(ByVal
sender As Object, ByVal e
As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    If
e.Button = Windows.Forms.MouseButtons.Left Then
        ReleaseCapture()
       
SendMessage(Me.Handle.ToInt32, WM_NCLBUTTONDOWN,
HTCAPTION, 0)
    End If
End Sub








toutes les réponses sur WWW.CODYX.ORG
prochain réflexe à prendre désormais


<hr size ="2" width="100%" />
0
dimic13 Messages postés 4 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 28 juin 2009
28 juin 2009 à 12:11
Salut, merci pour tes réponses.

Cependant je ne parviens pas à mettre la fenêtre en haut au centre de l'écran pour que cela le fasse sur n'importe quel résolution d'écran.

Sinon pour le déplacement ça marche nickel merci, j'essaierai de me débrouiller sur codyx.org, merci encore.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 juin 2009 à 12:27
faut faire quelques essais quand même hein !!





    Sub setPositionToTopCenter(ByRef frm As System.Windows.Forms.Form, Optional ByVal topMargin As Integer = 0)
        'largeur de de l'écran
        Dim screenWidth As Integer = Screen.PrimaryScreen.Bounds.Width

        'largeur de la form
        Dim formWidth As Integer = frm.Width

        'position top
        frm.Top = topMargin

        'position centrée
        frm.Left = (screenWidth / 2) - (formWidth / 2)
    End Sub

<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Coloration syntaxique vb/vba/vb.net









et tu appelles dans le _load, par exemple
setPositionToTopCenter(Me, 10)
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
28 juin 2009 à 13:35
Bonjour à tous ;O)

Il y a plus simple en .Net sans passer par l'appel aux API



Private
 _Pos As New Point


'




Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
  


'


  _Pos.X = e.X
  _Pos.Y = e.Y
  
'




End Sub





'






Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
  


'


  If e.Button = Windows.Forms.MouseButtons.Left Then
    
'


    Dim Loc As New Point
    
'


    Loc.X = Me.Left + e.X - _Pos.X
    Loc.Y = Me.Top + e.Y - _Pos.Y
    
'


    Me.Location = Loc
    
'


  End If
  
'




End Sub



<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->



Coloration syntaxique vb/vba/vb.net
 

@+ Mayzz





                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
28 juin 2009 à 13:42
Ah oui, et pour ce qui est du centre de l'écran, met la propriété StartPosition sur CenterScreen si ton formulaire est celui de démarrage du programme, sinon sur CenterParent si celle-ci est ouverte via un autre formulaire :

N'oublis pas de préciser le formulaire parent (owner) si tu ouvre ton formulaire en mode non Modal

From1.Show (Me)

Pas la peine si tu ouvre en mode modal, le formulaire appelant est automatiquement le parent.

From1.ShowDialog

++

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 juin 2009 à 13:52
salut Mayzz,

déplacement -> les 2 manières s'équivalent, rien de plus simple ou de plus compliqué. ici on simule le réel déplacement depuis la barre de titre, c'est plus logique (d'après moi).
on peut aussi jouer directement avec les autres messages windows (voir l'autre snippet au même lien)

position -> la question est de centrer uniquement sur X, pas sur Y (d'où le paramètre optionnel).
donc pas configurable depuis les propriétés

++

<hr size="2" width="100%" />
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
28 juin 2009 à 14:03
Effectivement, je me suis un peu mal exprimé, plus simple, voulais dire sans API étant donnée qu'en .Net on fait de moins en moins appel aux API mais c'est pas forcément le cas.

Pour ce qui est du centrage, désolé, j'ai mal lu l'énoncé... Autant pour moi :)

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 juin 2009 à 15:17
le problème est-il résolu?
(ne pas oublier de valider la ou les bonnes réponses)
++
0
Rejoignez-nous