[R] Drag Drop Image

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

[R] Drag Drop Image

#1

Message par TommyDDR »

Bonjour,

Je suis sur un projet de puzzle sous autoit.

J'ai une fenêtre avec des images "GUICtrlCreatePic()" sur la gauche et une grille sur la droite, j'aimerai pouvoir faire un Drag&Drop des images vers la grille.

Est ce possible ?
(Si oui, comment ? Un style à ajouter ou autre ?)

Merci
Modifié en dernier par TommyDDR le jeu. 27 août 2009 17:08, modifié 1 fois.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Drag Drop Image

#2

Message par Iste »

Oui c'est possible. Il suffit de crée une GUI sans rien d'autre que l'image qui suit le curseur.
Tien, regarde ce magnifique script :p
http://www.autoitscript.fr/forum/viewto ... f=6&t=2045
Plus précisément le "Case _IsPressed(1) = 1"
Signez ici
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Drag Drop Image

#3

Message par TommyDDR »

Désolé mais pour des raisons de sauvegarde je ne peux pas utilisé cette technique, il faut que cela se trouve dans la même fenêtre
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Drag Drop Image

#4

Message par Iste »

Ben, dans ce cas, suffit au lieux de créer une win et la déplacer, simplement supprimer l'image et la recréer (mais je reste persuadé que la solution proposée avant est meilleur, car moins lourde, et on évitera surement des clignotement. Par contre, ca demande plus de code bien sur.)
Je vais essayer de faire un exemple simple et j'edite

wala,

Code : Tout sélectionner

#Include <Misc.au3>
#include <WindowsConstants.au3>


$gui = GUICreate("",500,500)
Global $pic[4]
For $i = 0 To 3
    $pic[$i] = GUICtrlCreatePic("pic"&$i&".JPG",Random(0,500-241),Random(0,500-181),241,181)
Next
GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = -3
            Exit
        Case _IsPressed(1) = 1
            $cursor = GUIGetCursorInfo($gui)
            If WinActive($gui) And $cursor[4] - 2 > 0 Then
                $sousgui = GUICreate("",241,181,MouseGetPos(0)-120,MouseGetPos(1)-90,$WS_POPUPWINDOW, $WS_EX_TOOLWINDOW+$WS_EX_TOPMOST  )
                GUICtrlCreatePic("pic"&$cursor[4] - 3&".JPG",0,0,241,181)
                GUISetState()
                GUICtrlDelete($cursor[4])
                While 1
                    Sleep(10)
                    WinMove($sousgui, "", MouseGetPos(0)-120,MouseGetPos(1)-90)
                    If Not _IsPressed(1) Then ExitLoop
                WEnd
                GUIDelete($sousgui)
                GUISwitch ($gui)
                $cursor2 = GUIGetCursorInfo($gui)
                $pic[$cursor[4] - 3] = GUICtrlCreatePic("pic"&$cursor[4] - 3&".JPG",$cursor2[0]-120,$cursor2[1]-90,241,181)
            EndIf
    EndSelect
WEnd
Et les images
pic.rar
(30.52 Kio) Téléchargé 76 fois
Signez ici
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Drag Drop Image

#5

Message par SagePourpre »

ou encore...
► Afficher le texte


En gros, j'ai utilisé

Opt("GuiOnEventMode",1)
Opt("MouseCoordMode",2)


ensuite il est important de rajouter $SS_NOTIFY comme style pour la pic

On crée un événement
GuiCtrlSetOnEvent($picc,"move")


et dans la fonction "move" on retrouve

Code : Tout sélectionner

while _IsPressed(01)
     $pos = MouseGetPos()
     ToolTip($pos[0] & " / " & $pos[1],0,0)
     GUICtrlSetPos(@GUI_CtrlId,$pos[0] - $picW/2 ,$pos[1] - $pich/2,-1,-1)
     Sleep(100)

     WEnd
Le $picW et $picH de cet exemple sont la largeur et hauteur de l'image (pour que l'image soit déplacée selon son centre) .

Pour voir l'exemple complet, utilise le script dans les spoilers et remplace le chemin de $pic pour une image valide dans ton disque dur.


Ensuite, il devrait être relativement facile de faire un "aimant" (Si la personne lâche le morceaux dans la grille mais qu'il n'est pas parfaitement
positionné, le morceau se positionne de lui-même)


Voilà !
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Drag Drop Image

#6

Message par TommyDDR »

Merci Iste pour ta réponse mais celle de SagePourpre est celle qu'il me fallait

Un grand merci a SagePourpre

Résolu.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Drag Drop Image

#7

Message par SagePourpre »

héhé... pas de quoi !

► Afficher le texte
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2116
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Drag Drop Image

#8

Message par TommyDDR »

Rectification, j'ai un petit problème ^^'

Quand je veux déplacer une piece de la liste (qui se trouve dans une GUI Fille a la Gui de la grille), celle ci va en dessou de la GUI Mère.
Pour ceux qui connaissent, avec un pote nous essayons de faire Eternity 2 sur PC. (Et il est interdit de dévoilé les formes/couleur des pièces ^^' d'où le rouge)
Voici une impr :
Eternity2.jpg
Eternity2.jpg
Comme on peut le voir, la pièce déplacée se glisse sous la GUI mère.

Pour l'instant je cliquai sur la pièce dans la liste puis cliquai sur la grille pour poser la pièce.

Voila.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Drag Drop Image

#9

Message par SagePourpre »

Mouaip ... Il y'a moyen de faire ça ...

En gros, il faut que tu effaces le control (GuiCtrlDelete),
que tu mettes le focus sur l'autre gui (GuiSetState($GUI_FOCUS,$NOM_DE_LA_GUI)
et puis que tu recrée le contrôle aux nouvelles coordonnées, sans oublier
de le remettre en $SS_NOTIFY et de remettre le GuiCtrlSetOnEvent


Si tu ne fais pas ça, GuiCtrlSetPos va mettre le contrôle aux coordonnées désirées mais, comme
tu l'as déjà expérimenté, il ne change pas de GUI automatiquement. Il reste toujours sur la gui ou il a
été crée.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Drag Drop Image

#10

Message par Iste »

Tien donc, comme c'est étrange
► Afficher le texte
Enfin, 1 partout plutot, car vu le grand nombre de contrôle que tu as, le mode événementiel est un passage obligé.
Mais le coté [suppression d'image]->[création de GUI flotante] / [suppression de GUI flotante]->[création d'image] est vraiment le plus simple.
Surtout que avec un quadrillage, 'il suffit' de savoir au dessus de quel case se trouve ton curseur au moment du déclic pour savoir ou créer la nouvelle image
Signez ici
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Drag Drop Image

#11

Message par SagePourpre »

Bon bon ok... j'avoue que mon idée était idéale avant que je sache qu'il y'avait deux gui d'impliquées.

Mais pour ma défense, euh... le cri du petit canard chinois, en période de rut, émet le son suivant ...
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Drag Drop Image

#12

Message par SagePourpre »

Ceci fonctionne bien...

► Afficher le texte
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Répondre