Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Réflexions informatiques

Récupérer une sélection HTML du presse-papiers

19/02/2009

Il faut savoir que le presse-papiers est constitué, pour chaque élément copié par le raccourci Control+C, d'une à plusieurs versions de cet élément sous différents formats.


Cela permet de copier un texte HTML et de le coller dans le bloc-notes au format texte, de copier une image d'un logiciel à un autre... Le logiciel destination doit gérer au moins l'un des formats copiés dans le presse-papiers et choisit celui qu'il désire utiliser.

On peut voir ce genre de chose dans Word, qui permet de faire un coller (au format texte), mais aussi, avec la commande collage spécial, d'insérer le texte à un autre format, dépendant de l'application qui a effectuée le copié.

En C++, il est possible de récupérer la sélection copiée à l'aide du code suivant :

// Enregistrement du type HTML, non standard en C++
UINT CF_HTML=RegisterClipboardFormat("HTML Format");

if (Clipboard()->HasFormat(CF_HTML))
    {
    Clipboard()->Open();
    HANDLE hMemHandle;
    GlobalUnlock (&hMemHandle);

    // Renvoie les données du presse-papiers au format demandé
    hMemHandle = GetClipboardData(CF_HTML);
    AnsiString DebutFrag="StartFragment:";
    AnsiString FinFrag="EndFragment:";
    if (hMemHandle!=NULL)
        {
        LPVOID lpData = GlobalLock(hMemHandle);
        if (lpData!=NULL)
            {
            int nClipSize = lstrlen( (LPCSTR)lpData);
            AnsiString sData = ChaineLongueur(nClipSize + 10, 0);
            CopyMemory(sData.c_str(), lpData, nClipSize);

            // StartFragment et EndFragment doivent apparaîtrent dans la description
            int nStartFrag=sData.Pos(DebutFrag);
            int nEndFrag=sData.Pos(FinFrag);

            if (nStartFrag>0 && nEndFrag>0)
                {
                // Essaye de convertir les zones début/fin en nombre
                if (!TryStrToInt(sData.SubString(nStartFrag + DebutFrag.Length(), 8), nStartFrag))
                    nStartFrag=0;
                if (!TryStrToInt(sData.SubString(nEndFrag + FinFrag.Length(), 8), nEndFrag))
                    nEndFrag=0;

                if (nStartFrag>0 && nEndFrag>0)
                    ShowMessage(sData.SubString( nStartFrag + 1, (nEndFrag - nStartFrag)));
                }
                }
            }
    Clipboard()->Close();
    }
Dernière modification le 09/03/2019 - Quillevere.net

Rechercher sur le site

rss RSS info Informations