Avatar billede snorga Nybegynder
29. november 1999 - 00:42 Der er 14 kommentarer og
1 løsning

Drag and drop files

Jeg ved hvordan man modtager filer der er trækket fra windows (explorer) til et program, men hvordan gør man det modsatter? (trække en fil fra programmet til explorer)

"filen" kan være fra en listbox, så vidt jeg ved er de filer man trække jo bare filenavnene med fuld sti
Avatar billede gusse Nybegynder
29. november 1999 - 10:09 #1
interface

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

                    type
                      TForm1 = class(TForm)
                        Memo1: TMemo;
                        procedure FormCreate(Sender: TObject);
                      private
                        procedure WMDROPFILES(var Message: TWMDROPFILES);
                          message WM_DROPFILES;
                        { Private declarations }
                      public
                        { Public declarations }
                      end;

                    var
                      Form1: TForm1;

                    implementation

                    {$R *.DFM}

                    uses ShellApi;

                    procedure TForm1.FormCreate(Sender: TObject);
                    begin
                      {Let Windows know we accept dropped files}
                      DragAcceptFiles(Form1.Handle, True);
                    end;

                    procedure TForm1.WMDROPFILES(var Message: TWMDROPFILES);
                    var
                      NumFiles : longint;
                      i : longint;
                      buffer : array[0..255] of char;
                    begin
                      {How many files are being dropped}
                      NumFiles := DragQueryFile(Message.Drop,
                                                -1,
                                                nil,
                                                0);
                      {Accept the dropped files}
                      for i := 0 to (NumFiles - 1) do begin
                        DragQueryFile(Message.Drop,
                                      i,
                                      @buffer,
                                      sizeof(buffer));
                        Form1.Memo1.Lines.Add(buffer);
                      end;
                    end;

Avatar billede delphi Nybegynder
29. november 1999 - 14:02 #2
Øhh Gusse, var det ikke det modsatte der blev spurgt om?

NiP
Avatar billede gusse Nybegynder
29. november 1999 - 14:16 #3
Sørme Jo. Sorry. jeg var åbenbart ikke helt vågen :)
Avatar billede snorga Nybegynder
29. november 1999 - 16:36 #4
hehe, andre der har noget?
Avatar billede sjensen Nybegynder
09. december 1999 - 11:53 #5
Eftersom du ikke kan skifte på stifinderens aktive dir, mens du trækker filnavnet fra dit program, må du altså have positioneret stifinderen i det bibliotek hvor du vil have filen placeret.

Derfor er det principielt blot et spørgsmål om at læse den fil dit filnavn "peger" på og så skrive den til default disk/dir i ondrop eventen.

Dog kan det tænkes at dit program har default disk/dir sat til startdir for dit program og derfor ikke anderkender et skift i stifinderen, men det mener jeg faktisk at det gør. Det gør den ihvertfald hvis du har fileopen/filesave dialoger i dit program og du ikke specifikt sætter initialdir for hver af dem.

sjensen
Avatar billede sjensen Nybegynder
09. december 1999 - 12:31 #6
Jeg har lige testet mit svar og må beklage at det ikke virker som jeg forventede. Get CurrentDir vil altid give den pågældende process (dit program) aktuelle dir.

Så det må blive noget med at finde handle til explorer winduet, få process info for den handle og derefter bruge denne process currentdir. Denne kan så bruges til at skrive filen (eller flytte den med movefileex.

sjensen
Avatar billede snorga Nybegynder
14. december 1999 - 17:31 #7
Jeg vil ikke flytte filen selv. Jeg vil gerne have den til at opfører sig om explorer.

Eller så man f.eks kan trække filen fra mit program til delphi.. eller et andre program der modtager drag and drop files..



Avatar billede snorga Nybegynder
22. januar 2000 - 17:11 #8
Det må da være muligt.. Er der ingen der ved hvordan?

Hvis i har ACDC (billedeviewer), kan i måske bedre se hvad jeg mener. Her kan man trække filer fra ACDC til et explorer vindue, og den anden vej. (på samme måde som mellem to explorer vinduer)
Avatar billede snorga Nybegynder
03. april 2000 - 18:40 #9
Dødt spørgsmål?

Lukker snart hvis der ikke er nogen der har en idë til hvordan det kan gøres!
Avatar billede lrj Nybegynder
03. april 2000 - 21:59 #10
Ævser - kunne ellers være fedt at kunne :)
Avatar billede snorga Nybegynder
26. juli 2000 - 20:47 #11
Fundet et godt komponent på:
www.melander.dk
Så vidt jeg kan se, er det med source...
Avatar billede lrj Nybegynder
28. juli 2000 - 22:21 #12
Hoooh - virker det?
Avatar billede snorga Nybegynder
30. juli 2000 - 12:03 #13
Ja, ellers havde jeg nok ikke accepteret svaret :-)

Avatar billede lrj Nybegynder
30. juli 2000 - 13:36 #14
Hehe, nåja, det kunne jo godt være du var blevet træt af at vente :o)
Avatar billede snorga Nybegynder
30. juli 2000 - 19:58 #15
<g>

Nej det er ikke fordi jeg var træt af at vente, det virker fint :-)

Og det er ikke kun \"filer\" at man kan drag\'e og droppe.. også billedere og andre ting!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester