Avatar billede psycosoft-funware Nybegynder
07. april 2006 - 20:53 Der er 18 kommentarer og
1 løsning

drag/drop fra explorer

hej experter

jeg sidder og roder med en komponent der skulle gøre livet nemmere med drag n' drop fra explorer;
jeg hat en TListview sof filbeholder, i komponentet vælger jeg at alle filer skal lande i listview, fint nok... jeg har opbygget en procedure der tilføjer filerne + diverse info, men jeg har brug for at kontrollere hvilken filtyper der bliver dropped på listview og derefter tillade nogle bestemte filtyper at blive tilføjet.
jeg har lavet denne kode men under runtime giver den en "list index out of bounds"

procedure TMainForm.ExDragDrop1Dropped(Sender: TObject;
  ItemsCount: Integer);
var
  i: integer;
begin
  for i := 0  to ExDragDrop1.Items.Count  do
      if (ExtractFileExt(ExDragDrop1.Items[i]) = '.mp3') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.wav') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.fla') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.flac') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.ogg') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.ape') then
        begin
            FillListview(ExDragDrop1.Items);
        end
        else
            MessageBeep(mb_IconError);
            MessageDlg(ExtractFileExt(ExDragDrop1.Items[i]) + ' is not a supported filetypre!', mtError, [mbOK], 0);
            Exit;
end;

ExDragDrop1.Items er af typen TStrings, det er også FillListview vil have.

håber i kan hjælpe mig ud.

/FunteX! :-)
Avatar billede kroning Nybegynder
07. april 2006 - 20:57 #1
mangler du ikke en -1, dvs.:
for i:=0 to ExDragDrop1.Items.Count-1 do
Avatar billede psycosoft-funware Nybegynder
07. april 2006 - 21:14 #2
det hjalp ikke...
men fik lige set i messages:
[Warning] uMain.pas(182): FOR-Loop variable 'i' may be undefined after loop
Avatar billede kroning Nybegynder
07. april 2006 - 21:29 #3
Du mangler også en end efter Exit.
Avatar billede kroning Nybegynder
07. april 2006 - 21:29 #4
og en begin efter else
Avatar billede psycosoft-funware Nybegynder
07. april 2006 - 21:37 #5
gee, hvor har jeg sovet i timen.... det var lige det ekstra begin -end der skulle til, nu virker koden som det skal :D, takker mange gane for hjælpen kroning, smid et svar og pointne er dine :D

/FunteX! :-)
Avatar billede psycosoft-funware Nybegynder
07. april 2006 - 21:38 #6
procedure TMainForm.ExDragDrop1Dropped(Sender: TObject;
  ItemsCount: Integer);
var
  i: integer;
begin
  for i := 0  to ExDragDrop1.Items.Count-1  do
      if (ExtractFileExt(ExDragDrop1.Items[i]) = '.mp3') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.wav') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.fla') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.flac') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.ogg') or
        (ExtractFileExt(ExDragDrop1.Items[i]) = '.ape') then
        begin
            FillListview(ExDragDrop1.Items);
        end
        else
          begin
            MessageBeep(mb_IconError);
            MessageDlg(ExtractFileExt(ExDragDrop1.Items[i]) + ' is not a supported filetype!', mtError, [mbOK], 0);
            Exit;
          end;
end;

//Denne kode virker :D
Avatar billede kroning Nybegynder
07. april 2006 - 21:41 #7
ok, :), men fejlen du fik i første omgang var vel pga. det manglende -1 eller hur?
Avatar billede psycosoft-funware Nybegynder
07. april 2006 - 21:46 #8
tror det er noget i den stil... men nu er der opstået et andet lille problem: hvis jeg fx markere 3 .ogg filer og en .jpg fil og dropper dem på listview, så kommer den med en meddelse om at .jpg ikke er understøttet, så springer den ud af koden og ikke tilføjer de 3 .ogg filer (fint det var Exit;, væk med det...) men når exit er væk kommer den med meddelelsen men når brugeren klikker ok til fejlen, tilføjer den både .jpg og .ogg filerne + at de ligger dobbelt på listen så i stedet for 3 ogg filer ligger der 6...

det undre mig meget...

/FunteX! :-)
Avatar billede pidgeot Nybegynder
07. april 2006 - 23:20 #9
Mon ikke det skal være FillListview(ExDragDrop1.Items[i]);? Du skal vel kun have dem der er gode nok, så du skal kun sende dem du har bekræftet til din metode.
Avatar billede kroning Nybegynder
07. april 2006 - 23:47 #10
Skal den ikke tilføje de 3 .ogg filer og så kun komme med fejl om at .jpg filen ikke er understøttet? Kan det ikke ordnes ved at gøre som pidgeot skriver og så også fjerne din Exit i sidste linie.
Avatar billede psycosoft-funware Nybegynder
08. april 2006 - 09:48 #11
hvis jeg tilføjer FillListview(ExDragDrop1.Items[i]), får jeg  bare at vide fra compileren at der er incompatible types 'TString' and 'TStrings' :-S...

har fjernet exit...

/FunteX! :-)
Avatar billede kroning Nybegynder
08. april 2006 - 10:26 #12
FillListview er det en du selv har lavet?
Avatar billede kroning Nybegynder
08. april 2006 - 10:26 #13
Eller hvor kommer den fra?
Avatar billede psycosoft-funware Nybegynder
08. april 2006 - 10:36 #14
FillListview er en jeg selv har lavet:

procedure TMainForm.FillListView(Files : TStrings);
var
    i : integer;
    s: String;
begin
    for i := 0 to Files.Count-1 do
    with MediaBox.Items.Add do
    begin
        Caption := Files[i];
        s := Caption;
        Subitems.Add(ChangeFileExt(s, '.kxq'));
        SubItems.Add(GetFileSize(Caption));
        Subitems.Add(ExtractFileExt(Caption));
        SubItems.Add(GetBitrate(Caption);
end;
end;
Avatar billede kroning Nybegynder
08. april 2006 - 10:44 #15
Hvad så med?

procedure TForm1.FillListView(Files : String);
var
    i : integer;
    s: String;
begin
    with MediaBox.Items.Add do
    begin
        Caption := Files;
    s := Caption;
    Subitems.Add(ChangeFileExt(s, '.kxq'));
    SubItems.Add(GetFileSize(Caption));
    Subitems.Add(ExtractFileExt(Caption));
    SubItems.Add(GetBitrate(Caption);
    end;
end;
Avatar billede psycosoft-funware Nybegynder
08. april 2006 - 11:05 #16
så virker koden til drag/drop, men efter som det er den samme kode jeg brugte til min OpenDialog virker det ikke efter hensigten (i opendialog) :(..... jeg løste problemet ved at lave en speciel procedure til OpenDialog... :-)

tak for hjæpen alle sammen :D

/FunteX! :-)
Avatar billede kroning Nybegynder
08. april 2006 - 11:30 #17
Hvad med en procedure der kan klare begge muligheder:

procedure TMainForm.FillListView(Files : TStrings; OnlyOne : integer = -1);
var
    i : integer;

procedure Start(No : integer);
var
    s: String;
begin
    with MediaBox.Items.Add do
    begin
        Caption := Files[No];
        s := Caption;
        Subitems.Add(ChangeFileExt(s, '.kxq'));
        SubItems.Add(GetFileSize(Caption));
        Subitems.Add(ExtractFileExt(Caption));
        SubItems.Add(GetBitrate(Caption);
  end;
end;

begin
    if OnLyOne=-1 then
    for i := 0 to Files.Count-1 do
        start(i)
    else
        start(OnlyOne);
end;
Avatar billede psycosoft-funware Nybegynder
08. april 2006 - 20:25 #18
tusind tak for hjælpen kroning :D

/FunteX! :-)
Avatar billede kroning Nybegynder
08. april 2006 - 20:59 #19
Glad for at kunne hjælpe :-)
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