Avatar billede Max Novice
14. april 2003 - 00:15 Der er 2 kommentarer og
1 løsning

ShellListView - endnu en gang.

Ok, denne her er lidt kryptisk, eller også har jeg stirret mig blind på den..

Meningen er at hente alle fil-extension fra en ShellListView ind i en ComboBox. En extension skal selvfølgelig kun optræde én gang, og mapper og drev (som jo bliver vist i en ShellListView) skal ikke tages i betragtning. Ok, hver gang indholdet af ShellListView'en ændres, kaldes denne procedure :
----------------------------------------------------------
procedure TFormNamer.changeQuickSelect;
var
  I,II : Integer;
  Seen : Boolean;
  Tmp  : String;
begin
  Tmp:='';
  ComboBoxQuickSelect.Clear;
  ComboBoxQuickSelect.Items.Add('..QuickSelect');
  for I:=0 to (ShellListViewFiles.Items.Count-1) do begin
    if not ShellListViewFiles.Folders[I].isFolder then begin
      Seen:=false;
      Tmp:=LowerCase(ExtractFileExt(ShellListViewFiles.Folders[I].DisplayName));
      if Tmp='' then Tmp:='.<no extension>';
      for II:=1 to I+1 do if Tmp=ComboBoxQuickSelect.Items[II] then Seen:=true;
      if not Seen then ComboBoxQuickSelect.Items.Add(Tmp);
    end; // if isFolder
  end; // for I
  ComboBoxQuickSelect.ItemIndex:=0;
end;
----------------------------------------------------------
Det ser tilsyneladende ud til at virke, mén.. Når jeg vælger en mappe der hedder "C:\Documents and Settings\Memnoch\Desktop\FlaskMpeg 0.78.39" som indeholder en fil "flaskmpeg_078_39.zip" og en mappe "flaskmpeg_078_39" bliver indholdet af min ComboBox kun :
"..QuickSelect"
og IKKE :
"..QuickSelect
.zip"
Som det var meningen. Hvorfor?

Håber I forstår spørgsmålet.

/Mnc
Avatar billede dkn Nybegynder
14. april 2003 - 01:10 #1
Ok det ser ud til at ShellListView også indeholder fejl!
ShellListViewFiles.Folders[I].isFolder virker ikke særligt godt.

Har ændret det til:
DirectoryExists(ShellListViewFiles.Folders[I].DisplayName)

som burde gøre det samme. Men koden virker nu.


procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Seen: Boolean;
  Tmp: string;
begin
  Tmp := '';
  ComboBoxQuickSelect.Clear;
  ComboBoxQuickSelect.Items.Add('..QuickSelect');

  for I := 0 to ShellListViewFiles.Items.Count - 1 do
    if not DirectoryExists(ShellListViewFiles.Folders[I].DisplayName) then
    begin
      Tmp := LowerCase(ExtractFileExt(ShellListViewFiles.Folders[I].DisplayName));

      if Tmp = '' then
        Tmp := '.<no extension>';

      if ComboBoxQuickSelect.Items.IndexOf(Tmp) <> -1 then
        Seen := true else
        ComboBoxQuickSelect.Items.Add(Tmp);
    end;
  ComboBoxQuickSelect.ItemIndex := 0;
end;
Avatar billede Max Novice
14. april 2003 - 01:28 #2
Tjah... Det virker da, men ikke særlig godt. Det er lidt langsom, og den får også problemer med at forstå 'mappen' "Denne Computer".
Jeg tænkte i første omgang på, at det måske kunne være et eller andet fuck up i mine iterationer..? Meen, så vidt jeg kan se, skulle de være ok. Kan det være noget lignende?

/Mnc
Avatar billede Max Novice
22. september 2005 - 17:55 #3
Lukker
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