Accueil > Forum > > > > Clipboard avec Ctrl + C
Clipboard avec Ctrl + C
lundi 15 septembre 2008 à 08:28:29 |
Clipboard avec Ctrl + C

cincap
|
Bonjour à toutes et à tous, Je me suis documenté sur la façon d'utiliser le clipboard en général et pris connaissance de tous les formats. J'ai aussi examiné attentivement les sources excellentes de Mauricio et Caribensila à ce sujet. Dans l'ensemble, je n'ai pas trouvé la façon logique de copier une image d'un dossier avec la commande Ctrl + C et de l'afficher dans une fiche Delphi pour ensuite la sauver dans un autre dossier. Les formats de l'image avec la commande "PrintScreen" sont "CF_BITMAP, CF_DIB". Par contre le format de l'image avec la commande Ctrl + C est "CF_HDROP" et c'est tout juste si on peut récupérer le chemin dans un Tedit. Mais ce chemin est fictif puisque la commande "Imagetest.picture.loadfromfile(Tedit.text)" ne fonctionne pas ! Si dans le temps quelqu'un avait une idée cela me permettrait de boucler la compréhention sur le Clipboard. Merci, @+, Cincap mailto:
|
|
lundi 15 septembre 2008 à 11:53:34 |
Re : Clipboard avec Ctrl + C

Sat83
|
Je ne suis pas sûr d'avoir bien compris ta question... Pourquoi passe tu par le ClipBoard?
Un simple CopyFile ne ferait-il pas l'affaire?
|
|
lundi 15 septembre 2008 à 12:11:48 |
Re : Clipboard avec Ctrl + C

cincap
|
@ sat83, avec un simple copyfile ? La commande Ctrl + C permet d'être récupérée par un copyfile et affichée dans un Timage, je ne vois pas. En effet, l'application que je voudrai créée, est de pouvoir copier un fichier *.doc et l'afficher, copier et afficher un printscreen, et surtout n'importe ou avec l'exploreur, faire un ctrl + c sur l'image et l'afficher. Je vais regarder la méthode du copyfile. Merci, @+, Cincap mailto:
|
|
lundi 15 septembre 2008 à 14:56:26 |
Re : Clipboard avec Ctrl + C

rt15
|
Salut, "Mais ce chemin est fictif puisque la commande "Imagetest.picture.loadfromfile(Tedit.text)" ne fonctionne pas !"Ah bon ?
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private _pic: TPicture; end; var Form1: TForm1; implementation {$R *.dfm}procedure TForm1.FormCreate(Sender: TObject); var hClipBoard: Cardinal; // Handle sur les données du presse papier lpData: Pointer; // Pointeur sur les données du presse papier nCharCount: Cardinal; // Nombre de caractère du chemin lpPath: array of Char; // Le chemin image: TPicture; // L'image correspondant au chemin contenue dans le presse papier label close_clipboard, unlock_memory; begin _pic:= TPicture.Create; // Ouverture du presse papier if not OpenClipboard(Handle) then begin ShowMessage('Erreur lors de l''ouverture du presse papier'); Exit; end; // Récupération d'un pointeur sur les données hClipBoard:= GetClipboardData(CF_HDROP); if hClipBoard = 0 then begin ShowMessage('Pas de données CF_HDROP dans le presse papier'); goto close_clipboard; end; // Blocage de la mémoire du presse papier lpData:= GlobalLock(hClipBoard); if lpData = nil then begin ShowMessage('Echec du lock de la mémoire du presse papier'); goto close_clipboard; end; // Test du nombre de chemins dans le presse papier if DragQueryFile(Integer(lpData), High(Cardinal), nil, 0) <> 1 then begin ShowMessage('Il y a pas qu''un chemin dans la presse papier'); goto unlock_memory; end; // Récupération de la taille du chemin nCharCount:= DragQueryFile(Integer(lpData), 0, nil, 0); Inc(nCharCount); // Allocation d'un buffer de la taille du chemin SetLength(lpPath, nCharCount); // Récupération du chemin DragQueryFile(Integer(lpData), 0, PChar(lpPath), nCharCount); // Vérification de l'extension if LowerCase(ExtractFileExt(PChar(lpPath))) <> '.bmp' then begin ShowMessage('Seuls les fichiers d''extension .bmp sont supportés'); goto unlock_memory; end; // Chargement et mise en place de l'image _pic.LoadFromFile(PChar(lpPath)); image1.Picture:= _pic; unlock_memory: // Déblocage de la mémoire GlobalUnlock(hClipBoard); close_clipboard: // Fermeture du presse papier CloseClipboard; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeAndNil(_pic); end; end.
Pour le reste de tes doléances, j'ai rien compris je pense. Pour les .doc, simplement ouvrir le fichier en remplacement de l'affichage de l'image ? Afficher une image lorsque l'utilisateur presse ctrl + C dans l'explorateur ? Pour les copies d'écran, nombreuses sources sur ce site, que ce soit à base de simulation de pression de touche Impr écran, ou via BitBlt.
|
|
lundi 15 septembre 2008 à 18:56:10 |
Re : Clipboard avec Ctrl + C

cincap
|
@ rt15, merci pour ta solution, mais j'ai une erreur en compilant au niveau de la variable "close_clipboard, unlock_memory;"
Ceci étant dit, je me répéte, en ce qui concerne le printscreen c'est ok, en ce qui concerne un fichier Word copié dans Word avec Ctrl + C, c'est ok. Je parcours l'exploreur et je suis dans un dossier ou il y a des fichiers *.png, *.gif, *.jpg, *.bmp Je choisis mon image.png ou monimage.bmp, je fais Ctrl + C et j'aimerai quelle s'affiche dans le Timage qui est sur ma fiche.
Voila voilou.
@+,
Cincap
mailto:
|
|
mardi 16 septembre 2008 à 09:01:45 |
Re : Clipboard avec Ctrl + C

rt15
|
Réponse acceptée !
"close_clipboard, unlock_memory;"
Ce sont en fait des labels. En Delphi il faut déclarer les labels. Les labels sont utilisés pour désigner les destinations des sauts des goto (Voir l'aide de Delphi).
Les gotos ne sont pas du tout obligatoires ici : on pourrait mettre des ifs. Mais je trouves ça plus joli avec des goto (Cependant, certaines personnes détestent les gotos).
C'est bizarre que ton compilo ne connaisse pas les gotos... Quelle version de Delphi as-tu ?
Version sans les goto :
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private _pic: TPicture; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var hClipBoard: Cardinal; // Handle sur les données du presse papier lpData: Pointer; // Pointeur sur les données du presse papier nCharCount: Cardinal; // Nombre de caractère du chemin lpPath: array of Char; // Le chemin image: TPicture; // L'image correspondant au chemin contenue dans le presse papier begin _pic:= TPicture.Create; // Ouverture du presse papier if not OpenClipboard(Handle) then begin ShowMessage('Erreur lors de l''ouverture du presse papier'); Exit; end; // Récupération d'un pointeur sur les données hClipBoard:= GetClipboardData(CF_HDROP); if hClipBoard <> 0 then begin // Blocage de la mémoire du presse papier lpData:= GlobalLock(hClipBoard); if lpData <> nil then begin // Test du nombre de chemins dans le presse papier if DragQueryFile(Integer(lpData), High(Cardinal), nil, 0) = 1 then begin // Récupération de la taille du chemin nCharCount:= DragQueryFile(Integer(lpData), 0, nil, 0); Inc(nCharCount); // Allocation d'un buffer de la taille du chemin SetLength(lpPath, nCharCount); // Récupération du chemin DragQueryFile(Integer(lpData), 0, PChar(lpPath), nCharCount); // Vérification de l'extension if LowerCase(ExtractFileExt(PChar(lpPath))) = '.bmp' then begin // Chargement et mise en place de l'image _pic.LoadFromFile(PChar(lpPath)); image1.Picture:= _pic; GlobalUnlock(hClipBoard); CloseClipboard; end else begin ShowMessage('Seuls les fichiers d''extension .bmp sont supportés'); GlobalUnlock(hClipBoard); CloseClipboard; end; end else begin ShowMessage('Il y a pas qu''un chemin dans la presse papier'); GlobalUnlock(hClipBoard); CloseClipboard; end; end else begin ShowMessage('Echec du lock de la mémoire du presse papier'); CloseClipboard; end; end else begin ShowMessage('Pas de données CF_HDROP dans le presse papier'); CloseClipboard; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeAndNil(_pic); end; end.
|
|
mardi 16 septembre 2008 à 09:53:53 |
Re : Clipboard avec Ctrl + C

cincap
|
Bonjour à toutes et à tous, @ rt15, Chapeau mon ami, je pensais que ce ne serai pas possible sans devoir faire un copycoller de mon Tedit (qui affiche le chemin de l'image collée avec Ctrl + C) et puis de récupérer son chemin afin de charger mon Timage, avec cette solution illogique, peux importe le format d'image cela fonctionne aussi. Je bricole sous D6 et XP Je vois que ta solution se limite à l'extension *.bmp, si mon application permet d'afficher le .gif .png et .jpg .jpeg, y a t'il quelque chôse à changer à part dans la ligne : // Vérification de l'extension if LowerCase(ExtractFileExt(PChar(lpPath))) = '.bmp' then.... J'ai essayé ceci même en ajoutant virgule ou point virgule etc.. mais sans succès : // Vérification de l'extension if LowerCase(ExtractFileExt(PChar(lpPath))) = '.bmp .jpg .png .gif' then... Sinon merci déjà d'avoir répondu et d'avoir trouvé la solution asser rapidement. Bonne journée, @+, Cincap mailto:
|
|
mardi 16 septembre 2008 à 10:09:30 |
Re : Clipboard avec Ctrl + C
|
mardi 16 septembre 2008 à 12:09:54 |
Re : Clipboard avec Ctrl + C

cincap
|
@ rt15, Merci encore cela fonctionne correctement.
Tu as l'air surpris que j'ai D6 et que le 1er code ne fonctionne pas, mais je pense qu'il y a une erreur dans la déclaration de variable, je note tel que je le lis :
label close_clipboard, unlock_memory;
Curieux tu ne trouves pas ?
@+,
Cincap
mailto:
|
|
mardi 16 septembre 2008 à 13:13:22 |
Re : Clipboard avec Ctrl + C

rt15
|
Cette déclaration me paraît au contraire tout à fait correcte.
Encore une fois, ce ne sont pas des variables, mais des labels.
Si tu tapes label quelque part dans d6, que tu mets le curseur dessus et que tu presse F1, tu vas tomber sur la page qui détaille les labels et les gotos.
Notamment cette phrase :
Vous pouvez déclarer plusieurs labels à la fois : label label1, ..., labeln;
|
|
Cette discussion est classée dans : ctrl, image, commande, cf, clipboard
Répondre à ce message
Sujets en rapport avec ce message
Utilisation de CLIPBOARD [ par iocha ]
Bonjour à tous,Une petite question :Comment récupérer un texte enrichi (Saisi dans WORDPAD en RTF) dans un Richedit, en passant par le presse papier
Présence d'une image dans le clipboard [ par yvessimon ]
Bonjour,Avant de copier une image du clipboard vers un composant image comment tester la présence ou non d'une image dans le clipoard ?, et éventuelle
Une image dans une scene OpenGL [ par Laskar ]
Je cherche desespérement un exemple de la commande glDrawPixels d'OpenGL. Le but est de placer une image dans le fond de mon viewport. J'utilise le co
image dans un rich edit sans clipboard [ par chookoo ]
Voilà. Je veux placer une image dans un rich edit sans avoir a utiliser le clipboard si possible. Une autre solution est possible. Utiliser le clipboa
Copier une image ClipBoard / D6 [ par bshaka ]
Bonjour à tous,J'utilise le compo WebBrowser pour naviguer, dans même fenêtre, je sélectionne et copie une image : Form1.WebBrowser2.ExecWB (
DBImage et table Paradox / D6 [ par bshaka ]
Bonjour à Tous,Var Image : TJpegImage; PicMem : TMemoryStream; Pict : TPicture;begin PicMem := TMemoryStream.Create;
touches ctrl+c et ctrl+v ??? [ par PhilLU ]
Bonjour,Alors que j'utilise Delphi 7 pro (licence officielle) depuis sa sortie, j'ai subitement un problème:Les touches de raccourci utilisées dans l'
commande SendStr du composant ICS TWSocket [ par mimimou ]
Bonjour a tous, J essaye depuis quelques jours a tranferer un fichier .ini entre les composants ICS WSocket1 et WSocketThrdServer1 sur Delphi 2007, m
importer une image sur une forme [ par dunith ]
Bonjour j'ai dans mon fichier SRC, un répertoire Image bmp, où j'ai mes images: les leds orange, vert , rouge..... et ma question comment importer ce
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|