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
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 (
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
Treeview [ par stailer ]
Bonjour tout le monde !Alors voila, j'ai un problème de treeview :Donc j'ai un treeview avec un imagelist comportant 3 images. Quand je sélectionne un
Image+base de donnée [ par micfrip ]
Bon, j'ai une petite question toute bête... ( c'est probablement tellement bête que je ne l'ai trouvé nulle part ).J'ai une base de donnée Access qui
telechargement [ par Rapakooti ]
Je vous sollicite car en fait j'essaye depuis quelque de telecharger une image sur internet depuis le webbrowser de delphi mais pour mon programme mo
HELP !!! Fichiers Record [ par jatole ]
Slt,Je voudrais enregistrer dans un même fichier une image et des strings, integers, etc ... J'ai essayé de passer par un type record avec plusieurs c
BDGRID+image [ par micfrip ]
Bon, j'ai une petite question toute bête... ( c'est probablement tellement bête que je ne l'ai trouvé nulle part ).J'ai une base de donnée Access qui
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|