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 :

Problème avec Clipboard.AsText


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut Problème avec Clipboard.AsText
    Bonjour,

    j'ai une application Delphi qui copie le contenu du presse-papier avec Clipboard.AsText
    En fait, le contenu du presse-paper provient de la copie d'une page WEB qui comprend du texte et des images.
    Bien évidemment, les images n'apparaissent pas dans ce qui est récupéré et d'ailleurs on n'en a pas besoin.
    Le texte récupéré comprend du texte proprement dit et des nombres (le tout sous forme d'une succession de Tchar).
    En fait, ce sont uniquement les nombres qui sont utilisés ensuite par le programme.
    En général, tout se passe bien et les nombres sont séparés et exploités comme prévu.
    Sauf dans quelques cas particuliers où un défaut apparait dans la situation suivante :
    Lorsque, sur la page WEB, on a un nombre, suivi d'une image, suivi d'un autre nombre, par exemple la séquence :
    ...275Image39501...
    on récupère ceci : ...27539501...
    au lieu de ...275 39501...
    Il n'y a pas de séparation entre les deux nombres dans la séquence de Tchar récupérée.
    Je ne vois pas comment séparer le premier nombre du second, ce qui provoque des défauts dans le traitement ultérieur.
    Que faire pour éviter ce défaut ?
    Merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 938
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    Il faudrait gérer le Clipboard à la main. Tu devrais certainement y trouver des données dans un format plus adapté à ta gestion que CF_TEXT (AsText).

  3. #3
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Il faudrait gérer le Clipboard à la main. Tu devrais certainement y trouver des données dans un format plus adapté à ta gestion que CF_TEXT (AsText).
    Que veux-tu dire par "gérer à la main" ?
    Je ne comprends pas bien ce que cela sous-entend.

    Aîe, aïe, aïe ! je vois se pointer des complications horribles pour traiter des situations particulières et râres, alors que tout marche très bien dans la majorité des cas !

    Pour mieux visualiser le problème, un exemple sélectionné en page jointe :
    Images attachées Images attachées  

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 938
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    Citation Envoyé par JJJJJ Voir le message
    Que veux-tu dire par "gérer à la main" ?
    Appels directs aux APIs : OpenClipboard, GetClipboardData, etc.

    Citation Envoyé par JJJJJ Voir le message
    Aîe, aïe, aïe ! je vois se pointer des complications horribles pour traiter des situations particulières et râres, alors que tout marche très bien dans la majorité des cas !
    Ce qui est vrai aujourd'hui ne le sera peut-être plus demain
    L'écriture dans le Clipboard n'a rien de standardisé. Si l'application qui y insère une info CF_TEXT décide maintenant de remplacer les images par un espace, plus tard elle pourrait préférer utiliser un "?".

    A titre d'exemple, le même texte avec la même sous-chaîne sélectionnée dans NotePad et Winword, Winword ajoute systématiquement un #13#10 à la fin du texte ! Chacun fait ce qui lui plaît Tu pourrais même avoir des différences entre navigateurs...

    Maintenant en sachant que le texte provient d'un navigateur et avec de la chance, il y a peut-être dans le clipboard une entrée formatée HTML facilement "parsable".

    TClipboard n'est pas adapté à cette utilisation. Il faut faire appel directement aux APIs :
    • Ouvrir le Clipboard (OpenClipboard),
    • Récupérer le nombre de format stocké (CountClipboardFormats)
    • Une boulce d'énumération (EnumClipboardFormats)
    • Récupération des données brutes (GetClipboardData)
    • Analyse
    • Fermeture du Clipboard (CloseClipboard).


    Beaucoup de conditionnel je sais, mais pas d'autre choix ! Autant voir maintenant s'il y a éventuellement une "normalisation" entre navigateur. Sinon tu vas revenir nous voir dans quelques mois (années) en nous disant : "ça marchait, ça marche plus"

    Edit:
    Après contrôle, tu peux utiliser TClipboard.GetAsHandle qui implémente GetClipboardData. (+FormatCount, Formats, etc.)

  5. #5
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Appels directs aux APIs : OpenClipboard, GetClipboardData, etc.



    Ce qui est vrai aujourd'hui ne le sera peut-être plus demain
    L'écriture dans le Clipboard n'a rien de standardisé. Si l'application qui y insère une info CF_TEXT décide maintenant de remplacer les images par un espace, plus tard elle pourrait préférer utiliser un "?".

    A titre d'exemple, le même texte avec la même sous-chaîne sélectionnée dans NotePad et Winword, Winword ajoute systématiquement un #13#10 à la fin du texte ! Chacun fait ce qui lui plaît Tu pourrais même avoir des différences entre navigateurs...

    Maintenant en sachant que le texte provient d'un navigateur et avec de la chance, il y a peut-être dans le clipboard une entrée formatée HTML facilement "parsable".

    TClipboard n'est pas adapté à cette utilisation. Il faut faire appel directement aux APIs :
    • Ouvrir le Clipboard (OpenClipboard),
    • Récupérer le nombre de format stocké (CountClipboardFormats)
    • Une boulce d'énumération (EnumClipboardFormats)
    • Récupération des données brutes (GetClipboardData)
    • Analyse
    • Fermeture du Clipboard (CloseClipboard).


    Beaucoup de conditionnel je sais, mais pas d'autre choix ! Autant voir maintenant s'il y a éventuellement une "normalisation" entre navigateur. Sinon tu vas revenir nous voir dans quelques mois (années) en nous disant : "ça marchait, ça marche plus"

    Edit:
    Après contrôle, tu peux utiliser TClipboard.GetAsHandle qui implémente GetClipboardData. (+FormatCount, Formats, etc.)
    Je vais réfléchir à tout cela.
    J'ai essayé de récupérer les données bruttes avec GetClipBoardData. Mais dans ce que j'obtiens, je n'ai toujours pas de séparation entre les nombres : Je ne vois pas de caractère spécial ou autre s'intercalant entre eux.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 938
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    As-tu énuméré tous les formats contenus ?

  7. #7
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    J'ai peut-être trouvé un procédé pas trop compliqué (c'est à dire à ma portée... qui n'est pas grande).
    Mais c'est du bricolage et cela ne me plait pas :
    -copier la page WEB dans le presse-papier,
    -ouvrir le logiciel wordpad.exe
    -coller le contenu du presse-papier dans wordpad,
    -copier la page wordpad dans le presse-papier (je me suis apperçu que wordpad élimine les images et introduit une séparation entre les chaines de caractères),
    -coller le contenu du presse-papier dans l'application Delphi.
    En le faisant à la main, ça marche.
    Il suffirait donc de programmer tout cela pour arriver au résultat, ce qui me semble possible sans trop de difficulté.
    Mais avant, je préfèrerais voir s'il n'y a pas une autre méthode qui ne soit pas du bricolage.

  8. #8
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par JJJJJ Voir le message
    Bonjour,

    j'ai une application Delphi qui copie le contenu du presse-papier avec Clipboard.AsText
    En fait, le contenu du presse-paper provient de la copie d'une page WEB qui comprend du texte et des images.
    Bien évidemment, les images n'apparaissent pas dans ce qui est récupéré et d'ailleurs on n'en a pas besoin.
    Le texte récupéré comprend du texte proprement dit et des nombres (le tout sous forme d'une succession de Tchar).
    En fait, ce sont uniquement les nombres qui sont utilisés ensuite par le programme.
    En général, tout se passe bien et les nombres sont séparés et exploités comme prévu.
    Sauf dans quelques cas particuliers où un défaut apparait dans la situation suivante :
    Lorsque, sur la page WEB, on a un nombre, suivi d'une image, suivi d'un autre nombre, par exemple la séquence :
    ...275Image39501...
    on récupère ceci : ...27539501...
    au lieu de ...275 39501...
    Il n'y a pas de séparation entre les deux nombres dans la séquence de Tchar récupérée.
    Je ne vois pas comment séparer le premier nombre du second, ce qui provoque des défauts dans le traitement ultérieur.
    Que faire pour éviter ce défaut ?
    Merci.
    les images ont-elles un attribut ALT ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    les images ont-elles un attribut ALT ?
    Comment fait-on pour savoir si elles ont, ou non, cet attribut ?
    Jusqu'à présent, je n'ai pas essayé de récupérer les images car elles ne me servent à rien.

    Si seulement on pouvait savoir à quels endroits du texte les images s'intercallent ...

  10. #10
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    les images ont-elles un attribut ALT ?
    Je ne sais pas répondre à cette question.
    Il n'y a pas de format CF_PICTURE dans le clipboard.
    Il contient les formats:
    CF_TEXT
    CF_UNICODETEXT
    CF_LOCALE
    CF_OEMTEXT
    et des formats que je n'identifie pas :
    49161
    49330
    49300
    49640
    49171

Discussions similaires

  1. Problème avec Clipboard.getData sous Windows 7
    Par TZRman dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 17/02/2012, 21h04
  2. Problème avec le ClipBoard (presse-papier)
    Par reeda dans le forum C#
    Réponses: 0
    Dernier message: 08/12/2009, 17h26
  3. Problème avec le Presse-papier (Clipboard)
    Par DPhBxl dans le forum Windows Vista
    Réponses: 5
    Dernier message: 27/11/2008, 01h42
  4. Problème avec Clipboard
    Par Jean-Marc Dudemaine dans le forum Débuter
    Réponses: 3
    Dernier message: 10/11/2007, 00h17
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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