Mam problem z programem szukajacym plikow na kompie. W zaznaczonej linijce. Jezeli ja wywale to program dziala jak powinien ale jezeli ona jest wywala blad: Acces violation..... itp.itd. Nie wiem dlaczego??
#####################################################
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, FileCtrl, ComCtrls, PathTreeView, XPMan, ImgList;
type
TForm1 = class(TForm)
lpliki: TListBox;
dyski: TDriveComboBox;
Button1: TButton;
XPManifest1: TXPManifest;
tree: TPathTreeView;
ImageList1: TImageList;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
function kropki(l:int64):string;
var qq,w:string;
a,s:word;
begin
str(l,qq);
str(l,w);
a:=length(qq) div 3;
for s:=1 to a do insert('.',w,length(qq)-(3*s)+1);
if w[1]='.' then delete(w,1,1);
if (w[1]='-')and(w[2]='.') then delete(w,2,1);
kropki:=w;
end;
function ist(co,gdzie:string):boolean;
var q:word;
begin
for q:=1 to Length(co) do co[q]:=upcase(co[q]);
for q:=1 to Length(gdzie) do gdzie[q]:=upcase(gdzie[q]);
if pos(co,gdzie)>0 then ist:=true else ist:=false;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Pliki2 : TThread;
begin
setlength(unit2.foldery,1);
unit2.foldery[0]:=dyski.Drive+':';
Pliki2 := Pliki.Create(FALSE);
end;
end.
#####################################################
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, FileCtrl;
type
Pliki = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
type tablica=array of string;
var foldery:tablica;
implementation
uses Unit1;
procedure Pliki.Execute;
var q,w,e,r,t,y,u,i,o,p:longint;
dl,teraz,blad:longint;
sciezka:string;
plik:tsearchrec;
attrs:integer;
begin
//thread
teraz:=0;
dl:=length(foldery);
{1}while teraz<=dl do begin
sciezka:=foldery[teraz];
blad:=findfirst(sciezka+'.',Faanyfile,plik);
{2}if blad=0 then while blad=0 do begin
{4}if (plik.Name<>'.')and(plik.Name<>'..') then begin
Attrs := FileGetAttr(sciezka+plik.Name);
{5}if Attrs and faDirectory <> 0 then begin
setlength(foldery,dl+1);
foldery[dl+1]:=sciezka+plik.Name+'';
dl:=length(foldery);
{5}end else begin
{form1.lpliki.Items.Append(sciezka+plik.Name);}
form1.tree.DestPath:=sciezka+plik.Name;
form1.tree.AddPath;
end;
{4}end;
blad:=findnext(plik);
{2}end;
teraz:=teraz+1;
{1}end;
end;
end.