Deplacer 2 form ensemble / deplacer picture1 de form1 a form2

Signaler
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007
-
ORTIPIC
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007
-
Salut a tous

si quelqu un peut me dire sous vb6

comment :

deplace t on deux ( form1 et form2 ) en meme temps

et comment :

deplacer un object picture1 sur form1 vers la form2

merci j ai pourtant cherché mais .................

8 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
21
mouvement de la Form1 entraine mouvement de la Form2
faudrait faire la même chose pour la Form2, je sais pas si c'est possible.
pour mettre le Picture1 dans la Form2 faut utiliser SetParent

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

dans la Form1

Private Sub Form_Load()
'Remplace la procédure de fenêtre par défaut par notre propre procédure
oldWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Private Sub Form_Unload(Cancel As Integer)
'Remet la procédure de fenêtre par défaut
SetWindowLong hwnd, GWL_WNDPROC, oldWndProc
End Sub





dans un module
Public Const GWL_WNDPROC = (-4)
Private Const WM_MOVE = &H3
Public oldWndProc As Long

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, _
ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Function WindowProc(ByVal hwnd As Long, ByVal msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long

If msg = WM_MOVE Then
'la form1 a été déplacée
Form1.Cls
Form1.Print "Nouvelle position : " & Form1.Left & ", " & Form1.Top
Form2.Move Form1.left + Form1.Width, Form1.Top
End If

'Appelle la procédure de fenêtre par défaut pour que Windows puisse traiter l'évènement
WindowProc = CallWindowProc(oldWndProc, hwnd, msg, wParam, lParam)

End Function





Daniel
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
87
Juste une petite précision sur le code de Daniel : cela s'appelle un
Hook, c'est-à-dire qu'on utilise une fonction WindowProc personnelle
avant d'exécuter celle de windows par défaut.



VB n'aime pas du tout ce genre de manipulation et ca le rend instable
si on quitte le prog par le bouton Stop de l'IDE, donc à utiliser avec
modération : bien rétablir la fonction WindowProc par défaut à la
fermeture du prog, et ne pas quitter le prog par un "Stop" ou un appel
à End si tu ne veux pas relancer VB à chaque éxécution !



N.B. : Ca marche parfaitement en mode compilé cependant.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007

merci .... Gobillot
merci ... Darsidious

je vais tester cette methode merci
......... j avais utilisé l api SetTimer et KillTimer pour autre chose , mais le probleme de plantage de ID VB est bien lourd ,certainement comme le hook de Gobillot
-----------------------------------

il reste la question du deplacement d objet ...... j attend une bonne idee

DUR DUR D ETRE UN VB merci merci
Messages postés
30
Date d'inscription
vendredi 17 décembre 2004
Statut
Membre
Dernière intervention
2 mai 2007

slt
j'cprend pas exactement ton message mais
pour deplacer un picture de la form1 ver la form2, suffit juste d'écrire peut être dans le form_load de la form2: (nom du picture sur la form2)=form1.(nompicture dela form 1
............bonne chance
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
21
comme je t'ai dis:

Form2.Show

SetParent Picture1.hwnd, Form2.hwnd


Daniel
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
21
passage en douceur de la PictureBox de la Form1 à la Form2 à travers tout l'écran.









Dim px As Long

Dim py As Long

Dim x1 As Long

Dim y1 As Long

Dim x2 As Long

Dim y2 As Long



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

Private Declare Function GetDesktopWindow Lib "user32" () As Long



Private Sub Form_Load()

Form2.Show

px = Picture1.Left

py = Picture1.Top

End Sub



Private Sub Command1_Click()

Dim R As Long



R = GetDesktopWindow

x1 = px + Form1.Left + 60

y1 = py + Form1.Top + 450

x2 = px + Form2.Left + 60

y2 = py + Form2.Top + 450

Picture1.Visible = False

SetParent Picture1.hwnd, R

Picture1.Move x1, y1

Picture1.Visible = True

Timer1.Interval = 10

Timer1.Enabled = True



End Sub



Private Sub Command2_Click()

' remise en position original

Picture1.Visible = False

SetParent Picture1.hwnd, Form1.hwnd

Picture1.Move px, py

Picture1.Visible = True

End Sub



Private Sub Timer1_Timer()

If x1 < x2 Then x1 = x1 + 15

If x1 > x2 Then x1 = x1 - 15

If y1 < y2 Then y1 = y1 + 15

If y1 > y2 Then y1 = y1 - 15

Picture1.Move x1, y1

If x1 x2 And y1 y2 Then

Timer1.Enabled = False

Picture1.Visible = False

SetParent Picture1.hwnd, Form2.hwnd

Picture1.Visible = True

Picture1.Move px, py

End If

End Sub




Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)


Unload Form2


End Sub



Daniel
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007

effectivement Daniel tu m as repondu pour la question 2:

Form2.Show
SetParent Picture1.hwnd, Form2.hwnd

j avais zapper

cool merci a tous
Messages postés
41
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
16 juillet 2007

terrible daniel

setparent evident pour moi maintent
et le passage sur le hwnd du bureau extra

parcontre le deplacement de 2 forms ensembles ca plante un peu trop a voir