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

Langage Delphi Discussion :

[D2010] Comment copier une chaine dans le presse-papier ?


Sujet :

Langage Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 669
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 669
    Points : 7 018
    Points
    7 018
    Par défaut [D2010] Comment copier une chaine dans le presse-papier ?
    Avec Delphi 2010, comment copier une chaine dans le presse-papier ?

    J'ai trouvé ce code, mais je n'obtiens que la première lettre de la chaîne (p), dans le presse-papier.
    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
    43
    44
    var
       szValeur: String;
       hMem: HGLOBAL;
       pMem: PWideChar;
    begin
       szValeur := 'poiop';
     
       if not OpenClipboard(0) then
       begin
          ShowMessage(SysErrorMessage(GetLastError));
          Exit;
       end;
       try
          if not EmptyClipboard then
          begin
             ShowMessage(SysErrorMessage(GetLastError));
             Exit;
          end;
     
          hMem := GlobalAlloc(GMEM_MOVEABLE, (Length(szValeur) + 1) * SizeOf(WideChar));
          if hMem <> 0 then
          begin
             try
                pMem := GlobalLock(hMem);
     
                if pMem <> nil then
                begin
                   StrPCopy(pMem, szValeur);
                   GlobalUnlock(hMem);
     
                   if SetClipboardData(CF_TEXT, hMem) = 0 then
                      ShowMessage(SysErrorMessage(GetLastError));
                end
                else
                   ShowMessage(SysErrorMessage(GetLastError));
             finally
                GlobalFree(hMem);
             end;
          end
          else
             ShowMessage(SysErrorMessage(GetLastError));
       finally
          CloseClipboard;
       end;
    Je suppose que c'est un problème d'unicode, mais je ne vois pas ce que je dois faire.
    Une idée ?

    Question subsidiaire : Comment copier une très grande chaîne (plus de 255 caractères) dans le presse-papier ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 315
    Points
    13 315
    Par défaut
    Clipboard.AsText ?

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 669
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 669
    Points : 7 018
    Points
    7 018
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Clipboard.AsText ?
    Ca marche, mais pas pour les chaînes longue.
    Donc, ça ne convient pas.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 315
    Points
    13 315
    Par défaut
    Ça fonctionne sans soucis avec des chaînes longues

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     clipboard.AsText := StringOfChar('X', 300);
    Sinon, le format à utiliser en unicode est CF_UNICODETEXT.

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 669
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 669
    Points : 7 018
    Points
    7 018
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ça fonctionne sans soucis avec des chaînes longues

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     clipboard.AsText := StringOfChar('X', 300);
    Effectivement, ça fonctionne. Je m'y étais mal pris.

    Citation Envoyé par Andnotor Voir le message
    Sinon, le format à utiliser en unicode est CF_UNICODETEXT.
    Cette fois, ça marche aussi.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

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

Discussions similaires

  1. VB.NET - Copier une chaine dans le presse-papiers
    Par hibou28 dans le forum VB.NET
    Réponses: 4
    Dernier message: 19/11/2009, 22h38
  2. Réponses: 2
    Dernier message: 10/07/2008, 14h39
  3. [Système] Comment copier un fichier dans le presse papier ?
    Par le y@m's dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 19/09/2005, 12h03
  4. Réponses: 3
    Dernier message: 06/07/2005, 11h27
  5. Comment copier une image dans le presse papier.
    Par cprogil dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2003, 15h54

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