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 :

Cannot open Clipboard


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Par défaut Cannot open Clipboard
    Salut à tous ,

    Voila, mon appli, à l'appel d'une combinaison de touches, doit copier le contenu de la sélection en cours de l'appli au premier plan vers le clipboard.

    La procedure donne ça (de tête):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Procedure CopieClipboard;
    begin
      ...simule ctr+c
      if Clipboard.HasFormat(CF_TEXT) then
      Cliptxt:=clipboard.astext;
    end;
    En fait ça marche mais le problème est que je récupère de temps à autre un message d'erreur "Cannot open clipboard".

    j'ai d'abbord voulu empécher l'aprition du message avec un try except mais sans succès et de toutes manière je veux éviter de récuperer une variable vide.

    après un petit F1 sur Clipboard j'ai remanié mon code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Procedure CopieClipboard;
    begin
      ...simule ctr+c
      Clipboard.open;
      if Clipboard.HasFormat(CF_TEXT) then
      Cliptxt:=clipboard.astext;
      Clipboard.close;
    end;
    ...et la miracle ! plus de message d'erreur ....
    ... mais plus de valeur dans ma variable Cliptxt non plus !

    en fait le open et le close semblent rendre le clipbord windows inaccessible.
    Ce n'est donc pas la solution.

    Quelqu'un aurait-il une explication à ce message (cannot open clipboard) ?
    Est-ce une autre appli qui monopolise son utilisation ?
    Comment m'assurer son accès ?

    Merci d'avance

    ps: je précise que si j'utilise une similation de ctr+c c'est parceque l'appli qui contient les champs dont je veux récupérer le contenu ne me laisse pas utiliser les handles des ses champs (certains oui certains non...)
    mais ceci fera l'objet d'un autre post

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 120
    Par défaut
    Salut !

    T'as dû t'emméler les pinceaux qqpart, car les 2 tests ci-dessous fonctionnent, je viens de le vérifier :
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Cliptxt: string;
      Clipboard: TClipboard;
      MyHandle: THandle;
      TextPtr: PChar;
      MyString: string;
    begin
      ClipBoard := TClipBoard.Create;
      ClipBoard.Open;
      MyString := 'Blah!';
      // test 1
      {try
        MyHandle := Clipboard.GetAsHandle(CF_TEXT);
        TextPtr := GlobalLock(MyHandle);
        MyString := StrPas(TextPtr);
        GlobalUnlock(MyHandle);
      finally
        Clipboard.Close;
      end;
      ShowMessage(MyString);}
      // test 2
      if Clipboard.HasFormat(CF_TEXT) then begin
        Cliptxt := clipboard.astext;
        Clipboard.close;
        ShowMessage(Cliptxt);
      end;
      ClipBoard.Free;
    end;
    Pour faire les tests, un coup tu copies du texte dans le Presse-papiers, un coup tu copies autre chose (image, etc.)

    Mes 2 cts,
    --
    jp

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Par défaut
    Je te remercie pour ta réponse.
    Ton code m'a tout l'air de résoudre mon problème.

    Par contre j'avoue ne pas comprendre pourquoi il faut créer un objet Clipboard, alors que l'on veut accéder à un objet existant déja (le clipboard windows).

    Encore merci en tout cas

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Par défaut
    ok, je viens de tester tout ça à tête reposée
    Le test 1 marche à merveille.
    Par contre les test 2 marche à moitié : si je copie du text dans le clipboard avant execution, quand je clique sur le bouton il me retourne bien ce texte.
    Mais ensuite (l'appli tourne toujours) je vais copier une image, je clique : pas de texte retourné (c'est normal). Je recopie du texte dans le Clipboard et là : plus rien !!!
    Bizzard...

    Merci encore

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 120
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 120
    Par défaut
    Yep !
    Je viens de fouiner un peu, et j'ai trouvé ça,
    CF_TEXT - Text with each line ending with a CR-LF combination.
    , chez Zarko.
    Et je viens de tester la méthode 2 avec d'abord une image et pas de ShowMessage, normal, puis avec une ligne terminée par CR-LF et ça a fonctionné.
    Valà,
    --
    jp

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Par défaut
    Oui mais si je selectionne du texte au milieu d'une ligne, par expl dans l'éditeur de code, et que je le copie, il ne contient pas le CR-LF et pourtant ca marche...
    (suffit de faire Coller dans un editeur de texte, il n'y a pas de retour a la ligne)

    Je vais encore approfondir le sujet.
    Merci pour ton aide et pour le lien (je sens que ce site va me donner de la lecture !)

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

Discussions similaires

  1. Cannot open/read repomd.xml file for repository: fedora
    Par hic73 dans le forum RedHat / CentOS / Fedora
    Réponses: 3
    Dernier message: 13/09/2007, 17h20
  2. Cannot open connection JDBC
    Par lili2704 dans le forum Weblogic
    Réponses: 2
    Dernier message: 14/03/2007, 14h15
  3. [pch] "cannot open precompiled header"
    Par r0d dans le forum MFC
    Réponses: 6
    Dernier message: 10/01/2006, 15h46
  4. Cannot open include file : un grand classique
    Par mamok dans le forum MFC
    Réponses: 3
    Dernier message: 19/12/2005, 15h07

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