Drag n drop d'un fichier texte depuis le bureau

Salut,

Je souhaite ajouter une fonctionnalité de glisser déposer d’un fichier texte sur le bureau vers une listbox.
A ce stade je ne trouve pas comment lire le chemin d’accès au fichier pour le mettre dans le conteneur.

Une démo serait la bienvenue

Merci

Salut
un bout de code qui marche chez moi en v16 pour un drop sur un bouton 3D (mac, pas testé en win)

<code 4D>
//gen_file_drop

// gestion du dépot de fichier, retour du path

$vt_path:=""

C_BLOB($vx_données)

LIRE DONNÉES CONTENEUR(“public.file-url”;$vx_données)
$txt1:=BLOB vers texte($vx_données;UTF8 texte sans longueur)

Si ($txt1=“file://@”)
$txt1:=Remplacer chaîne($txt1;“file:///”;"")
$vt_path:=Convertir chemin POSIX vers système($txt1;*)
Tant que ($vt_path=":@")
$vt_path:=Sous chaîne($vt_path;2)
Fin tant que
Fin de si

$0:=$vt_path

</code 4D>

Bonsoir Bertrand

en V17, j’ai une méthode que j’exécute sur ‘On Drop’ :

<code 4D>
$UUID:=Form.PK_UUID
$n:=1
Repeat
$vChemin:=Get file from pasteboard($n)
If ($vChemin#"")
$n:=$n+1

	If (Test path name($vChemin)=Is a document)
		
		C_OBJECT($resultObject;$Entity)
		$resultObject:=Path to object($vChemin)
		$New:=False
		$Pos:=-1
		
		Case of 
			: (Form.nomDistincts.length=0)
			$New:=True
				
			: (Form.nomDistincts.length>0)
			$Pos:=Form.nomDistincts.findIndex("Collection_estPresent";$resultObject.name)
				
				If ($Pos=-1)
					$New:=True
					
				Else   // Un fichier existe avec le même nom
					CONFIRM("Voulez-vous remplacer le fichier '"+$resultObject.name+"' déjà présent ?")
					If (OK=1)  // Le remplacement est demandé
						$Entity:=ds.Documents.query("RefUUID = :1 and Nom = :2";Form.PK_UUID;$resultObject.name)
						$Entity.drop(dk stop dropping on first error)
						Form.nomDistincts.remove($Pos;1)
						$new:=True
					End if 
					
				End if 
				
		End case 
		
		If ($new)
			CREATE RECORD([Documents])
			[Documents]PK_UUID:=Generate UUID
			[Documents]RefUUID:=$UUID
			[Documents]Nom:=$resultObject.name
			[Documents]Extension:=$resultObject.extension
			DOCUMENT TO BLOB($vChemin;[Documents]Doc)
			SAVE RECORD([Documents])
			Form.nomDistincts.push($resultObject.name)
		End if 
		
	End if 
End if 

Until ($vChemin="")

Form.documents:=Form.documents

</code 4D>

et sur ‘On Load’, je fais :

<code 4D>
C_COLLECTION($Nom)
$Nom:=ds.Documents.query(“RefUUID = :1”;Form.PK_UUID).distinct(“Nom”)
Form.nomDistincts:=$Nom
</code 4D>

en espérant que cela aide.

Merci OD.

Entre-temps j’ai trouvé ça:

<code 4D>
Case of
: (Form event=On Drop)

	C_TEXT($T_Path)
	$T_Path:=Get file from pasteboard(1)
	
	ALERT($T_Path)

End case
</code 4D>

$T_Path contient le chemin d’accès au document.

Un copier du document sur le bureau fait pareil

En fait c’est l’http://livedoc.4d.com/4D-Langage-17/Conteneur-de-donnees/Lire-fichier-dans-conteneur.301-3730443.fr.htmlexemple> de la documentation