![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Как заставить работать поиск файла по маске
Я пишу мини поисковик по расширениям и хочу перенести функцию поиска из формы и проекта в длл Проект компилируеться но после того как я выбираю папку и нажимаю кнопку выскакивает ошибка "Cannot to assign to TForm1 to a TlistboxStrings" вот код длл Код:
library Project1;
uses
SysUtils,
Classes;
{$R *.res}
function FindFile(Folder,Mask:String;List:TStrings):TStrings;stdcall;
var
SR: TSearchRec;
// Folder: String;
begin
Folder := IncludeTrailingPathDelimiter(Folder);
if FindFirst(Folder + Mask, faAnyFile, SR) = 0 then
try
repeat
if ((SR.Attr and faDirectory) = 0) and // Файл, а не папка?
SameFileName(ExtractFileExt(SR.Name), '.exe') then // Расширение - exe?
List.Add(Folder + SR.Name); // Если да - добавляем
until FindNext(SR) <> 0;
finally
Result:=List;
FindClose(SR);
end;
end;
exports
FindFile;
begin
end.
А Вот код самого приложения Код:
var
Form1: TForm1;
implementation
function FindFile(Folder,Mask:String;List:TStrings):TStrings;stdcall;external 'Find.dll';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
List.Items:=(FindFile(Shell.Path,Mask.Text,List.Items));
end;
end. |
|
#2
|
||||
|
||||
|
Скорее всего вам нужно:
Код:
procedure TForm1.Button1Click(Sender: TObject); begin List.Items.AddStrings(FindFile(Shell.Path, Mask.Text, List.Items)); end; |
|
#3
|
|||
|
|||
|
Нет не вышло теперь пишет Access violation at address 00403a3c
|
|
#4
|
||||
|
||||
|
Кинь проект, а то лень писать.
|
|
#5
|
|||
|
|||
|
Лови там исх проекта и длл
P.S С использыванием длл писать только начал |
|
#6
|
||||
|
||||
|
Антивирус не даёт скачать архив, убери exe и dll из архива.
|
|
#7
|
|||
|
|||
|
Уже Убрал .
|
|
#8
|
||||
|
||||
|
Лови каку.
Код:
unit Unit15;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
List: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function FindFile(Folder, Mask : String; var List : TStringList) : Boolean; stdcall; external 'Find.dll';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
s : TStringList;
begin
s := TStringList.Create;
try
if FindFile('d:\borland\work\games\', '*.*', s) then
List.Items.AddStrings(s);
finally
s.Free;
end;
end;
end.
//------------------------------------------
library find;
uses
Classes, SysUtils;
function FindFile(Folder, Mask : String; var List : TStringList) : Boolean; stdcall;
var
SR : TSearchRec;
St : String;
begin
Result := False;
St := IncludeTrailingPathDelimiter(Folder);
if FindFirst(St + Mask, faAnyFile, SR) = 0 then
try
repeat
if ((SR.Attr and faDirectory) = 0) and // Файл, а не папка?
SameFileName(ExtractFileExt(SR.Name), '.exe') then // Расширение - exe?
List.Add(St + SR.Name); // Если да - добавляем
until FindNext(SR) <> 0;
finally
Result := True;
FindClose(SR);
end;
end;
exports
FindFile;
end.Последний раз редактировалось angvelem, 13.09.2011 в 23:16. |
|
#9
|
|||
|
|||
|
Спасибо большое !
|
|
#10
|
||||
|
||||
|
Ты забыл убрать из архива project1.dll, антивирус ругается на него и обзывает Induc.
Последний раз редактировалось angvelem, 13.09.2011 в 23:41. |
|
#11
|
|||
|
|||
|
Странно, касперский молчит поставлю на сканирование вдруг что есть
Полазил в интернете и нашел то что он заражает только файлы написанные на делфи Последний раз редактировалось ssergey_96, 13.09.2011 в 23:51. |