Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 632
  • Last Modified:

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

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
bobbysdog
Asked:
bobbysdog
  • 7
  • 4
1 Solution
 
systanCommented:
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
 
systanCommented:
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
 
bobbysdogAuthor Commented:
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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
systanCommented:
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
 
bobbysdogAuthor Commented:
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
 
systanCommented:
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
 
bobbysdogAuthor Commented:
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
 
systanCommented:
>>>>"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
 
systanCommented:
I have resolved the problem, it is possible.
0
 
bobbysdogAuthor Commented:
oh wait..

it IS possible now?

what was the solution...?
Thanks!
0
 
systanCommented:
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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 7
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now