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.