AJOUTER A PRESSE PAPIERS

4D - Documentation   Français   English   German   4e Dimension, Commandes par thèmes   4e Dimension, Liste alphabétique des commandes   4e Dimension, Constantes par thèmes   Retour   Précédent   Suivant

version 6.0


AJOUTER A PRESSE PAPIERS (typeDonnées; données)

ParamètreTypeDescription
typeDonnéesAlphaType de données (4 caractères)
donnéesBLOBDonnées à ajouter au Presse-papiers

Description

AJOUTER A PRESSE PAPIERS ajoute dans le Presse-papiers les données du type spécifié dans typeDonnées présentes dans le BLOB données.

ATTENTION : La valeur passée dans typeDonnées établit la distinction majuscules/minuscules, par exemple "abcd" n'est pas égal à "ABCD."

Si les données dans le BLOB sont correctement ajoutées au Presse-papiers, la variable OK prend la valeur 1. Sinon, la variable OK est mise à 0 et une erreur peut être générée.

Généralement, vous utilisez la commande AJOUTER A PRESSE PAPIERS pour placer plusieurs instances des mêmes données dans le Presse-papiers ou pour y ajouter des valeurs qui ne sont pas du type TEXT ou PICT. Pour ajouter de nouvelles données au Presse-papiers, il faut d'abord effacer le Presse-papiers à l'aide de la commande EFFACER PRESSE PAPIERS.

Si vous voulez effacer le Presse-papiers et y ajouter :

du texte, utilisez la commande ECRIRE TEXTE DANS PRESSE PAPIERS,

une image, utilisez la commande ECRIRE IMAGE DANS PRESSE PAPIERS.

Notez cependant que si un BLOB contient du texte ou une image, vous pouvez utiliser la commande AJOUTER A PRESSE PAPIERS pour y ajouter du texte ou une image.

Exemple

A l'aide des commandes du thème Presse-papiers et des BLOBs, vous pouvez écrire des méthodes de Couper/Copier/Coller pour gérer des données structurées au lieu d'une seule information. Dans l'exemple suivant, les deux méthodes projet écrire enregistrement dans Presse-papiers et lire enregistrement dans Presse-papiers vous permettent de traiter un enregistrement comme une information à copier dans le Presse-papiers.

      ` Méthode projet écrire enregistrement dans Presse-papiers
      ` écrire enregistrement dans Presse-papiers ( Numérique )
      ` écrire enregistrement dans Presse-papiers ( Numéro de table )

   C_ENTIER LONG($1;$vlChamp;$vlTypeChamp)
   C_POINTEUR($vpTable;$vpChamp)
   C_ALPHA(255;$vaNomDoc)
   C_TEXTE($vtDonnéesEnregistrement;$vtDonnéesChamp)
   C_BLOB($vxDonnéesEnregistrement)

      ` Effacer le Presse-papiers (il restera vide s'il n'y a pas d'enregistrement courant)
   EFFACER PRESSE PAPIERS 
      ` Obtenir un pointeur vers la table dont le numéro est passé en paramètre
   $vpTable:=Table($1)   
      ` S'il y a un enregistrement courant pour cette table
   Si ((Numero enregistrement($vpTable->)>=0) | (Nouvel enregistrement($vpTable->)))
         ` Initialiser la variable Texte qui contiendra l'image de texte de l'enregistrement
      $vtDonnéesEnregistrement:=""
         ` Pour chaque champ de l'enregistrement :
      Boucle ($vlChamp;1;Nombre de champs($1))
            ` Obtenir le type du champ
         LIRE PROPRIETES CHAMP($1;$vlChamp;$vlTypeChamp)
            ` Obtenir un pointeur vers le champ
         $vpChamp:=Champ($1;$vlChamp)
            ` Selon le type du champ, copier (ou non) ses données de façon appropriée
         Au cas ou 
            : (($vlTypeChamp=Champ alphanumérique  ) | ($vlTypeChamp=Texte ))
               $vtDonnéesChamp:=$vpChamp->
            : (($vlTypeChamp=Numérique ) | ($vlTypeChamp=Entier ) | ($vlTypeChamp=Entier long)
                                 | ($vlTypeChamp=Champ ou variable date )
                                 | ($vlTypeChamp=Champ ou variable heure ))
               $vtDonnéesChamp:=Chaine($vpChamp->)
            : ($vlTypeChamp=Booléen )
               $vtDonnéesChamp:=Chaine(Num($vpChamp->);"Oui;;Non")
         Sinon
               ` Passer et ignorer les autres types de champs
            $vtDonnéesChamp:=""  
         Fin de cas
            ` Accumuler les données sur le champ dans une variable texte qui stocke l'image 
            ` de texte de l'enregistrement
         $vtDonnéesEnregistrement:=$vtDonnéesEnregistrement+Nom du champ($1;$vlChamp)+ 
                                 ":"+Caractere(9)+$vtDonnéesChamp+CR
            ` Note : La méthode CR retourne Caractere(13) sous Mac OS et Caractere(13)+Caractere(10) 
            ` sous Windows
      Fin de boucle 
         ` Mettre l'image de texte de l'enregistrement dans le Presse-papiers
      ECRIRE TEXTE DANS PRESSE PAPIERS($vtDonnéesEnregistrement)  
         ` Nommez le fichier d'Album dans le Dossier temporaire
      $vaNomDoc:=Dossier temporaire+"Album"+Chaine(1+(Hasard%99))
         ` Supprimer le fichier d'Album s'il existe (il faut tester une erreur ici)
      SUPPRIMER DOCUMENT($vaNomDoc)
         ` Créez le fichier d'Album
      REGLER SERIE(10;$vaNomDoc)
         ` Envoyer l'enregistrement entier dans le Presse-papiers
      ENVOYER ENREGISTREMENT($vpTable->)
         ` Fermer le fichier d'Album
      REGLER SERIE(11)
         ` Charger le fichier d'Album dans un BLOB
      DOCUMENT VERS BLOB($vaNomDoc;$vxDonnéesEnregistrement)
         ` Nous n'avons plus besoin du fichier d'Album
      SUPPRIMER DOCUMENT($vaNomDoc)
         ` Ajouter l'image complète de l'enregistrement dans le Presse-papiers
         ` Note: nous utilisons le type de données "4Drc" de façon arbitraire
      AJOUTER A PRESSE PAPIERS("4Drc";$vxDonnéesEnregistrement)
         ` Le Presse-papiers contient :
         ` (1) Une image de texte de l'enregistrement (comme illustré dans les copies d'écran ci-dessous)
         ` (2) Une image entière de l'enregistrement (y compris les images, sous-tables et les champs de type
         ` BLOB)
   Fin de si

Lors de la saisie d'un enregistrement, si vous appliquez la méthode écrire enregistrement dans Presse-papiers à la table, le Presse-papiers contiendra le texte de l'enregistrement et également l'image entière de l'enregistrement.

Vous pouvez coller cette image de l'enregistrement dans un autre enregistrement, à l'aide de la méthode lire enregistrement dans Presse-papiers, qui est la suivante :

      ` Méthode lire enregistrement dans Presse-papiers
      ` lire enregistrement dans Presse-papiers ( Numéro )
      ` lire enregistrement dans Presse-papiers ( Numéro de table )
   C_ENTIER LONG($1;$vlChamp;$vlTypeChamp;$vlPosCR;$vlPosColon)
   C_POINTEUR($vpTable;$vpChamp)
   C_ALPHA(255;$vaNomDoc)
   C_BLOB($vxDonnéeesPressePapiers)
   C_TEXTE($vtDonnéeesPressePapiers;$vtDonnéesChamp)

      ` Obtenir un pointeur vers la table dont le numéro est passé en tant que paramètre
   $vpTable:=Table($1)
      ` S'il y a un enregistrement courant pour cette table
   Si ((Numero enregistrement($vpTable->)>=0) | (Nouvel enregistrement($vpTable->)))
      Au cas ou
            ` Est-ce que le Presse-papiers contient une image entière de l'enregistrement ?
         : (Tester presse papiers("4Drc")>0)
               ` Si oui, extraire le contenu du Presse-papiers
            LIRE PRESSE PAPIERS("4Drc";$vxDonnéesPressePapiers)
               ` Nommer le fichier d'Album dans le Dossier temporaire
            $vaNomDoc:=Dossier temporaire+"Album"+Chaine(1+(Hasard%99))  
               ` Supprimer le fichier d'Album s'il existe (il faut tester l'erreur ici)
            SUPPRIMER DOCUMENT($vaNomDoc)
               ` Enregistrer le BLOB dans le fichier d'Album
            BLOB VERS DOCUMENT($vaNomDoc;$vxDonnéesPressePapiers)
               ` Ouvrir le fichier d'Album
            REGLER SERIE(10;$vaNomDoc)
               ` Recevoir l'enregistrement entier du fichier d'Album   
            RECEVOIR ENREGISTREMENT($vpTable->)
               ` Fermer le fichier d'Album   
            REGLER SERIE(11)
               ` Nous n'avons plus besoin du fichier d'Album   
            SUPPRIMER DOCUMENT($vaNomDoc)   
               ` Est-ce que le Presse-papiers contient du texte ?
         : (Tester presse papiers("TEXT")>0)
               ` Extraire le texte du Presse-papiers        
            $vtDonnéesPressePapiers:=Lire texte dans presse papiers 
               ` Initialiser le numéro de champ à incrémenter
            $vlChamp:=0   
            Repeter 
                  ` Chercher la ligne de champ suivante dans le texte
               $vlPosCR:=Position(CR ;$vtDonnéesPressePapiers)
               Si ($vlPosCR>0)
                     ` Extraire la ligne de champ
                  $vtDonnéesChamp:=Sous chaine($vtDonnéesPressePapiers;1;$vlPosCR-1)
                     ` S'il y a un signe deux points ":"
                  $vlPosColon:=Position(":";$vtDonnéesChamp)
                  Si ($vlPosColon>0)
                        ` Récupérer seulement les données de champ (supprimer le nom du champ)
                     $vtDonnéesChamp:=Sous chaine($vtDonnéesChamp;$vlPosColon+2)
                  Fin de si
                     ` Incrémenter le numéro du champ 
                  $vlChamp:=$vlChamp+1
                     ` Le Presse-papiers peut contenir plus de données dont nous n'avons pas besoin...
                  Si ($vlChamp<=Nombre de champs($vpTable))
                        ` Obtenir le type du champ
                     LIRE PROPRIETES CHAMP($1;$vlChamp;$vlTypeChamp)
                        ` Obtenir un pointeur vers le champ
                     $vpChamp:=Champ($1;$vlChamp)
                        ` Selon le type du champ, copier (ou non) le texte d'une manière appropriée
                     Au cas ou 
                        : (($vlTypeChamp=Champ alphanumérique ) | ($vlTypeChamp=Texte ))
                           $vpChamp->:=$vtDonnéesChamp
                        : (($vlTypeChamp=Numérique ) | ($vlTypeChamp=Entier ) | ($vlTypeChamp
                                                =Entier long ))
                           $vpChamp->:=Num($vtDonnéesChamp)
                        : ($vlTypeChamp=Champ ou variable date )
                           $vpChamp->:=Date($vtDonnéesChamp)
                        : ($vlTypeChamp=Champ ou variable heure )
                           $vpChamp->:=Heure($vtDonnéesChamp)
                        : ($vlTypeChamp=Booléen )
                           $vpChamp->:=($vtDonnéesChamp="Oui")
                     Sinon 
                        ` Passer et ignorer les autres types de données 
                     Fin de cas
                  Sinon
                        ` Tous les champs ont été affectés, sortir de la boucle
                     $vtDonnéesPressePapiers:=""
                  Fin de si
                     ` Eliminer le texte qui vient d'être extrait 
                  $vtDonnéeesPressePapiers:=Sous chaine($vtDonnéeesPressePapiers; $vlPosCR
                                          +Longueur(CR ))
               Sinon 
                     ` Aucun délimiteur trouvé, sortir de la boucle
                  $vtDonnéesPressePapiers:=""
               Fin de si 
                  ` Répéter jusqu'à ce que nous avons des données
            Jusque (Longueur($vtDonnéesPressePapiers)=0)
         Sinon 
            ALERTE("Le Presse-papiers ne contient pas de données pouvant être collées en tant
                                           qu'enregistrement.")
      Fin de cas 
   Fin de si 

Référence

ECRIRE IMAGE DANS PRESSE PAPIERS, ECRIRE TEXTE DANS PRESSE PAPIERS, EFFACER PRESSE PAPIERS.

Variables système

Si les données dans le BLOB sont correctement ajoutées au Presse-papiers, la variable système OK prend la valeur 1. Sinon, OK est mise à 0 et une erreur peut être générée.

Gestion des erreurs

S'il n'y a pas assez de mémoire pour ajouter les données du BLOB dans le Presse-papiers, une erreur -108 est générée.


4D - Documentation   Français   English   German   4e Dimension, Commandes par thèmes   4e Dimension, Liste alphabétique des commandes   4e Dimension, Constantes par thèmes   Retour   Précédent   Suivant