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

 Delphi Discussion :

Récupérer l'image copiée dans le presse-papier


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Récupérer l'image copiée dans le presse-papier
    Bonjour à toutes et à tous,

    Pour récupérer une image à l'aide de la touche "PrintScreen", pas de problème avec les formats de Windows.

    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
    42
     
     case clipFormat of
          // Tous les cas courants
          CF_TEXT: AddItem('Texte (CF_TEXT)', clipFormat);
          CF_BITMAP: AddItem('Windows Bitmap (CF_BITMAP)', clipFormat);
          CF_METAFILEPICT: AddItem('Windows Metafile (CF_METAFILEPICT)', clipFormat);
          CF_SYLK: AddItem('Microsoft Symbolic Link (CF_SYLK)', clipFormat);
          CF_DIF: AddItem('Software Arts'' Data Interchange Format (CF_DIF)', clipFormat);
          CF_TIFF: AddItem('Tagged-image file format (CF_TIFF)', clipFormat);
          CF_OEMTEXT: AddItem('Texte au format OEM (CF_OEMTEXT)', clipFormat);
          CF_DIB: AddItem('Device Independant Bitmap (CF_DIB)', clipFormat);
          CF_PALETTE: AddItem('Palette (CF_PALETTE)', clipFormat);
          CF_PENDATA: AddItem('Extension pour Microsoft Windows for Pen Computing (CF_PENDATA)', clipFormat);
          CF_RIFF: AddItem('Son au format RIFF (CF_RIFF)', clipFormat);
          CF_WAVE: AddItem('Son au format WAV (CF_WAVE)', clipFormat);
          CF_UNICODETEXT: AddItem('Texte au format Unicode (CF_UNICODETEXT)', clipFormat);
          CF_ENHMETAFILE: AddItem('Windows Enhanced Metafile (CF_ENHMETAFILE)', clipFormat);
          CF_HDROP: AddItem('Liste de fichiers "lachés" (CF_HDROP)', clipFormat);
          CF_LOCALE: AddItem('Information de langue sur le texte (CF_LOCALE)', clipFormat);
          CF_MAX: AddItem('CF_MAX', clipFormat);
     
          CF_OWNERDISPLAY: AddItem('Format spécifique (CF_OWNERDISPLAY)', clipFormat);
          CF_DSPTEXT: AddItem('Format texte privé (CF_DSPTEXT)', clipFormat);
          CF_DSPBITMAP: AddItem('Format d''image privé (CF_DSPBITMAP)', clipFormat);
          CF_DSPMETAFILEPICT: AddItem('Format de metafile privé (CF_DSPMETAFILEPICT)', clipFormat);
          CF_DSPENHMETAFILE: AddItem('Format de metafile amélioré privé (CF_DSPENHMETAFILE)', clipFormat);
          else
          // Cas spéciaux
          begin
            // Valeur privées (déclarées par une application)
            if ValueIsBetween(clipFormat, CF_PRIVATEFIRST, CF_PRIVATELAST) then
              AddItem(Format('Format privé spécifique à une application [%d]',
                [clipFormat]), clipFormat)
            // Objets GDI
            else if ValueIsBetween(clipFormat, CF_GDIOBJFIRST, CF_GDIOBJLAST) then
              AddItem(Format('Format spécifique au GDI [%d]',
                [clipFormat]), clipFormat)
            // Valeurs déclarées par une application
            else
              AddItem(Format('Format inconnu (%d n''est pas un format prédéfini)',
                [clipFormat]), clipFormat);
          end;
    Mais copier dans le presse papier depuis un dossier une photo bmp ou jpg avec les touches "ctrl + c", impossible de récupérer cette image.

    A moins que j'aie loupé quelque chôse.

    Y aurait t'il une solution.

    Merci d'avance,

    @+,

    Cincap

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 731
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 731
    Points : 15 136
    Points
    15 136
    Par défaut
    Citation Envoyé par cincap Voir le message
    Mais copier dans le presse papier depuis un dossier une photo bmp ou jpg avec les touches "ctrl + c", impossible de récupérer cette image.
    Dans ce cas-là, ce n'est pas une photo bmp ou jpg que tu copies, c'est un fichier, enfin, il me semble.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    salut ,

    Je pense qu'il te faut ouvrir l'image, en la chargeant du répertoire dans un Tbitmap ou autre , tu devrai ensuite pouvoir l'envoyer dans le presse papier.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    cela passe par CF_HDROP et tu récupères la liste des fichiers avec DragQueryFile voir cet exemple

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut En effet, c'est exact avec CF_HDROP
    @ exoseven, tu as raison c'est bien la le format qui est récupéré dans le mémo avec l'indication du chemin de cette image.

    Donc j'aurai plus facile de charger directement cette image avec un TopenPictureDialog et la référenciée dans ma liste ou dans mon Timage.

    Merci à vous tous de vos réponses.

    @+,

    Cincap

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Je reviens à ce topic afin de ne pas mourir idiot !
    Bonjour à toutes et à tous,

    Je récupère dans un Tmemo ou Tfilelistbox, le chemin de mon image copiée avec la combinaison "ctrl + c".

    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
     
    procedure TMainForm.BtestClick(Sender: TObject);
    var
      f: THandle;
      buffer: array [0..MAX_PATH] of Char;
      i, numFiles: Integer;
      Chemin : String;
     
    begin
      if not Clipboard.HasFormat(CF_HDROP) then Exit;
      Clipboard.Open;
      try
        f := Clipboard.GetAsHandle(CF_HDROP);
        if f <> 0 then
        begin
          numFiles := DragQueryFile(f, $FFFFFFFF, nil, 0);
          memo1.Clear;
          for i := 0 to numfiles - 1 do
          begin
            buffer[0] := #0;
            DragQueryFile(f, i, buffer, SizeOf(buffer));
            memo1.Lines.Add(buffer);
     
          end;
        end;
      finally
        Clipboard.Close;
      end;
    Ce chemin peut t'il être exploité pour afficher la photo dans un Tpicture ?

    Je ne vois pas comment malgré des nombreux essais.

    Merci de me venir en aide.

    @+,

    Cincap

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas utiliser la méthode LoadFromFile du TPicture en lui passant le chemin (complet) vers l'image ?

    D'ailleurs en parcourant l'aide du TPicture j'ai trouvé une autre méthode qui pourrait t'intéresser à résoudre ta problématique plus simplement qu'actuellement : LoadFromClipboardFormat.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut En fait,..
    @ Aka Guymelef, merci de ta réponse, en fait, le but est de copier une image dans le presse papier avec la combinaison du ctrl + c et non avec la touche printécran.

    J'avais vu la méthode LoadFromClipboardFormat, mais elle ne fonctionne pas avec une image copiée avec la touche ctrl + c (voir le 1er topic).

    A moins que je m'y prends mal vu les essais que j'ai déjà effectué.

    @+,

    Cincap

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Apparement, pas de solution.
    Voila, je cloture ce topic, pourtant si on avait pu extraire le chemin du TFilelistbox, Tlistbox ou Tedit et l'appliquer au Tpicture, cela devrait être ok puisque le chemin du fichier collé dans le pressepapier s'affiche dans ces composants.

    Merci pour les conseils,

    @+,

    Cincap

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 731
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 731
    Points : 15 136
    Points
    15 136
    Par défaut
    Citation Envoyé par cincap Voir le message
    pourtant si on avait pu extraire le chemin du TFilelistbox, Tlistbox ou Tedit et l'appliquer au Tpicture, cela devrait être ok puisque le chemin du fichier collé dans le pressepapier s'affiche dans ces composants.
    Ben, c'est quoi le problème, alors ?
    Pourquoi Picture1.LoadFromFile(chemin_du_fichier); ne fonctionnerait-il pas ?

    Aka Guymelef te l'a dit :
    Pourquoi ne pas utiliser la méthode LoadFromFile du TPicture en lui passant le chemin (complet) vers l'image ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Bon
    Bonjour à toutes et à tous,

    @ jipété, dans le cas d'un copie coller avec ctrl + c, l'image est considérée comme un objet alors que dans le cas d'un drag and drop ou d'un printscreen, l'image est considérée comme un bitmap.

    Partant de la, dans le cas du drag and drop, je fais ceci et cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Chemin := Pnlview.items[pnlview.ItemIndex];
    Im1.Picture.LoadFromFile(chemin);
    L'image s'affiche !

    Dans le cas du ctrl + c, j'obtiens le format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CF_HDROP: AddItem('Liste de fichiers "lachés" (CF_HDROP)', clipFormat);
    et l'indication du chemin complet dans le Tlistbox ou Tedit mais je ne sais pas afficher cette image de n'importe quelle façon (malgré le code qui fonctionne avec un drag and drop !), cette image est donc considérée comme un objet.

    C:\Data\Delphi\ClipboardViewer\Monimagetest.jpg
    Comme j'utilise le drag and drop ainsi que le choix avec un TopenPictureDialog, j'ai ce que je veux mais la raison de mon topic à pour but d'enrichier mes connaissances.

    Donc pas de problème si il n'y a pas de solution.

    @+,

    Cincap

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Et en suivant ce lien (non-testé) ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Même chôse
    @ Aka Guymelef, merci pour encore t'occuper de ce topic, le lien méne bien à une source correcte avec les mêmes formats par défaut de Windows qui se trouvent dans mon 1er topic.

    Après test de cette source et

    Dans le cas d'un printscreen, l'image s'affiche dans le Timage et est reconnue comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [CF_BITMAP,CF_DIB,"CF_MAX (Win 95)"]
    CF_BITMAP
    Par contre dans le cas d'un ctrl + c, l'image est reconnue comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [DataObject,"Shell IDList Array","CF_HDROP (Win 95)",DataObjectAttributes,"Preferred DropEffect","Shell Object Offsets",FileName,FileNameW,"Ole Private Data"]
    D'ou l'existance de mon 1er topic.

    Merci encore, il y a peut être une solution avec la récupération du chemin inscrit dans le Tedit ou TFilelistbox mais je ne pense pas puisque avec la commande ctrl + c, l'image est considérée comme un objet.

    @+,

    Cincap

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/08/2011, 16h56
  2. Réponses: 1
    Dernier message: 30/05/2007, 11h33
  3. Copie d'images dans le presse papier
    Par Tiwaz dans le forum C++Builder
    Réponses: 16
    Dernier message: 31/10/2006, 19h08
  4. [VB.NET]Copie dans le presse-papier
    Par San Soussy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 19/03/2004, 15h18
  5. Copier une image (jpeg) dans le presse papier
    Par benj63 dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/07/2002, 14h51

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