Avatar billede gozar Nybegynder
29. juni 2000 - 20:19 Der 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;

  -- Kode Slut --
Avatar billede speedy Nybegynder
29. juni 2000 - 22:42 #1
Hej


Det med at de hele bliver tilføjet igen...

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'.

Håber du kan bruge det :)

Ellers må du jo brokke dig :)

/SpEeDy
Avatar billede gozar Nybegynder
29. juni 2000 - 23:40 #2
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 ;-)

Avatar billede speedy Nybegynder
30. juni 2000 - 10:50 #3
gozar >> Jeg kan ikke helt forstå ovenstående kommentar :). Virker det jeg skrev, eller er ovenstående et uddybende spørgsmål ??

/SpEeDy
Avatar billede borrisholt Novice
30. juni 2000 - 12:15 #4
gozar >> Er der meningen du skal have dine filnavne sorteret alfabetisk stigende og faldende når du trykker på headder i toppen af dit ListView?

Jens B
Avatar billede borrisholt Novice
30. juni 2000 - 13:59 #5
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 ..

Jens B
Avatar billede kokoko Nybegynder
30. juni 2000 - 22:56 #6
borrisholt: kunne du ikke sende det eksempel til cocio@mail.ikasths.dk? :)
Avatar billede borrisholt Novice
01. juli 2000 - 12:12 #7
kokoko >> Jeg sender dig eksemplet med det samme iøvrigt kan det også downloades fra Http://borrisholt.com. du finder det under kategorien "FileIO"

Jens B.
Avatar billede speedy Nybegynder
03. juli 2000 - 14:56 #8
gozar>> Er du der ?? Hallo :)

/SpEeDy
Avatar billede gozar Nybegynder
03. juli 2000 - 15:14 #9
Du må meget gerne sende eksemplet til Gozar@pokerface.dk

Borrisholt>>Det vigtiste lige nu, er sådanset at få skidtet til at virke!! Resten må komme bagefter....

Speedy>>Diablo II udkom i fredags!!! Behøver jeg at sige mere!!
Avatar billede gozar Nybegynder
05. juli 2000 - 21:52 #10
Øhh he he...

Er det muligt at få en lille gennemgang af hvad der enlig sker i scriptet speedy??
Avatar billede speedy Nybegynder
06. juli 2000 - 08:30 #11
gozar>> Hvad mener du helt præcist med hvad der sker i scriptet ?? Altså vil du have en gennemgang af alle linierne hvad de gør ??

/SpEeDy
Avatar billede gozar Nybegynder
07. juli 2000 - 19:41 #12
Ja, det ville jeg meget gerne
Avatar billede speedy Nybegynder
07. juli 2000 - 22:03 #13
-- 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
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