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

C++ Discussion :

Déposer/glisser pour ouvrir un fichier


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut Déposer/glisser pour ouvrir un fichier
    Hello tout le monde !

    J'aurais une tite question.....
    J'aimerais faire une application toute bete qui me permettrait de tracer un graphique en 2D. Jusque là pas de souci. Ce qui se gâte c'est que j'aimerais pouvoir faire ça simplement en prenant un fichier de données ASCII et en le glissant sur l'icone de mon programme. Par exemple, quand on prend un fichier *.xls, on peut l'ouvrir simplement en glissant l'icone du fichier sur l'icone de raccourci d'excel. J'aimerais donc pouvoir faire la même chose avec mon application.
    Je suis capable de faire un petit programme pour créer une boite de dialogue TOpenDialog, récupérer le nom du fichier à ouvrir, récupérer les données dans une variable, et utiliser un dll de mon cru pour tracer le tout avec TChart.... me reste plus qu'à trouver un moyen de faire ça

    Quelqu'un aurait-il une solution ?? Merci !!

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Est-ce que glisser/déposer un fichier sur une application ne revient pas à passer le nom de fichier en tant que argv[1] ?
    c'est à dire que cela équivaudrait à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_application <nom_du_fichier>
    Ce qui est très facile à gérer dans ton appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(int argc, char** argv)
    {
    // ton appli 
    std::string nom_fichier(argv[1]);
    // nom_fichier contient le nom du fichier que tu as glissé déposé
    Tout cela bien sur sous réserve que la réponse à la question que j'ai posé en tout début de message soit oui. Tu peux essayer

  3. #3
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Je viens de tester, et on obtient bien le chemin absolu du fichier dans la variable argv[1] (attention pour les chemins avec espace ...)

  4. #4
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut
    Bonjour et merci pour ta réponse !

    J'ai finalement réussi à trouver ce que je cherchais sur je ne sais plus quel site (désolé donc de ne pouvoir le citer, mais bien sur ces lignes de code ne sont pas de moi !!!!)

    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
     
    MESSAGE void __fastcall TForm1::HandleDropFiles(TMessage& Msg)
    {
     hDrop = (HDROP)Msg.WParam;
     char *buf;
     int i ;
     int NombreDeBytes ;
     
     // hDrop : géré par Windows lors du traitement du message
     //         voir fichier d'entête
     // deuxième paramètre de DragQueryFile i  (3è NULL et 4è 0) =>
     // renvoi du nombre de bytes du nom de fichier d'indice i  droppé
     // Attention : i  commence à 0
     // Attention : nom du fichier : zéro de fin de chaîne non compris
     //             d'où le +1 ci-dessous
      NombreDeBytes=DragQueryFile(hDrop, 0, NULL, 0);
     
      buf = new char[NombreDeBytes+1];
     
      // copie dans buf le nom du fichier (le zéro de fin
      // de chaîne est copié aussi)
      DragQueryFile(hDrop, 0, buf, NombreDeBytes+1);
     
      Edit1->Text = buf;
      OuvertureFichier();
    }
    et ceci dans le header :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MESSAGE void __fastcall HandleDropFiles(TMessage&);
            BEGIN_MESSAGE_MAP
               MESSAGE_HANDLER(WM_DROPFILES, TMessage, HandleDropFiles);
            END_MESSAGE_MAP(TForm);
    et enfin, il suffit de lui dire quoi faire quand une Form est créée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
       DragAcceptFiles(Handle, true);//true : la fenêtre accepte le dropping
     
       if(int nbParam = ParamCount() > 0)    //ParamCount contient le nombre de
       {                                     //paramètres entrés
          Edit1->Text = ParamStr(1);         //ParamStr(1) contient le chemin complet
          OuvertureFichier();                //du premier paramètre
       }                                     //ParamStr(0) contient le chemin complet
                                             //du programme en cours
    }
    Par exemple ...

    Hope this could help someone else !

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Ne serait-ce pas du Delphi ça?

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Presque, du C++ de chez Borland on dirait

    C'est quand même beaucoup pour pas grand chose.

    Quand tu drop un fichier sur un exécutable, le chemin de ce fichier est dans argv, c'est pas difficile à gérer dans ton programme.

  7. #7
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut
    Hey oui bien joué c'est bien sur Borland Builder ça ! Pour le reste du code,
    c'est peut être un peu compliqué en effet, mais ça marche super bien.
    Je voulais qu'en déposant/glissant un fichier ASCII sur l'icone de mon application, celle-ci s'ouvre et s'exécute. Par ailleurs, je voulais aussi qu'une fois mon application lancée, si je dépose/glisse un fichier ASCII sur la fenetre, que mon application s'exécute aussi (l'application en question étant la représentation graphique des données contenues dans le fichier ASCII).
    Voili voilou !

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

Discussions similaires

  1. Problème pour ouvrir des fichiers .exe et .jar via une page html
    Par coyaote dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/02/2007, 12h28
  2. Problème pour ouvrir un fichier avec firefox 2.0
    Par peptofr dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 19/12/2006, 17h37
  3. [vbscript] [msgbox] boutons pour ouvrir des fichiers
    Par D-ude dans le forum VBScript
    Réponses: 8
    Dernier message: 12/12/2006, 16h49
  4. [FPDF] Pb pour ouvrir un fichier pdf sous IE ?
    Par wormseric dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/11/2006, 11h15
  5. probleme pour ouvrir un fichier JPG
    Par kokatrix dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 04/05/2006, 16h53

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