Solved

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

Posted on 2011-02-19
11
493 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
  • 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
 
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
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
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

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Suggested Solutions

Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

762 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

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now