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

Lazarus Pascal Discussion :

TClipboard complètement bogué


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 412
    Billets dans le blog
    2
    Par défaut TClipboard complètement bogué
    Bjr à tous,

    Soit un TStringlist que je remplis de lignes

    Je veux le copier dans le presse-papiers: aucune erreur

    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
     
     
    procedure TCdrBRIC4Device.btnCopyClick(Sender: TObject);
    var
     LS: TStringList;
      s: Integer;
      MyClipBoard: TClipboard;
      EWE: String;            
    begin
      AfficherMessage('');
      LS := TStringList.Create;
      // remplissage de la liste
      //*****
     
      //*****
      MyClipBoard := TClipboard.Create(ctClipBoard);
      try
        try
          // Mettre le contenu de la liste dans le presse-papiers
          if (LS.Count = 0) then exit;
          MyClipBoard.Clear;
          EWE := format(' LS contient %d lignes', [LS.Count]); // Initialisation de l'en-tête à ma manière (je suis athéiste militant ...)
          for s := 0 to LS.Count - 1 do
          begin
            AfficherMessage(LS.Strings[S]); // affichage du contenu, c'est OK
            EWE += LS.Strings[s] + System.LineEnding;
          end;
          MyClipBoard.AsText := EWE;
     
        except
          on E: Exception do AfficherMessage(E.Message);
        end;
      finally
        LS.Free;
        FreeAndNil(MyClipBoard);
      end;
    end;
    Sur la cinquantaine de lignes contenue dans mon LS: TStringList, seules les deux ou trois premières sont copiées dans le presse papiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LS contient 46 lignes
    - Services
    -- 0: 00001800-0000-1000-8000-00805f9b34fb: 4 characteristics
    ---   0: UUID: 00002a00-0000-1000-8000-00805f9b34fb
    Incompréhensible et agaçant +++

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Ce code fonctionne parfaitement chez moi (CT 6.9 / compilé W10 32 bits) :
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
      S: string;
      MyClipBoard: TClipboard;
    begin
      MyClipBoard := TClipboard.Create(ctClipboard);
     
      Memo1.Clear;
      for i := 1 to 50 do
        Memo1.Lines.Add('Ligne ' + i.ToString);
     
      S := Format(' LS contient %d lignes', [Memo1.Lines.Count]) + System.LineEnding;
      for i := 0 to Memo1.Lines.Count-1 do
        S += Memo1.Lines[i] + System.LineEnding;
     
      MyClipboard.AsText := S;
     
      Memo2.Text := MyClipboard.AsText;
     
      MyClipBoard.Free;
    end;
    Les 51 lignes se copient bien et toutes dans l'EDI, NotePad, Word, Excel, le forum...
    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
    45
    46
    47
    48
    49
    50
    51
     LS contient 50 lignes
    Ligne 1
    Ligne 2
    Ligne 3
    Ligne 4
    Ligne 5
    Ligne 6
    Ligne 7
    Ligne 8
    Ligne 9
    Ligne 10
    Ligne 11
    Ligne 12
    Ligne 13
    Ligne 14
    Ligne 15
    Ligne 16
    Ligne 17
    Ligne 18
    Ligne 19
    Ligne 20
    Ligne 21
    Ligne 22
    Ligne 23
    Ligne 24
    Ligne 25
    Ligne 26
    Ligne 27
    Ligne 28
    Ligne 29
    Ligne 30
    Ligne 31
    Ligne 32
    Ligne 33
    Ligne 34
    Ligne 35
    Ligne 36
    Ligne 37
    Ligne 38
    Ligne 39
    Ligne 40
    Ligne 41
    Ligne 42
    Ligne 43
    Ligne 44
    Ligne 45
    Ligne 46
    Ligne 47
    Ligne 48
    Ligne 49
    Ligne 50
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre très actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 412
    Billets dans le blog
    2
    Par défaut
    Cà ne fonctionne pas chez moi

    Windows 10 64, Laz 64 bits 3.6.0

    Je prends la précaution de supprimer les caractères de code ASCII > 127 mais j'ai le même blocage:

    La sauvegarde de mon LS: TStringList dans un fichier se fait très bien

    Donc pour moi, le presse-papiers de W10 est foireux. Je ne vois pas d'autre explication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    -- Services
    --- 0: 00001800-0000-1000-8000-00805f9b34fb: 4 characteristics
    ----   0: UUID: 00002a00-0000-1000-8000-00805f9b34fb


    Ce qui est attendu:
    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
    45
    46
    47
     
    -- Services
    --- 0: 00001800-0000-1000-8000-00805f9b34fb: 4 characteristics
    ----   0: UUID: 00002a00-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: BRIC5_0344
    ----   1: UUID: 00002a01-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: **
    ----   2: UUID: 00002a04-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: @*P*****
    ----   3: UUID: 00002aa6-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: *
    --- 1: 00001801-0000-1000-8000-00805f9b34fb: 1 characteristics
    ----   0: UUID: 00002a05-0000-1000-8000-00805f9b34fb , Permissions: I...., 1 descriptors - Value: 
    ----- Descripteurs: 1
    ------ Desc: 0 - 00002902-0000-1000-8000-00805f9b34fb 
    --- 2: 0000180a-0000-1000-8000-00805f9b34fb: 7 characteristics
    ----   0: UUID: 00002a23-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: ********
    ----   1: UUID: 00002a24-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: BRIC4
    ----   2: UUID: 00002a25-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: 0344
    ----   3: UUID: 00002a26-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: BL652:v28.6.2.0
    ----   4: UUID: 00002a27-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: B
    ----   5: UUID: 00002a28-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: 7.50
    ----   6: UUID: 00002a29-0000-1000-8000-00805f9b34fb , Permissions: ..R.., 0 descriptors - Value: Team Poseidon LLC
    --- 3: 0000180f-0000-1000-8000-00805f9b34fb: 1 characteristics
    ----   0: UUID: 00002a19-0000-1000-8000-00805f9b34fb , Permissions: .NR.., 2 descriptors - Value: 1
    ----- Descripteurs: 2
    ------ Desc: 0 - 00002902-0000-1000-8000-00805f9b34fb 
    ------ Desc: 1 - 00002904-0000-1000-8000-00805f9b34fb 
    --- 4: 000058d0-0000-1000-8000-00805f9b34fb: 4 characteristics
    ----   0: UUID: 000058d1-0000-1000-8000-00805f9b34fb , Permissions: I...., 2 descriptors - Value: 
    ----- Descripteurs: 2
    ------ Desc: 0 - 00002901-0000-1000-8000-00805f9b34fb 
    ------ Desc: 1 - 00002902-0000-1000-8000-00805f9b34fb 
    ----   1: UUID: 000058d2-0000-1000-8000-00805f9b34fb , Permissions: I...., 2 descriptors - Value: 
    ----- Descripteurs: 2
    ------ Desc: 0 - 00002901-0000-1000-8000-00805f9b34fb 
    ------ Desc: 1 - 00002902-0000-1000-8000-00805f9b34fb 
    ----   2: UUID: 000058d3-0000-1000-8000-00805f9b34fb , Permissions: I...., 2 descriptors - Value: 
    ----- Descripteurs: 2
    ------ Desc: 0 - 00002901-0000-1000-8000-00805f9b34fb 
    ------ Desc: 1 - 00002902-0000-1000-8000-00805f9b34fb 
    ----   3: UUID: 000058d4-0000-1000-8000-00805f9b34fb , Permissions: .NR.Q, 2 descriptors - Value: 000000000000
    ----- Descripteurs: 2
    ------ Desc: 0 - 00002901-0000-1000-8000-00805f9b34fb 
    ------ Desc: 1 - 00002902-0000-1000-8000-00805f9b34fb 
    --- 5: 000058e0-0000-1000-8000-00805f9b34fb: 1 characteristics
    ----   0: UUID: 000058e1-0000-1000-8000-00805f9b34fb , Permissions: .NR.Q, 3 descriptors - Value: 000000000000
    ----- Descripteurs: 3
    ------ Desc: 0 - 00002900-0000-1000-8000-00805f9b34fb 
    ------ Desc: 1 - 00002901-0000-1000-8000-00805f9b34fb 
    ------ Desc: 2 - 00002902-0000-1000-8000-00805f9b34fb

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    En récupérant ce qui est attendu dans un fichier texte que je charge dans Memo1, le résultat est parfait sous W10 64 / CT 6.9 64 Bits (FreePascal 3.3.1) :
    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
    procedure TForm1.Button4Click(Sender: TObject);
    var
      i: integer;
      S: string;
      MyClipBoard: TClipboard;
    begin
      MyClipBoard := TClipboard.Create(ctClipboard);
     
      Memo1.Lines.LoadFromFile('clipboard.txt');
     
      S := Format(' LS contient %d lignes', [Memo1.Lines.Count]);
      for i := 0 to Memo1.Lines.Count-1 do
        S += System.LineEnding + Memo1.Lines[i];    
     
      MyClipboard.AsText := S;
     
      Memo2.Text := MyClipboard.AsText;
     
      MyClipBoard.Free;
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    As-tu essayé d'utiliser directement l'instance renvoyée par la fonction Clipboard au lieu d'en créer une ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre très actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 412
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    As-tu essayé d'utiliser directement l'instance renvoyée par la fonction Clipboard au lieu d'en créer une ?
    Oui. J'ai commencé par çà. Même problème

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    Salut,

    d'un vieux code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    uses Clipbrd;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if Clipboard.HasFormat(CF_TEXT) then Memo1.Lines.Add(Clipboard.AsText);
    end;
    La manip :
    1- copier du texte dans le presse-papier
    2- lancer le prog et cliquer sur le bouton

    Nom : test-clipboard.png
Affichages : 110
Taille : 24,8 Ko

    HTH,

  8. #8
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 637
    Par défaut
    Bonjour,

    Une autre différence est que JP CASSOU part d'une TStringList (récupération manuelle du texte global sans utiliser la propriété Text) et que tourlourou part d'un TMemo.

    Je ne rencontre pas non plus ce problème.

    Salutations

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    Salut

    Quand j'utilise le clipboard, je me mets une limite de taille pour décharger le buffer.

    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (Length(Buffer) > 60000) then
         begin
            ...
    Avec le temps, je me suis aperçu que les gros copier-coller sont très mal gérés dans Windows.

  10. #10
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 228
    Par défaut
    Hello,
    Limite de taille du Presse-papiers Windows
    Sur la base des résultats de recherche fournis, voici une réponse concise:
    Limite de Taille du Presse-papiers dans Windows:
    La limite de taille de l'historique du presse-papiers par défaut dans Windows 11 est 25 entrées copiées. Les éléments plus anciens, à moins qu'ils ne soient épinglés, sont supprimés automatiquement pour faire de la place aux nouveaux éléments du presse-papiers.
    La taille maximale d'un seul élément du presse-papiers est 4 MO (mégaoctets), formats de texte, HTML et Bitmap pris en charge.
    Il n'y a pas de limite stricte sur la taille totale de l'historique du presse-papiers, mais le système supprimera automatiquement les éléments plus anciens pour maintenir la limite par défaut de 25 entrées.

    Ami calmant, J.P

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Non il n'y pas de limite au presse-papier Windows. L'historique du presse-papier n'est pas LE presse-papier mais même avec lui je n'ai eu aucun problème à récupérer des chaînes de 15MO Clipboard.AsText := StringOfChar('A', 15000000);.

    Citation Envoyé par anapurna Voir le message
    avec le temps je me suis appercu que les gros copier coller sont tres mal gerer dans windows
    Plutôt un problème de temps comme expliqué par Raymond Chen.

Discussions similaires

  1. Drole de bogue avec Delphi?
    Par Jayceblaster dans le forum Delphi
    Réponses: 8
    Dernier message: 24/08/2006, 14h23
  2. De l'aide SVP un petit bogue de script une reconnaissance confuse
    Par richard77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/05/2006, 14h03
  3. [PhpPgAdmin] c'est lui qui bogue ou c'est moi ?
    Par Chauve souris dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 28/11/2005, 16h30
  4. Réponses: 4
    Dernier message: 18/04/2005, 09h06
  5. [regex][string] replaceAll bogué ?
    Par 7eme dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/11/2003, 16h36

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