Drag and drop d'une image d'une page web lancée depuis un webbroswer [Résolu]

chrisledeveloppeur 9 Messages postés lundi 6 novembre 2006Date d'inscription 1 février 2007 Dernière intervention - 21 déc. 2006 à 09:12 - Dernière réponse : chrisledeveloppeur 9 Messages postés lundi 6 novembre 2006Date d'inscription 1 février 2007 Dernière intervention
- 28 déc. 2006 à 11:17
Bonjour, comme le titre l'indique, je recherche une solution possible quand à un drag and drop d'une image contenue dans une page web  lancée dans un webbrowser vers un composant TImage. J'ai déjà trouvé une solution intermédiare qui est de répertorier toutes les images dans une liste d'images grace à l'OLE  puis de faire le drag and drop depuis cette liste à la place du webbrowser. Mais je souhaitrai le faire directement sur le webbrowser. Je sais que n'importe quel navigateur peut le faire. On glisse une image de la page web lancée vers n'importe quelle destination. Alors si dans la pratique on peut le faire, dans le développement aussi. Merci de votre aide si vous avez la solution. Je répéte ce qui m'intéresse : le drag and drop d'une image contenue dans une page web lancée depuis un webbrowser vers une composant TImage.
Chrisledeveloppeur.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 21 déc. 2006 à 20:43
3
Merci
Bonsoir,
Peut être une solution pour toi ici : http://delphi.about.com/od/adptips2005/qt/dropontimage.htm

Cordialement.

<hr />L'imbécile prétentieux est celui qui se croit plus intelligent que ceux qui sont aussi bêtes que lui.

Merci WhiteHippo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de WhiteHippo
Meilleure réponse
cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 23 déc. 2006 à 07:50
3
Merci
Bonjour,

Le lien de la solution de l'ami Whitehippo est la solution demandée à moins que je n'ai pas compris la demande.

unit Unit1;



interface



uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls;



type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
    originalPanelWindowProc : TWndMethod;
     procedure PanelWindowProc (var Msg : TMessage) ;
     procedure PanelImageDrop (var Msg : TWMDROPFILES) ;



  public
    { Déclarations publiques }
  end;



var
  Form1: TForm1;



implementation



{$R *.dfm}



uses ShellApi;





procedure TForm1.FormCreate(Sender: TObject);
begin
 originalPanelWindowProc : = Panel1.WindowProc;
   Panel1.WindowProc := PanelWindowProc;



   DragAcceptFiles(Panel1.Handle,true) ;



end;
procedure TForm1.PanelWindowProc(var Msg: TMessage) ;
begin
   if Msg.Msg = WM_DROPFILES then
     PanelImageDrop(TWMDROPFILES(Msg))
   else
     originalPanelWindowProc(Msg) ;
end; (*PanelWindowProc*)



procedure TForm1.PanelImageDrop(var Msg: TWMDROPFILES) ;
var
   numFiles : longInt;
   buffer : array[0..MAX_PATH] of char;
begin
   numFiles := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0) ;
   if numFiles > 1 then
   begin
     ShowMessage('You can drop only one image file at a time!') ;
   end
   else
   begin
     DragQueryFile(Msg.Drop, 0, @buffer, sizeof(buffer)) ;
     try
       Image1.Picture.LoadFromFile(buffer) ;
     except
       on EInvalidGraphic do ShowMessage('Unsupported image file, or not an image!') ;
     end;
   end;
end; (*PanelImageDrop*)



end.


En effet, ce code permet de copier une image présente sur un site mais aussi à partir de l'exploreur, sur une forme contenant un Timage.

Il ne faut pas oublier de mettre dans l'uses de la fiche au moins jpeg car c'est le format en général.

Et pour d'autres formats que le jpeg l'indiquer aussi (png, gif) avec le composant récepteur adéquat.

N. B. Sans code, il est possible de déplacer une image d'un site vers le bureau de Windows.

@+,

Cincap
[url]mailto:/url

Merci cincap 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cincap
Utilisateur anonyme - 21 déc. 2006 à 20:43
0
Merci
Salut,

Avec un peu de recherche on trouve en 2 min le source suivant :

Déposer deux boutons, un TWebbrowser et un TImage

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.google.fr');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
ShellDocObjectView: HWND;
InternetExplorerServer: HWND;
WebCanvas: TCanvas;
begin
ShellDocObjectView := FindWindowEx(WebBrowser1.Handle,
0,
'Shell DocObject View',
nil);
InternetExplorerServer := FindWindowEx(ShellDocObjectView,
0,
'Internet Explorer_Server',
nil);


WebCanvas := TCanvas.Create;
WebCanvas.Handle := GetDC(InternetExplorerServer);


InvalidateRect(InternetExplorerServer, nil, True);


WebCanvas.Lock;
Image1.Canvas.Lock;
try
Image1.Canvas.CopyRect(Rect(0, 0, Image1.Width, Image1.Height),
WebCanvas,
Rect(0, 0, WebBrowser1.Width,
WebBrowser1.Height));
finally
Image1.Canvas.Unlock;
WebCanvas.Unlock;
ReleaseDC(InternetExplorerServer, WebCanvas.Handle);
WebCanvas.Handle := 0;
WebCanvas.Free;
end;
end;

Il te suffit d'adapter ce code pour un drap&drop
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 21 déc. 2006 à 20:46
0
Merci
Désolé pour la mise en page : je reposte

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.google.fr');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
ShellDocObjectView: HWND;
InternetExplorerServer: HWND;
WebCanvas: TCanvas;
begin
ShellDocObjectView := FindWindowEx(WebBrowser1.Handle,
0,'shell DocObject View',nil);
InternetExplorerServer := FindWindowEx(ShellDocObjectView,
0,'Internet Explorer_Server',nil);
WebCanvas := TCanvas.Create;
WebCanvas.Handle := GetDC(InternetExplorerServer);
InvalidateRect(InternetExplorerServer, nil, True);
WebCanvas.Lock;
Image1.Canvas.Lock;
try
Image1.Canvas.CopyRect(Rect(0, 0, Image1.Width, Image1.Height),
WebCanvas,Rect(0, 0, WebBrowser1.Width,WebBrowser1.Height));
finally
Image1.Canvas.Unlock;
WebCanvas.Unlock;
ReleaseDC(InternetExplorerServer, WebCanvas.Handle);
WebCanvas.Handle := 0;
WebCanvas.Free;
end;
end;


Chercher ne veut pas dire une petite recherche de 5 min : Normalement on devrait poster uniquement apres plusieurs jours de recherche ;).
Commenter la réponse de Utilisateur anonyme
chrisledeveloppeur 9 Messages postés lundi 6 novembre 2006Date d'inscription 1 février 2007 Dernière intervention - 22 déc. 2006 à 09:34
0
Merci
Bonjour et merci de vos réponses. Je vous assure que j'ai mis pas mal de temps de recherches avant de songer à mon idée intermédiaire de liste d'images pris par l'ole du webbrowser; peut être que mes recherches ne possédaient pas les bons mots clés en dépis du grand nombre de mots clés que j'ai employé. Toutefois mon idée intermédiaire satisfait au final mon patron depuis hier, peu aprés mon post, car cela sécurise mieux le contenu de l'application pour des raison que je n'ai pas besoin de préciser ici. Mais, comme j'étais parti au début pour cette manipulation, je reste sur ma faim ^^.
Alors Francky, pour ta solution je l'ai adapté (peut être pas correctement mais si ceci est bien en employant les handle, çà ne devrai pas poser de problème), mais toutefois, elle ne solutionne pas mon problème (là j'ai peut être mal formulé mon problème), en effet, ta proposition fait une capture écran en image de tout le webbrowser, Or je recherche à glissser-déposer uniquement une image particulière de la page web chargée. Mais c'est peut être moi qui ai mal adapté mon code, je vais réanalyser le code de plus prés, voir si j'ai bien tout cerné.
Whitehyppo, ta solution se rapproche un peu plus de mon problème, en effet, elle permet de prendre une image, plus exactement il en prend son fichier si on le drop par exemple sur le bureau, ce qui est parfait. Mais il faut encore que je résoud le problème de la remettre dans le picture du Timage destinataire. Mais cela devrait se résoudre rapidement, je vois comment faire.
Encore merci à vous deux et je vous tiens au courant rapidement de la résolution complète du problème en bouclant ce topic.
Commenter la réponse de chrisledeveloppeur
chrisledeveloppeur 9 Messages postés lundi 6 novembre 2006Date d'inscription 1 février 2007 Dernière intervention - 28 déc. 2006 à 11:17
0
Merci
Bonjour Cincap^^. Cette solution proposée m'aide beaucoup merci, mais au final pour des raisons de changements de directives, elle ne me permet plus de récupérer des informations concernant l'image (directives nouvelles pour des besoin d'utilisation). Aussi, j'ai du rester sur l'OLE du webbrowser. Mais je valide cette solution car elle répond à ma question initiale. Merci à vous et à votre patience pour avoir montré du code source pour ma personne^^. Dans d'autres forums, les solutions qui s'en rapprochaient ne permettaient pas de remplir totalement ce que je cherchais. Peu importe, j'ai trouvé une solution alternative qui arrange encore mieux nos affaires dans la boite. Et aussi j'ajouterai que je serai aussi intéressé pour une opération de drag and drop d'un contenu de mail vers un container delphi. Il faut savoir que le logiciel de messagerie utilisé est outlook Express et que ce dernier ne permet pas l'automation. Cela est donc trés facheux pour la récupération des informations. Débutant en Delphi depuis même pas 2 mois, ma faible connaissance en ses ressources est insuffisante, en dépis des quelques applications pourtant pas simples que j'ai déjà développées. Et tous les composants intermédiaires permettant de le faire sont payants. Chose que nous préferons éviter. Cela n'est pas urgent dans l'immédiat mais nous sera peut être utile dans l'avenir. Je continue mes recherches mais si quelqu'un a déjà eu affaire sur ce sujet, sa réponse est la bienvenue^^.


PS: je ne créé pas de sujet supplémentaire à propos du problème de outlook express sauf avis contraire, bien entendu.
Commenter la réponse de chrisledeveloppeur

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.