Principes de base du presse-papiers (couper / copier / coller)

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 était auparavant, mais le 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.

instagram viewer

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 le chaîne informations contenues dans la variable SomeStringData dans le Presse-papiers (en effaçant le texte qui s'y trouvait), nous utiliserons le code suivant:

les usages ClipBrd; ...
Presse-papiers. AsText: = SomeStringData_Variable; 

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

les usages ClipBrd; ...
SomeStringData_Variable: = Presse-papiers. AsText; 

Remarque: si nous voulons uniquement copier le texte de, disons, le composant Edit dans le Presse-papiers, nous n'avons pas à 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; Windows propose de nombreux autres formats de presse-papiers.

  • CF_TEXT - Texte avec chaque ligne se terminant par un CR-LF combinaison.
  • 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 Presse-papiers. 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:

 Presse-papiers. Assigner (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); commencersi Presse-papiers. HasFormat (CF_BITMAP) ensuite Image1.Picture. Bitmap. Attribuer (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 collage élément du menu. 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.

instagram story viewer