Solved

Need way to accept JPG files when dragging from Google Chrome to Delphi Form

Posted on 2011-02-19
11
533 Views
Last Modified: 2012-05-11
Hi thanks for reading.

I have my delphi app on the left, and Google's Chrome browser on the right.

I simply need a program that, when i drag a JPG file from Google Chrome to my Delphi Form, I just want to save it in the C drive.

I can't seem to find out how to "accept files" from Google Chrome though.

I tried this method but with no luck

http://www.swissdelphicenter.ch/en/showcode.php?id=493

Anyone got any ideas?

Thanks!
0
Comment
Question by:bobbysdog
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 7
  • 4
11 Comments
 
LVL 14

Expert Comment

by:systan
ID: 34936769
Here you go;  tested code that accepts any image filename from any web browser.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    procedure LBWindowProc(var Message: TMessage);
    procedure AddFile(sFileName: string);

    procedure WMDROPFILES(var Msg: TMessage);
    message WM_DROPFILES;

  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses
  ShellAPI;

var
  OldLBWindowProc: TWndMethod;


procedure TForm1.AddFile(sFileName: string);
begin
  ListBox1.Items.Add(sFilename);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldLBWindowProc := ListBox1.WindowProc;
  ListBox1.WindowProc := LBWindowProc;
  DragAcceptFiles(ListBox1.Handle, True);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ListBox1.WindowProc := OldLBWindowProc;
  DragAcceptFiles(ListBox1.Handle, False);
end;

procedure TForm1.LBWindowProc(var Message: TMessage);
begin
  if Message.Msg = WM_DROPFILES then
    WMDROPFILES(Message);
  OldLBWindowProc(Message);
end;

procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
  c,i, nCount,iSize : integer;
  acFileName : Pchar;
  f:boolean;
begin
nCount := DragQueryFile( msg.WParam,
                           $FFFFFFFF,
                           acFileName,
                           255 );
for i := 0 to nCount-1 do
begin
iSize := DragQueryFile(Msg.wParam, i, nil, 0) + 1;
acFileName := StrAlloc(iSize);
DragQueryFile( msg.WParam, i,acFileName, isize );
AddFile(acFilename);
DragFinish( msg.WParam );
end;
end;

end.

Open in new window

0
 
LVL 14

Expert Comment

by:systan
ID: 34937360
Changes are here; So, you want to save the image to C drive?
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
  c,i, nCount,iSize : integer;
  acFileName : Pchar;
  f:boolean;
  fn:string;
begin
nCount := DragQueryFile( msg.WParam,
                           $FFFFFFFF,
                           acFileName,
                           255 );

for i := 0 to nCount-1 do
begin
iSize := DragQueryFile(Msg.wParam, i, nil, 0) + 1;
acFileName := StrAlloc(iSize);

DragQueryFile( msg.WParam, i,acFileName, isize );

if FileExists(acFileName) then
begin
fn:=Pchar(ExtractFilename(acFilename));
AddFile(Fn);
CopyFile( acFilename, Pchar('c:\' + fn), false);  //SAVING FILE STARTS HERE
end;


DragFinish( msg.WParam );
end;
end;

Open in new window

0
 

Author Comment

by:bobbysdog
ID: 34937715
Geez thanks Systan!!!

Freakin genius bits of code there.

It works awesome when i use mozilla and Internet Explorer.

The only thing is, it doesnt accept Images from Google Chrome

; (

Tears!

: )

I wonder why chrome is so weird compared to the others...
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 14

Expert Comment

by:systan
ID: 34937959
Ok;
Google Chrome does not keep files in windows temporary system folder,  it keeps files on thy own ways.
You can find it on;
Application Data of the default user logged in.
0
 

Author Comment

by:bobbysdog
ID: 34938113
Thanks so much.

It appears the problem is, i can't even get the program to 'accept' files from google chrome...

i uploaded the above code in a delphi program here

http://www.mediafire.com/?m4njdxy0hoylbck

p.s. i should also note that, when you drag a picture file (in IE or Mozilla) that is wrapped in an A TAG (e.g. when the picture is also a link), then it won't accept files.

Any help anyone can give is so much appreciated!

much thanks!
0
 
LVL 14

Expert Comment

by:systan
ID: 34938329
As I told you,  you can't get accept files from Google chrome because it stores files in different ways.
Instead storing to windows temp files, it stores to Document and Settings\Logged-in User\Application Data\Google\Chrome\

You can't really drag and drop images from Google Chrome to any location,  as I know?,  that is there
design.

If you really want to get the file-name from Google Chrome?, Click Copy Image, then paste it on your Application that do the imaging.   But if you really want to drop it?,  detect the browser if it is Google chrome or not,   then if it is, automate the procedure to paste filename to the BOX.

That's the list that I could help, Open a new question for detect web browser or;
just visit this link;
http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_26553357.html

You could also ask; automate a copy paste filename to the BOX, if possible.


Good Luck
0
 

Author Comment

by:bobbysdog
ID: 34938435
oh i think i see

>> "You can't really drag and drop images from Google Chrome to any location"

oh so eitherway, its not possible to receive files from Google Chrome?

hmm

what a bummer.

The windows desktop receives jpgs from google chrome. Is there now way to use that method?

but yeah maybe its not possible

photoshop for example receives files from IE and Mozilla but not chrome...


0
 
LVL 14

Accepted Solution

by:
systan earned 500 total points
ID: 34940010
>>>>"You can't really drag and drop images from Google Chrome to any location"
Except that has an imaging purpose.

>>The windows desktop receives jpgs from google chrome
>>>>If you really want to get the file-name from Google Chrome?, Click Copy Image, then paste it on your Application that do the imaging

Ok?

>>Is there now way to use that method?
No, and I've already told you about that, read again my comments.
http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_26833779.html#34938329
0
 
LVL 14

Expert Comment

by:systan
ID: 34963727
I have resolved the problem, it is possible.
0
 

Author Comment

by:bobbysdog
ID: 35111031
oh wait..

it IS possible now?

what was the solution...?
Thanks!
0
 
LVL 14

Expert Comment

by:systan
ID: 35113558
The answer;
http://melander.dk/


Thanks
Actually I'm not sure, but your the one who want's it, please try it.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question