|
Windev et le copier-coller de fichiers |
|
---|---|---|
Anonyme
|
Bonjour
Il y a deux exemples de copier-coller windev/windows dans les FAQ. L'un fonctionne très bien (le "copier windows vers windev"), mais l'inverse, le "copier windev vers windows" ne semble pas fonctionner (il manque les déclarations, mais même après avoir spécifiées celle-ci, j'ai toujours un message d'erreur "impossible de copir Fichier : le nom de fichier spécifié n'est pas valide ou est trop long.") D'autre part, j'ai aussi ce code, qui a le même problème : (on met dans la table des chemins de fichiers. Par exemple "c:\texte.txt") PROCEDURE Table_Vers_Clipboard(nom_table) ch est une chaîne i,ipos est un entier Handle_1, Handle_2 est un entier SI AppelDLL32("user32","OpenClipboard",Handle()) ALORS AppelDLL32("user32","EmptyClipboard") Handle_1 = AppelDLL32("kernel32","GlobalAlloc",0x2,10000000) SI Handle_1 ALORS Handle_2 = AppelDLL32("kernel32","GlobalLock",Handle_1) POUR i = 1 A TableOccurrence(nom_table,toColonne) ch+={nom_table}[1][i] FIN // ch+=RC AppelDLL32("kernel32","RtlMoveMemory",Handle_2,&ch,Taille(ch)) ipos = Handle_2+Taille(ch) POUR i=1 A {nom_table}..Occurrence ch={nom_table}[i]+Caract(0) AppelDLL32("kernel32","RtlMoveMemory",ipos,&ch,Taille(ch)) ipos+=Taille(ch) FIN AppelDLL32("kernel32","GlobalUnlock",Handle_1) AppelDLL32("user32","SetClipboardData",CF_HDROP,Handle_1) FIN FIN AppelDLL32("user32","CloseClipboard") AppelDLL32("kernel32","GlobalFree",Handle_1) Quelqu'un saurait-il d'où vient le problème ? Et enfin, comment faire pour le couper/coller ? Merci d'avance à ceux qui voudront bien se pencher sur mon problème. Le lien vers le "copier windev/windows" de la FAQ : http://old.wdforge.org/modules/wffaq/article.php?t=53
Contribution le : 02/08/2004 17:35
|
|
|
Re: Windev et le copier-coller de fichiers |
|
---|---|---|
Anonyme
|
Sans trop renter dans le détail des formats d'échange du presse-papiers windows (plus d'infos ici : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/clipboard/clipboardformats.asp), windev ne sait gérer par la fonction verspressepapier que les types de données texte et image (CF_TEXT et CF_BITMAP pour windows). Le format qu'utilise le système pour copier des listes de fichiers est tout autre, c'est le CF_HDROP. Bien sûr on passe une liste de fichiers sous forme de texte, mais il faut avoir d'abord initialisé le presse-papiers avec le format adéquat au préalable; ça ne peut fonctionner si on spécifie le format texte au presse-papiers.
D'ailleurs, on peut lire à la fin de l'aide sur verspressepapier dans windev le bien triste : "La fonction PressePapier permet de lire le contenu du presse-papiers. Les informations autres que celles de type texte ou image (binaire, etc.) contenues dans le presse-papiers ne peuvent pas être lues par la fonction PressePapier."
Contribution le : 04/08/2004 19:50
|
|
|
Re: Windev et le copier-coller de fichiers |
|
---|---|---|
Animateur WDF
Inscrit:
02/03/2003 04:07 De Noisy le grand(93)
Post(s): 2745
|
Contribution le : 05/08/2004 02:23
|
|
|
Re: Windev et le copier-coller de fichiers |
|
---|---|---|
Anonyme
|
Merci encore mais votre exemple concerne le drag and drop, et pas le copier-coller; très différent
Contribution le : 05/08/2004 12:56
|
|
|
Re: Windev et le copier-coller de fichiers |
|
---|---|---|
Stagiaire WDF
Inscrit:
19/10/2010 15:42 Post(s): 3
|
Apres bien des recherches, j'ai reussie a convertir un bout de code VB et j'ai reussie a extraire la liste des fichiers et repertoires qui serait dans le presse Papier:
//Taken from : // http://www.developerfusion.com/code/224/copy-files-to-clipboard/ //And converted to Windev by Gilles Levasseur (gilles.l@usa.net) //Determines if the items in the Clipboards are files SI PAS PressePapierFormat(CF_HDROP) ALORS RETOUR //Declaration of the variables FunctionResult is boolean // C Type:BOOL hWndNewOwner is entier système // C Type:HWND HandleFileList is entier système // C Type:HANDLE uFormat is entier sans signe // C Type:UINT uFormat = CF_HDROP NbrFiles is entier sans signe // C Type:UINT VAR_2_UINT is entier sans signe = 0xFFFFFFFF // C Type:UINT VAR_3_LPSTR is chaîne = "" // C Type:LPSTR, is a string address, you can also specify a string directly VAR_4_UINT is entier sans signe = 0 // C Type:UINT lo_FileList est une chaîne lo_FileCounter est un entier = 0 lo_FolderList est une chaîne lo_FolderCounter est une entier= 0 lo_FolderName est une chaîne lo_Filename est une chaîne fixe sur 260 lo_NewFileName est une chaîne //Open The Clipboard FunctionResult=API("USER32","OpenClipboard",hWndNewOwner) //FunctionResult = True if the Windows clipboard is avaliable SI PAS FunctionResult ALORS RETOUR // Get handle to Dropped Filelist data, and number of files HandleFileList=API("USER32","GetClipboardData",uFormat) NbrFiles=API("SHELL32","DragQueryFileA",HandleFileList,VAR_2_UINT,VAR_3_LPSTR,VAR_4_UINT) // Retrieve each filename in Dropped Filelist. POUR i = 0 A NbrFiles -1 API("SHELL32","DragQueryFileA",HandleFileList,i,&lo_Filename,Taille(lo_Filename)) lo_NewFileName = SansEspace(fExtraitChemin(lo_Filename, fDisque + fRépertoire + fFichier + fExtension)) SI fFichierExiste(lo_NewFileName) ALORS lo_FileList += lo_NewFileName+RC lo_FileCounter++ SINON SI fRépertoireExiste(lo_NewFileName) ALORS lo_FolderList += lo_NewFileName+RC lo_FolderCounter++ FIN FIN // Clean up API("USER32","CloseClipboard") Trace("Files"+RC+lo_FileList) Trace("Folders"+RC+lo_FolderList) J'espere que ca aidera quelqu'un Bien a vous. Gilles
Contribution le : 16/11/2010 16:45
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.