1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
PROCEDURE asDropFileDepuisExplorateur()
// Structure Windows permettant de gérer
// le Glisser/Déplacer avec l'explorateur
POINT est une Structure
x, y sont des entiers
FIN
DROPFILES est une Structure
// Pointeur vers la liste des fichiers
pFiles est un entier
// Position d'origine de la souris
PT est un POINT
// Réservé
fNC est un booléen
// Vrai si la liste des fichiers est en UNICODE, Faux sinon
fWide est un booléen
FIN
// Initialise une structure HDROP
stDROPFILES est un DROPFILES
bufDonneesDrop est un Buffer
nTaille est un entier
lnIndice est un entier
lsChaineUnicode est une chaîne UNICODE
lsChaineANSI est une chaîne ANSI
lasFichiers est un tableau de chaînes
//Récupération des données
bufDonneesDrop = DnDRécupère(CF_HDROP)
//Récupération de la taille du buffer
nTaille = Taille(bufDonneesDrop) - Dimension(stDROPFILES)
//Récupération de la structure Windows
Transfert(&stDROPFILES, &bufDonneesDrop,Dimension(stDROPFILES))
//ANSI ou Unicode ?
SI stDROPFILES:fWide = Vrai ALORS
//Unicode
//Récupération de la liste des fichiers
lsChaineUnicode = Répète(CaractUnicode(0),nTaille)
Transfert(&lsChaineUnicode,&bufDonneesDrop + Dimension(stDROPFILES),nTaille)
lsChaineANSI = UnicodeVersAnsi(lsChaineUnicode)
SINON
//ANSI
//Récupération de la liste des fichiers
lsChaineANSI = Répète(Caract(0),nTaille)
Transfert(&lsChaineANSI,&bufDonneesDrop + Dimension(stDROPFILES),nTaille)
FIN
//Les chemins sont séparés par le caractère 0
ChaîneVersTableau(lsChaineANSI,lasFichiers,Caract(0))
//On supprime tous les doublons (Surtout les chaines vides en fait)
TableauSupprimeDoublon(lasFichiers)
//On supprime la dernière chaine vide.
lnIndice = TableauCherche(lasFichiers,tcLinéairePremier,"")
TableauSupprime(lasFichiers,lnIndice)
//On renvoi enfin la liste des fichiers dropés.
RENVOYER lasFichiers |
Partager