IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement OS X Discussion :

[Carbon] filename a partir d'un drop du finder


Sujet :

Développement OS X

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut [Carbon] filename a partir d'un drop du finder
    bonjour,

    j'ai le code ci dessous et je n'arrive pas à récuperrer le nom du fichier droppé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    OSErr
    InterfacePlayliste::MyDragReceiveHandler(WindowRef theWindow, void * handlerRefCon, DragRef theDrag)
    {
      Rect itemB;
      DragItemRef theItemRef = 0;
      ushort numItems = 0, numFlavors = 0;
      Point mouse;
      Point globalPinnedMouse;
      FlavorType theType;
      long dataSize;
      void * dataPtr;
    	 	 
      CountDragItems (theDrag, &numItems);
     
      for (ushort i = 0; i < numItems; ++i)
      {
        GetDragItemReferenceNumber(theDrag, i, &theItemRef);   
        printf("%d\n",GetDragItemBounds(theDrag, theItemRef, &itemB));	
    	GetDragMouse(theDrag, &mouse, 0);
    	
    	printf("%d\n",CountDragItemFlavors( theDrag, theItemRef, &numFlavors));
    	
        printf("%d, top: %d left: %d bottom: %d right: %d, mouse v : %d, h : %d, globalPinnedMouse v : %d, h : %d, nombre de flavors : %d \n",i,itemB.top, itemB.left, itemB.bottom, itemB.right, mouse.v, mouse.h, globalPinnedMouse.v, globalPinnedMouse.h, numFlavors);	
    	//kFlavorTypeClippingFilename
    	
        for (ushort j = 0; j < numFlavors; ++j)
        {
    	  GetFlavorType(theDrag, theItemRef, j, &theType);
    	  
    	  printf("flavor %d : %d, %d\n", j, kFlavorTypeClippingFilename,theType);
          //GetFlavorDataSize(theDrag, theItemRef, theType, &dataSize);
    	  //dataPtr = NewHandle(dataSize); 
          //GetFlavorData(theDrag, theItemRef, theType, &dataPtr, &dataSize, 0);
    	  //DisposeHandle
    	}
    	
      }
      return noErr; 
    }
    désolé pour les commentaires un peu laids mais j'ai fait pleins de tests...

    A priori j'ai une erreur de type Item Ref Invalide lors de la fonction CountDragItemFlavors, par contre il est tout a fait valide deux lignes plus haut avec GetDragItemBounds.

    Peut etre que je m'y prend mal dans ce cas pourriez vous m'orienter ? merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par NiamorH
    bonjour,

    j'ai le code ci dessous et je n'arrive pas à récuperrer le nom du fichier droppé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    OSErr
    InterfacePlayliste::MyDragReceiveHandler(WindowRef theWindow, void * handlerRefCon, DragRef theDrag)
    {
      Rect itemB;
      DragItemRef theItemRef = 0;
      ushort numItems = 0, numFlavors = 0;
      Point mouse;
      Point globalPinnedMouse;
      FlavorType theType;
      long dataSize;
      void * dataPtr;
    	 	 
      CountDragItems (theDrag, &numItems);
     
      for (ushort i = 0; i < numItems; ++i)
      {
        GetDragItemReferenceNumber(theDrag, i, &theItemRef);   
        printf("%d\n",GetDragItemBounds(theDrag, theItemRef, &itemB));	
    	GetDragMouse(theDrag, &mouse, 0);
    	
    	printf("%d\n",CountDragItemFlavors( theDrag, theItemRef, &numFlavors));
    	
        printf("%d, top: %d left: %d bottom: %d right: %d, mouse v : %d, h : %d, globalPinnedMouse v : %d, h : %d, nombre de flavors : %d \n",i,itemB.top, itemB.left, itemB.bottom, itemB.right, mouse.v, mouse.h, globalPinnedMouse.v, globalPinnedMouse.h, numFlavors);	
    	//kFlavorTypeClippingFilename
    	
        for (ushort j = 0; j < numFlavors; ++j)
        {
    	  GetFlavorType(theDrag, theItemRef, j, &theType);
    	  
    	  printf("flavor %d : %d, %d\n", j, kFlavorTypeClippingFilename,theType);
          //GetFlavorDataSize(theDrag, theItemRef, theType, &dataSize);
    	  //dataPtr = NewHandle(dataSize); 
          //GetFlavorData(theDrag, theItemRef, theType, &dataPtr, &dataSize, 0);
    	  //DisposeHandle
    	}
    	
      }
      return noErr; 
    }
    désolé pour les commentaires un peu laids mais j'ai fait pleins de tests...

    A priori j'ai une erreur de type Item Ref Invalide lors de la fonction CountDragItemFlavors, par contre il est tout a fait valide deux lignes plus haut avec GetDragItemBounds.

    Peut etre que je m'y prend mal dans ce cas pourriez vous m'orienter ? merci
    de mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      for (ushort i = 1; i <= numItems; ++i)
    l'index commence à 1…

  3. #3
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Alors ça c'est folklo.
    On dirait que c'était effectivement le problème...

    merci

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Bon, j'enleve le tag résolu car j'ai encore un probleme.

    Après avoir cherché et finalement trouvé comment obtenir le nom du fichier droppé sur ma fenetre (j'aurai tendance à trouver que le nombre de conversions et les détours pour simplement avoir cette info est assez fou...), je m'aperçoit que le nom du répertoire n'est pas présent.


    Or j'en ai besoin.


    Alors quelqu'un sait-il comment extraire le chemin complet à partir d'un FSRef ou FSSpec ou HFSFlavor ?

    ci joint le code que j'utilise pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    OSErr
    InterfacePlayliste::MyDragReceiveHandler(WindowRef theWindow, void * handlerRefCon, DragRef theDrag)
    {
      DragItemRef theItemRef = 0;
      ushort numItems = 0, numFlavors = 0;
      FlavorType theType;
      long dataSize;
      HFSFlavor currHFSFlavor;
      FSRef fsfile;
      HFSUniStr255 unicodename;
      CFStringRef strRef;
      char filename[256];
      
      CountDragItems (theDrag, &numItems);
     
      for (ushort i = 1; i <= numItems; ++i)
      {
        GetDragItemReferenceNumber(theDrag, i, &theItemRef);   
      	
    	CountDragItemFlavors( theDrag, theItemRef, &numFlavors);	
    	
    	ushort j = 1;
    	bool continuer = true;
        while (!(j > numFlavors) && continuer)
        {
    	  GetFlavorType(theDrag, theItemRef, j, &theType);
    	  
    	  if (theType == 'hfs ')
    	  {
    	    dataSize = sizeof(HFSFlavor);
            GetFlavorData(theDrag, theItemRef, theType, &currHFSFlavor, &dataSize, 0);
    	    FSpMakeFSRef(&currHFSFlavor.fileSpec, &fsfile);
    		FSGetCatalogInfo(&fsfile, kFSCatInfoNone, 0, &unicodename, 0, 0);
    		strRef = CFStringCreateWithCharacters(kCFAllocatorDefault, unicodename.unicode, unicodename.length);
    		CFStringGetCString(strRef, filename, 256, kCFStringEncodingUTF8);
    		printf(filename);
    		continuer = false;
    	  }
    	  ++j;
    	}
      }

    EDIT : en cherchant mieux j'ai trouvé : FSRefMakePath (&fsfile,(uchar *)filename, 256);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Drag and Drop à partir d'un web browser vers un panel
    Par abduz dans le forum Windows Forms
    Réponses: 0
    Dernier message: 05/04/2011, 07h00
  2. Réponses: 0
    Dernier message: 21/07/2010, 06h37
  3. Drag and drop a partir d'une appli dot net
    Par LitteulKevin dans le forum C++Builder
    Réponses: 0
    Dernier message: 12/09/2007, 09h17
  4. [MySQL] Populer un drop down menu à partir de mysql
    Par deaven dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/04/2007, 08h37
  5. drag and drop à partir de menu
    Par flamel dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/03/2007, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo