Page 1 sur 1

[R] Drag and drop limites

Posté : dim. 03 févr. 2008 14:58
par micbar
Bonjour à tous,
Avec les déclaratives ci dessous le Drag and drop est géré automatiquement :

Code : Tout sélectionner

GUICreate("",700, 132, 250, 207, -1,$WS_EX_ACCEPTFILES)
$file = GUICtrlCreateInput("", 40, 8, 225, 21)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
 
Malheureusement la chaine ainsi renvoyée dans $file est limitée à 30000 caractères, ce qui peut être trop juste, compte tenu du fait, aussi, que le chemin complet est répété pour chaque nom de fichier.
Ma question est la suivante :
existe-t-il un autre moyen pour gérer le "drag and drop" ?
Merci par avance.

Re: [..] Drag and drop limites

Posté : dim. 03 févr. 2008 15:28
par Tlem
Je ne sais pas si ça peut aider, mais j'avais trouvé une fonction particulière concernant le Drag & Drop.
Cette fonction permet de créer un tableau avec les éléments du Drag & Drop ...

Voici la partie essentielle du code adapter plus ou moins à votre script :

Code : Tout sélectionner

#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <Array.au3>

Global $WM_DROPFILES = 0x233
Global $gaDropFiles[1]

GUICreate("",700, 132, 250, 207, -1,$WS_EX_ACCEPTFILES)
$file = GUICtrlCreateInput("", 40, 8, 225, 21)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)

GUISetState()

; Pour le Drag and Drop.
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        
        Case $GUI_EVENT_DROPPED
            _Arraydisplay($gaDropFiles,"xxx")
            
        ; Fermeture par la croix.
        Case $GUI_EVENT_CLOSE
            Exit
            
    EndSwitch
WEnd


; Fonction pour la gestion du Drag And Drop.
Func WM_DROPFILES_FUNC($hwnd, $msgID, $wParam, $lParam)
    Local $nSize, $pFileName
    Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
    For $i = 0 To $nAmt[0] - 1
        $nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
        $nSize = $nSize[0] + 1
        $pFileName = DllStructCreate("char[" & $nSize & "]")
        DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
        ReDim $gaDropFiles[$i + 1]
        $gaDropFiles[$i] = DllStructGetData($pFileName, 1)
        ;If StringInStr(FileGetAttrib($gaDropFiles[$i]), "D") Then $gaDropFiles[$i] = $gaDropFiles[$i] & "\*.*"
        $pFileName = 0
    Next
EndFunc   ;==>WM_DROPFILES_FUNC

Re: [R] Drag and drop limites

Posté : dim. 03 févr. 2008 16:32
par micbar
OK merci Tlem
Cela marche bien et sans limitation.
Bonne journée

Re: [R] Drag and drop limites

Posté : dim. 23 janv. 2011 23:37
par papus2
bonjour,
le script de Tlem ne marche pas chez moi, j'ai rajouté #include <WindowsConstants.au3> et là super :) , c'est pas grand chose mais si ça peut éviter à quelqu'un de chercher...
en tout cas c'est un script que je vais réutiliser...

Re: [R] Drag and drop limites

Posté : lun. 24 janv. 2011 00:20
par Tlem
Ligne rajoutée dans le code. En 2008 il n'y en avait probablement pas besoin. :lol:

Merci.