none
Redimmensionner une fenêtre sans bordure avec la souris et sans faire apparaitre le rectangle de limite RRS feed

  • Question

  • bonjour, sous Visual Basic 2008 Express OS :xp

    je souhaite pouvoir redimensionner une fenêtre qui s' affiche sans bordure avec la sourri
    j' utilise une image bitmap en background sur mon formulaire pour afficher une Form non rectangulaire
    le code si dessous permet de faire ca mais il fonctionne qu au débugage, en plus ma fenêtre n' est plus découpé selon
    le bitmap et le rectangle de limite du Form apparait

    l' executable lui plante a l' affichage de la fenêtre et si je fait continuer la fenêtre s'affiche malgré tout et le redimensionement fonctionne
    le message d' erreur
    System.ComponentModel.Win32Exception: Paramètre incorrect
       à System.Windows.Forms.Form.UpdateLayered()
       à System.Windows.Forms.Form.OnHandleCreated(EventArgs e)
       à System.Windows.Forms.Control.WmCreate(Message& m)
       à System.Windows.Forms.Control.WndProc(Message& m)
       à System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       à System.Windows.Forms.ContainerControl.WndProc(Message& m)
       à System.Windows.Forms.Form.WmCreate(Message& m)
       à System.Windows.Forms.Form.WndProc(Message& m)
       à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    le code: le code qui redimensionne le Form

    Public Class Fmessage2
        Private mouseOffset As Point
        Private isMouseDown As Boolean = False
    
    
        Private Const WS_EX_STATICEDGE As Integer = &H20000
        Private Const WS_SIZEBOX As Integer = &H40000
        Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
            Get
                Dim CP As CreateParams = MyBase.CreateParams
                CP.ExStyle = WS_EX_STATICEDGE
                CP.Style = WS_SIZEBOX
                Return CP
            End Get
        End Property
    
    



    est-ce possible de résoudre ces deux bugs? sûrrement :)-
    merci d' avance

    mardi 5 mai 2009 22:43

Réponses

  • Yesssss ,bon en fait c tout simplement que lorsque mon container est en position dock il cache sûrrement la bordure du coup ca fonctionne pas ,  jv faire un Hanchor Top, Bottom, Left, Right, pour le diminuer légèrement, ya que ca qui fonctionne
    ca décroche quand même assez souvent l' aplication a du mal a repeindre la fenêtre, je pense que je v intégrer du code dans celui la pour ajouter une mini zone genre taqué pour éviter le décrochage du curseur,et jv codé les quatre bords du form
     coool et merci beaucoup j ai d autre blème a résoudre jferais des nouveau treads merci TroXsA
    • Marqué comme réponse Dragonix mercredi 6 mai 2009 19:58
    • Modifié Dragonix mercredi 6 mai 2009 20:25
    mercredi 6 mai 2009 19:58

Toutes les réponses

  • Bonjour,

    Juste pour vous signaler que c'est une question par thread (ticket), mais bon c'est pas très grave :)
    Donc pour répondre a la question qui devrais être comment faire pour redimensionner une form avec une propriété "FomBorderStyle" a "None" avec la souris ?

    Oui c'est possible, mais pour ça il faut jouer avec l'événement appropriés, c'est a dire : MouseMove et de récupérer l'angle en bas a droite
    (sur une image c'est plus dur)
        Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
            '
            'Definir le champs du resize
            '
            If e.Location.X > (Me.Size.Width - 10) And e.Location.Y > (Me.Size.Height - 10) Then
                '
                ' changement du cursor (souris)
                '
                Cursor = Cursors.SizeNWSE
    
                '
                ' Si je clic sur le bouton gauche
                '
                If e.Button = Windows.Forms.MouseButtons.Left Then
                    '
                    ' redimentionnement de la forme
                    '
                    Me.ClientSize = New System.Drawing.Size(e.Location.X, e.Location.Y)
                End If
            Else
                '
                'Si non le cursor redeviens normal
                '
                Cursor = Cursors.Default
            End If
    
        End Sub


    Voila qui devrais faire votre bonheurs









    Cordialement, Troxsa
    • Proposé comme réponse TroxsaEditor mercredi 6 mai 2009 18:18
    mercredi 6 mai 2009 12:10
    Auteur de réponse
  • Bonjour et merci beaucoup pour ces réponses

    jviens d' essayer mais rien ne se passe, le curseur ne change pas bon la jv manger et je potasse ca et je vous tiens au courant
    heu juste si vous voulez vraiment voir c quoi mon application c mon lien web un ptit chat logiciel voilou  
    mercredi 6 mai 2009 18:14
  • Bonsoir,

    Faites le test avec un nouveau projet
    ne pas oublier que l'événement est "Me .MouseMove"
    et qu'il faut bien mettre le code dedans sinon ça fonctionnera pas

    .

    Cordialement, Troxsa
    mercredi 6 mai 2009 18:18
    Auteur de réponse
  • Bon la jpige plus rien, j ai déja un problème avec la déclaration d' évenement pour ne pas copier coller bêtement le code j ai donc double cliqué sur la propriété mouse_move pour créer un évènement dans le code et ajouté un point d' arrêt sur la sub pour voir si au moment au la souri se trouve sur le composant déclenche la Sub et la rien le point d' arrêt n' est pas atteint pour m' assurer que ce n' est pas la transparence du bitmap du Form je l' ai viré, sachant que mon control personalisé qui se trouve dans la Form est lui transparent la je pige pas !!
    mercredi 6 mai 2009 19:28
  • ben en fait j ai recrée un évenement qui lui est MyBase  j ai essayé avec Me pareil
    mercredi 6 mai 2009 19:29
  • heu Bonsoir oui et merci pour les réponses, jv essayer sur un projet vierge,bonne idée
    mercredi 6 mai 2009 19:30
  • Bon avec nouveau projet ca fonctionne cooooooool reste plus qu a trouver le bug j v recrer un Form vierge
    mercredi 6 mai 2009 19:38
  • Il faut simplement faire attention a l'événement qui est :
    Private
     Sub
     Form1_MouseMove(ByVal
     sender As
     Object
    , ByVal
     e As
     System.Windows.Forms.MouseEventArgs) Handles
     Me
    .MouseMove
    

    Une fois que vous vous trouver dans le code vous devriez avoir deux menu déroulant juste au dessus avec tout les événements et il faudra sélectionner MouseMove de la form1



    Cordialement, Troxsa
    mercredi 6 mai 2009 19:47
    Auteur de réponse
  • Yesssss ,bon en fait c tout simplement que lorsque mon container est en position dock il cache sûrrement la bordure du coup ca fonctionne pas ,  jv faire un Hanchor Top, Bottom, Left, Right, pour le diminuer légèrement, ya que ca qui fonctionne
    ca décroche quand même assez souvent l' aplication a du mal a repeindre la fenêtre, je pense que je v intégrer du code dans celui la pour ajouter une mini zone genre taqué pour éviter le décrochage du curseur,et jv codé les quatre bords du form
     coool et merci beaucoup j ai d autre blème a résoudre jferais des nouveau treads merci TroXsA
    • Marqué comme réponse Dragonix mercredi 6 mai 2009 19:58
    • Modifié Dragonix mercredi 6 mai 2009 20:25
    mercredi 6 mai 2009 19:58