29. juni 2000 - 20:19Der er
12 kommentarer og 1 løsning
Listview af filer på c:\
Tjaa, så er jeg begyndt at forsøge mig som programør igen!!
Jeg har et lille problem med listview. Jeg har fundet en stump kode her på eksperten som skulde kunde vise jpg filer. Med en lille smugle held fik jeg den så til at vise alle filer på c:\ når jeg trykker på en knap. Det er sådan set også godt nok, MEN. Jeg ville nu gerne have efternavnet til at stå i en celle for sig, som hedder Type, og filstørelsen til at stå i en anden celle der hedder Størelse.
Desuden sker der det, at hver gang jeg trykker på knappen bliver c:\ tilføjet igen. Dvs hvis jeg trykker på knappen 2 gange, kommer filerne på c:\ til at stå 2 gange i listview.
Der er ikke noget problem at sende hele koden via e-mail,(Ca 8 KB uden exe fil) hvis det vil hjælpe jer delphi eksperter..
-- Koden -- procedure TForm1.Action1Execute(Sender: TObject); Var Fsr : TSearchRec; SogSti : String; ListItem: TListItem; Sti : String; Begin Sti := ('c:\'); If Sti[Length(Sti)] = '\' then else Sti := Sti + '\'; If LastDelimiter('g',Sti) > 0 then else SogSti := Sti + '*.*';
If FindFirst(SogSti, faAnyFile, Fsr) = 0 then If FSr.Attr <> faDirectory then Begin ListItem := Lokal.Items.Add; ListItem.Caption := Fsr.Name; end;
While FindNext(Fsr) = 0 do If FSr.Attr <> faDirectory then Begin ListItem := Lokal.Items.Add; ListItem.Caption := Fsr.Name; end; FindClose(Fsr); end; procedure TForm1.Button4Click(Sender: TObject); begin Action1.Execute end;
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
Start med at tilføje denne linie inden du tilføjer alle filerne
ListView1.Items.Clear;
Det sletter alle items først.
Og til dit andet problem, så skal du bruge SubItems. Det hele fremgår af eksemplet herunder, som er en udbygning af din oprindelige kode...
-- Koden -- procedure TForm1.Action1Execute(Sender: TObject); Var Fsr : TSearchRec; SogSti : String; ListItem: TListItem; Sti : String; Begin Sti := ('c:\'); If Sti[Length(Sti)] = '\' then else Sti := Sti + '\'; If LastDelimiter('g',Sti) > 0 then else SogSti := Sti + '*.*';
If FindFirst(SogSti, faAnyFile, Fsr) = 0 then If FSr.Attr <> faDirectory then Begin ListItem := Lokal.Items.Add; ListItem.Caption := Fsr.Name; ListItem.SubItems.Add(ExtractFileExt(Fsr.Name)); //Denne linie tilføjer efternavnet i den næste celle. ListItem.SubItems.Add(IntToStr(Fsr.Size)); end;
While FindNext(Fsr) = 0 do If FSr.Attr <> faDirectory then Begin ListItem := Lokal.Items.Add; ListItem.Caption := Fsr.Name; ListItem.SubItems.Add(ExtractFileExt(Fsr.Name)); //Denne linie tilføjer efternavnet i den næste celle. ListItem.SubItems.Add(IntToStr(Fsr.Size)); end; FindClose(Fsr); end; procedure TForm1.Button4Click(Sender: TObject); begin Action1.Execute end;
-- Kode Slut --
P.S. Det er nemmest hvis du designer dine celler (paneler) i design-time.
Det gøres ved at højreklikke på ListView'et og klikke ColumnsEditor eller sådan noget. Derefter skal du tilføje tre Items, hvor den førstes caption skal sættes til f.eks. 'Filnavn' og nummer to til f.eks. 'Filtype' og den sidste 'Størrelse'.
Speedy>>Hmm Jeg forsøgte mig med Onevent med viewlist1. Mener jeg bpde forsøgte ondata og onchange at inføre viewlist1.Items.Clear men det Kan åbenbart gøres mere simpelt ;-)
gozar >> Jeg glemte helt at fremføre min sædvanlige kæphest i mod den algoritme du bruger til at søge på din harddisk med. Eller måske ikke så meget algoritmen som den måde den er implemteret på. Problemet er at du blokerer hele dit program, og iøvrigt store dele af dit Os. I stedet burde du implemtere den algoritme i en tråd (Eksemple kan fremsendes) som så foretog den etenlige søgning. Iøvrigt er det også hurtigere ..
-- Koden -- procedure TForm1.Action1Execute(Sender: TObject); Var Fsr : TSearchRec; SogSti : String; ListItem: TListItem; Sti : String; Begin Sti := ('c:\'); If Sti[Length(Sti)] = '\' then else //Spørger om Sti ender på \ Sti := Sti + '\'; // Hvis ikke, så tilføj det. If LastDelimiter('g',Sti) > 0 then else SogSti := Sti + '*.*';
If FindFirst(SogSti, faAnyFile, Fsr) = 0 then // Søger efter første fil If FSr.Attr <> faDirectory then //spørger om det er forskellig fra en mappe. Altså at det er en fil. Begin ListItem := Lokal.Items.Add; //Tilføjer i listviewet. ListItem.Caption := Fsr.Name; // Tilføjer filnavnet ListItem.SubItems.Add(ExtractFileExt(Fsr.Name)); //Denne linie tilføjer efternavnet i den næste celle. ListItem.SubItems.Add(IntToStr(Fsr.Size)); //Og til sidst tilføjer vi fil-størrelsen i sidste kolonne. end;
Det næste er det samme, det bliver bare gjort i en løkke, der stopper når der ikke er flere filer tilbage.
While FindNext(Fsr) = 0 do If FSr.Attr <> faDirectory then Begin ListItem := Lokal.Items.Add; ListItem.Caption := Fsr.Name; ListItem.SubItems.Add(ExtractFileExt(Fsr.Name)); //Denne linie tilføjer efternavnet i den næste celle. ListItem.SubItems.Add(IntToStr(Fsr.Size)); end; FindClose(Fsr); end; procedure TForm1.Button4Click(Sender: TObject); begin Action1.Execute end;
-- Kode Slut --
/SpEeDy
Synes godt om
Ny brugerNybegynder
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.