<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><category>pcsoft.fr.windev</category><copyright>Copyright 2026, PC SOFT</copyright><lastBuildDate>26 Nov 2019 10:55:02 Z</lastBuildDate><pubDate>26 Nov 2019 10:55:02 Z</pubDate><description>Bonjour à toutes et à tous,&#13;
&#13;
Je développe en ce moment même une fonctionnalité de drag and drop et je me heurte à quelques impondérables liés à mes faibles connaissances en WinDev... je m'explique...&#13;
&#13;
Je cherche à réaliser une opération de drag and drop dans une table permettant à terme de réaliser une copie d'un fichier droppé dans un répertoire cible.&#13;
&#13;
Cependant, parce que ce serait trop facile, ma table est elle même reliée à un champ arbre qui me permet de naviguer entre les répertoires composant un dossier parent :&#13;
&#13;
[code:wl]&#13;
//A chaque clic sur un élément de l'arbre, on affiche le contenu de l'élément dans la table liée&#13;
&#13;
sUnFichier, sResListeFichier, sStatutCryptage sont des chaînes&#13;
&#13;
//On supprime le contenu de la table&#13;
TableSupprimeTout(TABLE_PreviewDuContenuLocal)&#13;
&#13;
// Vérifie si l'arbre n'est pas vide et si une ligne est bien sélectionnée&#13;
SI ARBRE_RépertoireLocal..Occurrence = 0 OU ArbreSelect(ARBRE_RépertoireLocal, Vrai) = "" ALORS&#13;
	&#13;
	//si aucun élément de l'arbre n'a été sélectionné&#13;
	RETOUR&#13;
FIN&#13;
&#13;
//on récupère le contenu de l'élément de l'arbre sélectionné&#13;
sLigneSélect est une chaîne = ArbreSelect(ARBRE_RépertoireLocal, Vrai)  &#13;
&#13;
//On remplace les tabulations, les escapes et les "II" pour récupérer le format originel du chemin du répertoire sélectionné dans l'arbre&#13;
sLigneSélect = Remplace(sLigneSélect, TAB, "\") &#13;
sLigneSélect = Remplace(sLigneSélect, ESC, "") &#13;
sLigneSélect = Remplace(sLigneSélect, "II", "") &#13;
sLigneSélect = Remplace(sLigneSélect, "test://", "C:")&#13;
&#13;
sElement est une chaîne = ExtraitChaîne(sLigneSélect, 1, TAB, DepuisFin)&#13;
&#13;
sElement = ExtraitChaîne(sElement, 1, ESC)&#13;
&#13;
//On récupère la liste de tout les fichiers présents dans le répertoire sélectionné. &#13;
// On limite la récupération en ne prenant pas en compte les fichiers cachés et les fichiers présents dans les sous-dossiers&#13;
sResListeFichier = fListeFichier(sElement + "\*.*", frSansFichierCaché + frNonRécursif) &#13;
&#13;
//parcours de la liste&#13;
POUR TOUTE CHAÎNE sUnFichier DE sResListeFichier SEPAREE PAR RC&#13;
	&#13;
	//nous n'affichons pas les fichiers système&#13;
	SI fExtraitChemin(sUnFichier,fExtension) &lt;&gt; ".sys" ALORS&#13;
		&#13;
		//nous n'affichons pas les fichiers ayant pour extension ".lock"&#13;
		SI fExtraitChemin(sUnFichier, fExtension) &lt;&gt; CONST_LOCK ALORS &#13;
			&#13;
			//on réalise un calcul sur la taille du fichier pour adapter au mieux son affichage dans la table&#13;
			&#13;
			//on récupère la taille du fichier exprimé en octets&#13;
			nTailleFichier est un entier = fTaille(sUnFichier) &#13;
			sTailleFichier est une chaîne&#13;
			&#13;
			//si la taille du fichier est strictement inférieure à 1024 octets&#13;
			SI nTailleFichier &lt; 1024 ALORS&#13;
				&#13;
				sTailleFichier = NumériqueVersChaîne(nTailleFichier) + " octets" &#13;
				&#13;
			SINON &#13;
				&#13;
				//si la taille du fichier est comprise entre 1.024 (compris) et 1.048.578 octets&#13;
				SI nTailleFichier &gt;= 1024 ET nTailleFichier &lt; 1048579  ALORS &#13;
					&#13;
					//on divise le total par 1024 et on arrondit à 2 décimales&#13;
					sTailleFichier = NumériqueVersChaîne(Arrondi(nTailleFichier / 1024,2)) + " Ko"&#13;
					&#13;
				SINON&#13;
					&#13;
					//si la taille du fichier est comprise entre 1.048.579 (compris) et 1.073.741.824 octets&#13;
					SI nTailleFichier &gt;= 1048579 ET nTailleFichier &lt; 1073741824 ALORS&#13;
						&#13;
						//on divise par 1.048.579 et on arrondit à 2 décimales&#13;
						sTailleFichier = NumériqueVersChaîne(Arrondi(nTailleFichier / 1048579,2)) + " Mo"&#13;
						&#13;
					SINON&#13;
						&#13;
						//si la taille est supérieure ou égale à 1.073.741.824 octets&#13;
						SI nTailleFichier &gt;= 1073741824 ALORS&#13;
							&#13;
							//on divise par 1.073.741.824 et on arrondit à 2 décimales&#13;
							sTailleFichier = NumériqueVersChaîne(Arrondi(nTailleFichier / 1073741824,2)) + " Go"&#13;
							&#13;
						FIN&#13;
					FIN&#13;
				FIN &#13;
			FIN&#13;
			&#13;
			//on lit le contenu du statut de cryptage du fichier ".lock" correspondant et on l'enregistre dans une variable&#13;
			sStatutCryptage = INILit("CRYPT", "STATUS", "", sUnFichier + CONST_LOCK) &#13;
			&#13;
			SI sStatutCryptage = "CRYPTED" ALORS&#13;
				&#13;
				//Si le fichier est crypté&#13;
				TableAjouteLigne(TABLE_PreviewDuContenuLocal, "C:\Mes Projets\P2P\lock.png", fExtraitChemin(sUnFichier,fFichier+fExtension), sTailleFichier, sUnFichier)  &#13;
				&#13;
			SINON&#13;
				&#13;
				//si le fichier n'est pas crypté&#13;
				TableAjouteLigne(TABLE_PreviewDuContenuLocal, "C:\Mes Projets\P2P\lock1.png", fExtraitChemin(sUnFichier,fFichier+fExtension), sTailleFichier, sUnFichier)  &#13;
				&#13;
			FIN	&#13;
		FIN&#13;
	FIN&#13;
FIN&#13;
&#13;
[/code]&#13;
&#13;
Donc, pour chaque clic d'un élément présent dans mon arbre, je modifie le contenu de ma table.&#13;
Je cherche à, après avoir afficher le contenu d'un dossier, permettre le drop d'un fichier dans la table et pouvoir récupérer le chemin du répertoire en cours pour y copier le fichier droppé :&#13;
&#13;
[code:wl]&#13;
//&#13;
//INITIALISATION DE TABLE_PREVIEWDUCONTENULOCAL&#13;
//&#13;
&#13;
ExplorerAccepte(Vrai,TABLE_PreviewDuContenuLocal) &#13;
&#13;
&#13;
//&#13;
//DROP DEPUIS L'EXPLORATEUR (WM_DROPFILES) SUR TABLE_PREVIEWDUCONTENULOCAL&#13;
//&#13;
&#13;
sLigneSélect est une chaîne = ArbreSelect(ARBRE_RépertoireLocal, Vrai)&#13;
&#13;
Trace("1 = " + sLigneSélect)&#13;
&#13;
// Drag and drop avec l'explorateur Windows : activation&#13;
gnNumIdentifiantEvenementDragAndDropWindows = Evénement(RecupFichiers_DND_Windows,TABLE_PreviewDuContenuLocal..NomComplet,WM_DROPFILES) &#13;
[/code]&#13;
&#13;
et ma fonction RecupFichiers_DND_Windows() :&#13;
&#13;
[code:wl]&#13;
PROCÉDURE RecupFichiers_DND_Windows()&#13;
&#13;
// Nombre de fichiers posés dans l'application par Drag and Drop&#13;
nbFic est un entier = ExplorerRécupère(_EVE.wParam)&#13;
sNomFic est une chaîne&#13;
// Récupération de tous les fichiers&#13;
i est un entier	&#13;
POUR i = 1 À nbFic&#13;
	sNomFic=ExplorerRécupère(_EVE.wParam,i)&#13;
	Trace(sNomFic) &#13;
	&#13;
	//réaliser code d'ajout du fichier dans le répertoire cible&#13;
	&#13;
	// Ajoute le fichier&#13;
	TableAjouteLigne(TABLE_PreviewDuContenuLocal,sNomFic, sNomFic) &#13;
FIN&#13;
&#13;
// Positionne la table en fin&#13;
TablePosition(TABLE_PreviewDuContenuLocal, TABLE_PreviewDuContenuLocal..Occurrence) &#13;
[/code]&#13;
&#13;
après test, lors d'un premier drop, ma trace affiche "1 = test://&lt;ESC&gt;I&lt;ESC&gt;I&lt;TAB&gt;test&lt;ESC&gt;I&lt;ESC&gt;I&lt;TAB&gt;archives&lt;ESC&gt;I&lt;ESC&gt;I" (si j'essaie de dropper un fichier dans le répertoire test://test/archive). Cependant, le drop ne s'effectue pas et lors des drops suivants, ils s'affichent dans ma table mais la fonction trace en renvoie plus rien.&#13;
&#13;
Je n'ai pas beaucoup d'expérience en WinDev et je bloque un peu sur ça, merci d'avance</description><ttl>30</ttl><generator>WEBDEV</generator><language>fr_FR</language><link>https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/234898-aide-pour-fonctionnalite-drag-and-drop/read.awp</link><title>aide pour la fonctionnalité drag and drop</title><managingEditor>moderateur@pcsoft.fr (El moderador)</managingEditor><webMaster>webmaster@pcsoft.fr (El webmaster)</webMaster></channel></rss>
