Opérations de base du presse-papiers (couper / copier / coller) dans Delphi

Le Presse-papiers Windows représente le conteneur de tout texte ou graphique qui est coupé, copié ou collé depuis ou vers une application. Cet article vous montrera comment utiliser l'objet TClipboard pour implémenter des fonctionnalités couper-copier-coller dans votre application Delphi.

Presse-papiers en général

Comme vous le savez probablement, le Presse-papiers ne peut contenir qu'une seule partie du même type de données pour couper, copier et coller à la fois. Si nous envoyons de nouvelles informations dans le même format au Presse-papiers, nous supprimons ce qui s'y trouvait auparavant, mais le contenu du Presse-papiers reste dans le Presse-papiers même après avoir collé ces contenus dans un autre programme..

TClipboard

Pour utiliser le Presse-papiers Windows dans nos applications, nous devons ajouter le Unité ClipBrd à la clause uses du projet, sauf lorsque nous limitons la coupe, la copie et le collage aux composants possédant déjà un support intégré pour les méthodes du Presse-papiers. Ces composants sont TEdit, TMemo, TOLEContainer, TDDEServerItem, TDBEdit, TDBImage et TDBMemo.

L'unité ClipBrd représente automatiquement un objet TClipboard appelé Clipboard. Nous utiliserons le CutToClipboard, Copier dans le presse-papier, PasteFromClipboard, Clair et HasFormat méthodes pour gérer les opérations du Presse-papiers et la manipulation de texte / graphique.

Envoyer et récupérer du texte

Afin d'envoyer du texte au Presse-papiers, la propriété AsText de l'objet Clipboard est utilisée. Si nous voulons, par exemple, envoyer les informations de chaîne contenues dans la variable SomeStringData au Presse-papiers (en effaçant le texte qui s'y trouvait), nous utiliserons le code suivant:

 les usages ClipBrd;  Clipboard.AsText: = SomeStringData_Variable; 

Pour récupérer les informations textuelles du presse-papiers, nous utiliserons

 les usages ClipBrd;  SomeStringData_Variable: = Clipboard.AsText; 

Remarque: si nous voulons uniquement copier le texte depuis, disons, le composant Edit dans le Presse-papiers, nous n'avons pas besoin d'inclure l'unité ClipBrd à la clause uses. La méthode CopyToClipboard de TEdit copie le texte sélectionné dans le contrôle d'édition dans le Presse-papiers au format CF_TEXT.

 procédure TForm1.Button2Click (expéditeur: TObject); commencer    // la ligne suivante sélectionnera // TOUT le texte dans le contrôle d'édition Edit1.SelectAll;    Edit1.CopyToClipboard; fin; 

Images du presse-papiers

Pour récupérer des images graphiques dans le Presse-papiers, Delphi doit savoir quel type d'image y est stocké. De même, pour transférer des images dans le presse-papiers, l'application doit indiquer au presse-papiers le type de graphiques qu'elle envoie. Certaines des valeurs possibles du paramètre Format suivent; il existe de nombreux autres formats de presse-papiers fournis par Windows.

  • CF_TEXT - Texte avec chaque ligne se terminant par une combinaison CR-LF.
  • CF_BITMAP - Un graphique bitmap Windows.
  • CF_METAFILEPICT - Un graphique de métafichier Windows.
  • CF_PICTURE - Un objet de type TPicture.
  • CF_OBJECT - Tout objet persistant.

La méthode HasFormat renvoie True si l'image dans le Presse-papiers a le bon format:

 si Clipboard.HasFormat (CF_METAFILEPICT) ensuite ShowMessage ('Clipboard has metafile'); 

Utilisez la méthode Assign pour envoyer (affecter) une image au Presse-papiers. Par exemple, le code suivant copie le bitmap d'un objet bitmap nommé MyBitmap dans le Presse-papiers:

 Clipboard.Assign (MyBitmap); 

En général, MyBitmap est un objet de type TGraphics, TBitmap, TMetafile ou TPicture.

Pour récupérer une image du Presse-papiers, nous devons: vérifier le format du contenu actuel du presse-papiers et utiliser la méthode Assign de l'objet cible:

 placez un bouton et un contrôle d'image sur form1 Avant d'exécuter ce code, appuyez sur la combinaison de touches Alt-PrintScreen les usages clipbrd;… procédure TForm1.Button1Click (expéditeur: TObject); commencer si Clipboard.HasFormat (CF_BITMAP) ensuite Image1.Picture.Bitmap.Assign (Presse-papiers); fin; 

Plus de contrôle du presse-papiers

Le presse-papiers stocke les informations dans plusieurs formats afin que nous puissions transférer des données entre applications en utilisant différents formats. Lors de la lecture des informations du presse-papiers avec la classe TClipboard de Delphi, nous sommes limités aux formats de presse-papiers standard: texte, images et métafichiers.

Supposons que vous travaillez entre deux applications Delphi différentes; comment définiriez-vous un format de presse-papiers personnalisé afin d'envoyer et de recevoir des données entre ces deux programmes? À des fins d'exploration, disons que vous essayez de coder un élément de menu Coller. Vous souhaitez qu'il soit désactivé lorsqu'il n'y a pas de texte dans le presse-papiers (par exemple).

Étant donné que l'ensemble du processus avec le presse-papiers se déroule en arrière-plan, il n'existe aucune méthode de classe TClipboard qui vous informe lorsqu'un changement dans le contenu du presse-papiers a eu lieu. L'idée est de brancher le système de notification du presse-papiers, afin que vous puissiez accéder aux événements et y répondre lorsque le presse-papiers change.

Pour profiter de plus de flexibilité et de fonctionnalités, il est nécessaire de traiter les notifications de modification du presse-papiers et les formats de presse-papiers personnalisés - écouter le presse-papiers -.