Avatar billede smith1 Nybegynder
23. februar 2005 - 14:52 Der er 7 kommentarer og
2 løsninger

Drag'n Drop filer og mapper

Jeg bruger nedstående kode til at drag'n drop mapper over i min listbox og tilføjer alle file der ender på txt og txt2. Men det virker ikke når jeg drag'n dropper en enkel fil. Hvordan kan jeg få den til at virke med at drag'n drop en enkel fil og mappe(r)?

[Warning] drag.pas(7): Unit 'FileCtrl' is specific to a platform
[Warning] drag.pas(80): Symbol 'faHidden' is specific to a platform

^får nogle warnings, men virker stadig, hvorfor får jeg disse warnings?


type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AcceptFiles( var msg : TMessage );
      message WM_DROPFILES;
  end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles( Handle, True );
end;


procedure TForm1.AcceptFiles( var msg : TMessage );
const
  cnMaxFileNameLen = 255;
var
  i,
  nCount    : integer;
  files : array [0..cnMaxFileNameLen] of char;
  Ext : string;

  procedure ListDir(Path: String);
  var
    Sr: TSearchRec;
  begin
    if FindFirst(Path + '\*.*', faAnyFile and not faHidden, Sr) = 0 then
    begin
      repeat
        if (sr.Name <> '.') and (sr.Name <> '..') then
        begin
          if sr.Attr and faDirectory <> 0 then
          begin
            ListDir(Path + '\' + Sr.Name)
          end else begin
          Ext := ExtractFileExt(Path + '\' + Sr.Name);
          if (ext = '.txt') or (ext = '.txt2')
            begin
              FileList.AddItem(Sr.Name, nil);
            end;
          end;
      end;
      until FindNext(Sr) <> 0;
      FindClose(Sr);
    end;
  end;

begin
  // find out how many files we're accepting
  nCount := DragQueryFile( msg.WParam,
                          $FFFFFFFF,
                          files,
                          cnMaxFileNameLen );

  // query Windows one at a time for the file name
  for i := 0 to nCount-1 do
  begin
    DragQueryFile( msg.WParam, i,
                  files, cnMaxFileNameLen );
    ListDir(Files);
  end;
  DragFinish( msg.WParam );
end;
Avatar billede martinlind Nybegynder
23. februar 2005 - 15:59 #1
dinne warnings betyder at kode ikke kan porteres til kylix
Avatar billede smith1 Nybegynder
24. februar 2005 - 08:06 #2
nogle der kan hjælp mig med drag'n drop promlemmet?
Avatar billede smith1 Nybegynder
24. februar 2005 - 14:35 #3
er der ikke nogle der kan hjælpe?
Avatar billede borrisholt Novice
25. februar 2005 - 08:27 #4
prøv selv at fejlfinde .... Det vil dage dig 30 sekunder at finde fejlen hvis du ellers gad.

Sæt er break point ved ListDir og tryk F7 .....

Jens B
Avatar billede smith1 Nybegynder
25. februar 2005 - 16:05 #5
jeg har prøvet at sæt break point og gå den igennem, men kan ikke finde fejlen og jeg har brugt mere end 30 sekunder. Når jeg droper en enkel fil over så hopper den til slutningen af Listdir. hvis det er en mappe så går den listdir igennem og tilføjer dem. Jeg kan virkelig ikke se hvad fejlen er i min kode.
Avatar billede borrisholt Novice
26. februar 2005 - 09:50 #6
Hvad står der i Path når du dropper en fil og når du dropper en hel mappe ?

DET ville du vide hvis du brugte mere end 30 sekunder på at debugge.

Jens B
Avatar billede smith1 Nybegynder
26. februar 2005 - 15:46 #7
Du får 100 point da du kun gav mig et hint
Avatar billede smith1 Nybegynder
26. februar 2005 - 15:47 #8
lav lig et svar.
Avatar billede borrisholt Novice
26. februar 2005 - 16:26 #9
Svar
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