Couper des fichiers

Pinky84 Messages postés 24 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 27 avril 2010 - 25 sept. 2005 à 19:07
Pinky84 Messages postés 24 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 27 avril 2010 - 27 sept. 2005 à 03:29
Lorsque que je coupe un fichier dans explorer et le colle dans mon app,
la copie de fait se fait parfaitement sauf qu'il me reste a dire a
l'explorer qu'il peut maintenant effacer le fichier en question. J'ai
vu qu'il faut faire quelque chose ressemblant à (le code est imcomplet):



IDataObject *pData = NULL;

if (OleGetClipboard(&pData))

{

FORMATETC Format = {0};

STGMEDIUM *pMedium = 0;



// On met quoi dans Format ?!?

Format.cfFormat = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);



pData->GetData(&Format, pMedium); // ERREUR: Access violation reading location 0x00000000



if (pMedium)

{

// Verifier si le format CFSTR_PREFERREDDROPEFFECT égale DROPEFFECT_MOVE

// Si oui: appeller SetData avec le format CFSTR_PERFORMEDDROPEFFECT égale à DROPEFFECT_MOVE

delete pMedium;

}

}





Merci d'avance

Pinky84

10 réponses

cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
25 sept. 2005 à 19:16
t' a testée avec

FORMATETC *Format = {0};

???

ton erreur te dis que tu cherche a lire un emplacement mémoire null;



event.Merci();@+;ROOT_DIEU Alias satellite34
0
Pinky84 Messages postés 24 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 27 avril 2010
25 sept. 2005 à 19:32
C'est ce que je veux savoir, comment remplis t-on ce FORMATETC. Sur
MSDN, il n'explique pas comment, tout ce que je sais c'est que cfFormat
doit etre RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);



Et puis j'aimerai aussi savoir comment faire pour:



// Verifier si le format CFSTR_PREFERREDDROPEFFECT égale DROPEFFECT_MOVE
// Si oui: appeller SetData avec le format CFSTR_PERFORMEDDROPEFFECT égale à DROPEFFECT_MOVE





Merci
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
26 sept. 2005 à 15:11
formule un peu mieux tesc questions car la, franchementy, je ne comprends pas ce que tu veux;

@+;
ROOT_DIEU Alias satellite34
0
Pinky84 Messages postés 24 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 27 avril 2010
26 sept. 2005 à 16:29
Comment faire pour signaler à l'explorer que l'on a 'Coller' des
fichiers que l'utilisateur avait précédemment 'Couper' dans l'explorer.
Car avec le code que j'ai écrit, tout ce qui se fait c'est la copie des
fichiers mais ne signale pas explorer qu'il a complèté l'opération donc
n'efface pas les fichiers.



Le code en question:

void OnMenu_EditPaste(HWND hWnd)

{

if (OpenClipboard(hWnd))

{

HDROP hData;



if (hData = (HDROP) GetClipboardData(CF_HDROP))

{

//IDataObject *pData = NULL;



Paste(hWnd, hData);



// maintenant il faut avertir explorer que l'opération est completée, mais comment ?!?

/*

if (OleGetClipboard(&pData))

{

FORMATETC Format = {0};

STGMEDIUM *pMedium = NULL;



Format.tymed = TYMED_FILE;


Format.cfFormat =
RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);

Format.ptd = 0;

Format.dwAspect = DVASPECT_CONTENT;

Format.lindex = -1;



pData->GetData(&Format, pMedium);



if (pMedium)

{



delete pMedium;

}

}*/

}

CloseClipboard();

}

}





Le exe:

ftp://shelter.ath.cx/boxit.exe

Si tu n'a pas déjà cette dll (microsoft ne la distribu pas avec DX9.0c)

ftp://shelter.ath.cx/d3dx9_26.dll



Coupe quelque fichier ensuite colle les dans ce programme, les fichier
sont bel et bien copier, mais explorer n'en est pas averti et n'efface
donc pas les fichiers.



Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
26 sept. 2005 à 16:40
essaye voir de le faire manuellement, désolé mais je ne programme pas sous windows, à mon gout, je récupererai le chemin de l'ancien fichier et je l'effacerai avec comme condition que la découpe est réussi, et tout ca manuellement;

Avec stdio.h, tu peux faire :

if( remove( t_fichier ) = = -1 )
perror( "Error deleting file" );
else
puts( "File successfully deleted" );
return 0;

Je ne sais pas si c'est ce que tu veux exactement faire mais je crois avoir compris ca;
Tiens nous au courant


event.Voila();
@+;
ROOT_DIEU Alias satellite34
0
Pinky84 Messages postés 24 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 27 avril 2010
26 sept. 2005 à 17:06
C'est malheureusement impossible, je dois savoir si l'utilisateur a fait couper ou copier et effacer seulement s'il a fait couper.

Merci!
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
26 sept. 2005 à 17:24
trés chère pinky du 84 (hihihi, j' était a Carpentras pendant 4ans (lol))

ok, ben je ne vois pas le problème !!!!!!!
Comme dit plus haut , tu fais une condition :

if (t'a_coupé)
remove( t_fichier );
return 0;
0
Pinky84 Messages postés 24 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 27 avril 2010
26 sept. 2005 à 17:51
La partie où l'utilisateur coupe le ficheir c'est pas dans mon
programme, c'est dans Windows. Pour savoir si l'utilisateur a fait
couper je dois passer un FORMATETC à IDataObject::GetData et FORMATETC::cfFormat doit être RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT).



Mais je ne sais pas quoi mettre au autre membre de la strcut et quand j'apelle GetData ce plante (Access violation reading location 0x00000000)
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
27 sept. 2005 à 03:19
je ne comprends pas le but de ton dev en fait !

Ne voudrais-tu pas que ton soft gére tout du début a la fin???
Pourquoi c'est windows qui dit s' occuper de la découpe????
Car si ton soft gérait tout ca tu n' aurai plus ce pb je pense;

ROOT_DIEU;
0
Pinky84 Messages postés 24 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 27 avril 2010
27 sept. 2005 à 03:29
C'est pour permettre à l'utilisateur d'ajouter des fichiers facilement
dans l'app simplement en les Dragdropant ou en faisant Couper/Copier
Coller.

C'est pas un choix que j'ai, si je veux faire ca, mon app à pas le choix de coopérer avec Windows.
0
Rejoignez-nous