TListBox i wczytanie plików

0

Mam na formę TListBox (nazwa: "<font color="blue">mk_filelist</span>") oraz button o nazwie : "<font color="blue">mk_b_add</span>".Do tego jeszcze OpenDialog o nazwie "<font color="blue">mk_d_open</span>" z opcją "AllowMultiSelect" w inspektorze obiektów.

Wszystko polega na tym: gdy klikne na <font color="blue">mk_b_add</span> ma mi sie otworzyc opendialog z możliwością otworzenia kilku plików, wtedy pliki te władują sie do listy (ale tylko ich nazwy mają tam być), natomiast całe sciezki mają byc w Hintach odpowiednich plikow. - rozumiecie mam nadzieje.

Na razie sam napisałem tak:

[code]
procedure Tmk.mk_b_addClick(Sender: TObject); // Button "dodaj pliki"
var
i:integer;
begin
Mk_D_save.Execute;
if Mk_D_Save.FileName '' then
begin
for i:=0 to Mk_D_save.Files.Count-1 do
begin

//i tu polecenia

  Mk_FileList.Items.Add(ExtractFileName(Mk_D_save.Files[i]));

end;

end;

end;[/code]

Jak to zrobić:

  • zabezpieczenie aby nie było mozna dodac tych samych plikow dwa razy w liste (to jest najtrudniejsze i na razie nie mam pomysłu jak to zrobic - moim zdaniem trzeba by przy każdym kolejnym pliczkiem sprawdzać w pętli czy go tam nie ma. Niestety wydaje mi się, że przy dużej ilości plików, będzie to strasznie długo trwać (pętla zagnieżdżona))

  • Hint przy każdym pliczku, bedący jego ścieżką.. jak w ogole się dodaje hinty do itemów w TListBox?

Za wszelką pomoc z góry THX [browar]

0
  1. Sprawdzaj po prostu, czy Mk_FileList.items.indexof(ExtractFileName(Mk_D_save.Files[i]))-1, jeśli tak, to nie dodajesz.
  2. Nie da się przypisać hinta itemowi. Trzeba wywoływać go samemu po najechaniu mysza na odpowiedni element.
0

[code]
procedure Tmk.mk_b_addClick(Sender: TObject); // Button "dodaj pliki"
var
i:integer;
dwAttr : DWORD;
begin
List.Create;
Mk_D_save.Execute;
if Mk_D_Save.FileName '' then
begin
for i:=0 to Mk_D_save.Files.Count-1 do
begin
if (Mk_D_save.Files[i] Notatnik.D_save.FileName) and (List.indexof(Mk_D_save.Files[i]) = -1) then
begin
dwAttr := GetFileAttributes(PChar(Mk_D_save.Files[i]));
if dwattr = FILE_ATTRIBUTE_READONLY then
begin
Mk_FileList.Items.Add(ExtractFileName(Mk_D_save.Files[i]));
end
else
begin
List.Add(Mk_D_save.FileName);
Mk_FileList.Items.Add(ExtractFileName(Mk_D_save.Files[i]));
end;
end;
end;
Mk_FileCounter.Caption := IntToStr(List.Count);
end;
end;[/code]

<font color="red">Acces Violation</span>.. dlaczego ?

"List" to globalna zmienna <font color="blue">tstringlist</span>

0

List.Create??? Tak sie konstruktora nie wywołuje.

List:=TTyp.Create;

potem pod konieć musisz zwolnic pamięć List.Free;

0

Dalej nie działa zabezpieczenie na powtórne wczytanie pliku... :-8

0

Moze jestem slepy ;P ale nie widze warunku, o ktorym pisal thenkles :]

  1. Sprawdzaj po prostu, czy Mk_FileList.items.indexof(ExtractFileName(Mk_D_save.Files[i]))-1, jeśli tak, to nie dodajesz.
0

<font color="blue">(List.indexof(Mk_D_save.Files[i]) = -1)</span>

troche go przerobiłem, bo chodzi w zasadzie o TStringList, a nie TListBox. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1