Deplacement controle d'une form à l'autre dans MDI [Résolu]

Signaler
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Bonjour

Je viens de creer une form MDI dans laquelle j'ai 2 form filles.
J'ai rajouté une fonction de drag and drop pour pouvoir déplacer mon textbox  apres le lancement du programme.
ça marche bien mais je n'arrive pas à faire passer le controle sur l'autre form , elle s'arrette à la bordure de celle ou elle a été créé.

Est ce quelqu'un connait un moyen de passer de l'autre coté.

Voici le code

http://erdsjb.free.fr/EssaiMdi.zip

Je vous remercie de votre aide
Bonne journée

3 réponses

Messages postés
12
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
25 novembre 2007

Bonjour,
c'est un peu bizarre comme idée mais comme quoi rien n'est impossible tu trouveras ds le fichier une maniere de realiser ce que tu veux (utilisation d'api windows). De façon théorique, ton pb se pose comme: comment changer le parent d'un controle?
Dans un module de code:
'Recup de http://vbcity.com/forums/faq.asp?fid=9&cat=Common+Controls

Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Public Declare Function GetFocus Lib "user32" () As Long

Public hWndText As Long

Public bForm1 As Long

Public Sub Main()

    Form1.Show

    Form1.Text1.SetFocus

    hWndText = GetFocus() ' handle de la text box

    bForm1 = True 'le textbox est sur la form 1

End Sub

Public Sub MouseMove(ByRef aCtrl As Control, Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim g As Long

If Button = 1 Then

    If bForm1 Then

        'est-ce que le controle est au bord gauche de form1

        If aCtrl.Left + (X - CurX) > 0 And aCtrl.Top + (Y - CurY) > 0 Then

            aCtrl.Move aCtrl.Left + (X - CurX), aCtrl.Top + (Y - CurY)

            If Int(aCtrl.Left + (X - CurX) - aCtrl.Top + (Y - CurY)) > 1000 Then DeplacementBouton = True

        Else

            Form2.SetFocus

            g = SetParent(hWndText, Form2.hWnd)

            aCtrl.Left = 0

            bForm1 = Not bForm1

        End If

    Else

        'est-ce que le controle est au bord droit de form2

        If aCtrl.Left + (X - CurX) < Form2.Width And aCtrl.Top + (Y - CurY) > 0 Then

            aCtrl.Move aCtrl.Left + (X - CurX), aCtrl.Top + (Y - CurY)

            If Int(aCtrl.Left + (X - CurX) - aCtrl.Top + (Y - CurY)) > 1000 Then DeplacementBouton = True

        Else

            Form1.SetFocus

            g = SetParent(hWndText, Form1.hWnd)

            aCtrl.Left = 0

            bForm1 = Not bForm1

        End If

    End If

End If

End Sub

Modifie les proprietes du projet pour qu'il demarre sur Main()

Ds ta form1
Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

'Surcharge de la méthode dsle main

'a voir si necessaire

MouseMove Text1, Button, Shift, X, Y

End Sub
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
En fait j'ai meme pas besoin qu'il soit recréé sur la form2 , mais juste qu'on le vois sur la form2 tant qu'on tiens le bouton de souris appuyé.Alors que pour l'instant il disparait.
Juste qu'il depasse les limites de la form1 ou il a été créé

Encore merci
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Dix mille merci à toi DSAUNIER


Ton code marche impecable


Je te souhaite une excelente soirée