[R]drag and drop multi listviews

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
serpafi
Niveau 3
Niveau 3
Messages : 40
Enregistré le : ven. 25 oct. 2019 21:19
Status : Hors ligne

[R]drag and drop multi listviews

#1

Message par serpafi »

Bonjours a tous,

Pour les listviews elles ont chacune:
GUICtrlSetState($ListView1, $GUI_DROPACCEPTED + $ES_AUTOVSCROLL + $ES_READONLY)
Voici le code pour récupérer le drag and drop à mettre après "GUISetState(@SW_SHOW)":
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")
La fonction pour récupérer les fichiers:
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)
        $pFileName = 0
    Next
EndFunc
La fonction pour traiter chaque fichier (retirer le chemin, choisir les extensions autorisées et vérifier les doublons dans la listview qui reçoit le drop):
Func filelist()
For $i = 0 To UBound($gaDropFiles) - 1
Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = ""
Local $aPathSplit = _PathSplit($gaDropFiles[$i], $sDrive, $sDir, $sFilename, $sExtension)
Local $fichier=$sFilename&$sExtension
if $sExtension='.mp4' or $sExtension='.mkv' or $sExtension='.flv' or $sExtension='.mov' or $sExtension='.avi' or $sExtension='.webm' or $sExtension='.mp3' or $sExtension='.aac' or $sExtension='.ac3' or $sExtension='.PCM' Then

Local $test=_GUICtrlListView_FindText(@GUI_DropId,$fichier)
Else
ContinueLoop
EndIf
If $test>-1 Then
ContinueLoop
Else
GUICtrlCreateListViewItem($fichier,@GUI_DropId)
EndIf
Next
EndFunc
Puis ajouter
case $GUI_EVENT_DROPPED
filelist()
dans le switch
ex:
while 1
$nMsg = GUIGetMsg()
Switch $nMsg[0]
case $GUI_EVENT_DROPPED
filelist()
Case $Form2
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Voila Bonne continuation
et un grand merci à la communauté d'autoitscript
Biz à tous
Fichiers joints
drag an drop multi-listviews.au3
(2.83 Kio) Téléchargé 325 fois
Modifié en dernier par serpafi le mar. 29 oct. 2019 12:53, modifié 15 fois.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: drag and drop multiple listviews

#2

Message par TommyDDR »

Bonjour serpafi,
en me penchant sur votre problème, je me suis rendu compte que même mes anciens programmes qui utilisaient le drag&drop (et qui fonctionnait) n'ont plus l'air de fonctionner sous windows 10...
En général c'est à cause des droits du programme vs les droits de l'explorateur, mais même en essayant de les lancer en admin ou non, le drop n'est plus détecté...
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
serpafi
Niveau 3
Niveau 3
Messages : 40
Enregistré le : ven. 25 oct. 2019 21:19
Status : Hors ligne

Re: drag and drop multiple listviews

#3

Message par serpafi »

Merci tommyDDR de te pencher dessus.
De mon coté le drag and drop fonctionne, je dépose une video en MKV une 1er fois sur $listview1,
le message "rep1" apparait puis le redépose une 2eme fois et le nom du fichier se retrouve dans $listview1.
1er problème : dés le début je dois déposer 2 fois pour que le fichier soit prit en compte.
2eme problème : a partir du moment ou il y a un fichier dans une des list (ex $listview1), le D'n'D devient actif sur tout le GUI (sur les labels, comboboxs, etc...) mais rempli que la $listview1.
J'aimerai un D'n'D délimité aux listviews .
Pour info
Les @gui_dropid et @gui_dragfile restent bloqués sur les valeurs du premier fichier.
ConsoleWrite(@GUI_DropId & " valeur @GUI_DropId " &@CRLF)
ConsoleWrite(@GUI_DragFile & " valeur @GUI_DragFile " &@CRLF)
que j'ai mis dans la fonction "WM_DROPFILES_FUNC_rep1" et "WM_DROPFILES_FUNC_rep2"
En bref! je bloque.
J’espère ne pas trop noyer le poisson avec mes explications.:'D
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: drag and drop multiple listviews

#4

Message par mikell »

Sujet déplacé dans l'Aide Générale
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
JoeBar
Niveau 2
Niveau 2
Messages : 23
Enregistré le : sam. 26 oct. 2019 10:20
Status : Hors ligne

Re: [R]drag and drop multi listviews

#5

Message par JoeBar »

Salut, ton fichier source renvoie des erreurs de boucle, il fonctionne chez toi ?
Image
serpafi
Niveau 3
Niveau 3
Messages : 40
Enregistré le : ven. 25 oct. 2019 21:19
Status : Hors ligne

Re: [R]drag and drop multi listviews

#6

Message par serpafi »

corrigé
Répondre