Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 11.03.2014, 20:57   #1
Читер-спонсор
 Пехотинец
Аватар для .Master.
 
.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза.Master. трижды герой Советского Союза
Регистрация: 21.07.2012
Сообщений: 95
Популярность: 6380
Сказал(а) спасибо: 631
Поблагодарили 460 раз(а) в 379 сообщениях
 
По умолчанию Пишем программу для поиска файлов.

Ну что же, давайте попробуем написать программу, которая бы выдавала список всех программ с расширением *.exe в указанной директории, а затем при нажатии на кнопку включалась бы выбранная программа.

Кидаем на форму "TListBox" - в него мы будем выводить список найденных файлов. Обработчик событий для нашей первой кнопки изменим на такой:


Код:
procedure TForm1.Button1Click(Sender: TObject);

var sr:TSearchRec;

Result:word;

begin

ChDir('C:\windows');//меняем папку на C:\Windows

Result := FindFirst ('*.exe',faAnyFile,sr);

ListBox1.Clear;

While result=0 do

Begin

Result:=FindNext (sr);

ListBox1.Items.add(sr.name);

End;

end;
Как вы можете наблюдать, мы не сделали ничего сложного, просто организовали цикличный проход по директории C:\Windows, который прекращается, как только функции возвращает не ноль. Функция ChDir в нашем случае используется для смены папки с текущей на папку C:\windows\

Этот способ лишь находит файлы в том каталоге, который задан переменной Path:String. Поэтому я думаю, что стоит написать алгоритм поиска файлов в каждой найденной директории.


У меня расширенная процедура поиска выглядит вот так:

Код:
procedure ffind(cat:string); //каталог, откуда начать поиск

var sea:TSearchRec;

res:integer; //результат поиска (0 или нет)

begin

res:=FindFirst(cat+'*.*',faAnyFile,sea); //ищем первый файл

res:=findNext(sea);//ищем следующий файл

While res=0 do

begin

if (Sea.Attr=faDirectory) and ((Sea.Name='.')or(Sea.Name='..')) then//чтобы не было файлов . и..

begin

Res:=FindNext(sea);

Continue;//продолжаем цикл

end;
Код:
if (Sea.Attr=faDirectory) then//если нашли директорию, то ищем файлы в ней

begin

Ffind(cat+Sea.Name+'\');//рекурсивно вызываем нашу процедуру

Res:=FindNext(Sea);//ищем след. файл

Continue;//продолжаем цикл

end;

form1.ListBox1.Items.Add(Sea.Name);//добавляем в Listbox:Tlistbox имя файла

Res:=FindNext(Sea);//ищем след. файл

end;

FindClose(Sea);//освобождаем пересенную поиска

end;
Здесь мы с вами использовали процедуру FindClose(var sea: TsearchRec) - она необходима для освобождения поисковой переменной. Для того, чтобы наша с вами программа не выглядела подвисшей, можно добавить Application.ProcessMessages в начало нашей процедуры.

Кидаем на форму еще одну кнопку для того, чтобы по ее нажатии запускать выбранную в ListBox'e программу. Обработчик события Onclick для нашей второй кнопки у меня получился таким:


Код:
procedure TForm1.Button2Click(Sender: TObject);

begin

WinExec(pchar(listbox1.Items[listbox1.itemindex]),sw_show);

end;
Т.к. файлы находятся в директории Windows, то при вызове метода WinExec путь к файлам можно не указывать, а если вы используете какую-либо другую директорию, то вызов метода WinExec должен быть таким:



Код:
WinExec(pchar('C:\Путь к вашей папке\'+listbox1.Items[listbox1.itemindex]),sw_show);
А если вы просто хотите искать файлы в указанном пользователем каталоге можно использовать компонент DirectoryListBox, который дает доступ к каталогам на вашем компьютере и позволяет менять текущий каталог двойным нажатием мыши. Узнаем выбранный каталог так:

Код:
DirectoryListBox1.Directory
Именно поэтому в обработчике первой кнопки, убираем вызов функции ChDir. А в обработчике второй кнопки вставить приведенную выше конструкцию.

Таким образом у нас с вами получается вот такой код:

Код:
unit Unit1;


interface


uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, FileCtrl;


type

TForm1 = class(TForm)

Edit1: TEdit;

Button1: TButton;

ListBox1: TListBox;

Button2: TButton;

DirectoryListBox1: TDirectoryListBox;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;


implementation


{$R *.DFM}


procedure TForm1.Button1Click(Sender: TObject);

var sr:TSearchRec;

Result:word;

begin

Result := FindFirst ('*.exe',faAnyFile,sr);

ListBox1.Clear;

While result=0 do

Begin

Result:=FindNext (sr);

ListBox1.Items.add(sr.name);

End;

end;


procedure TForm1.Button2Click(Sender: TObject);

begin

WinExec(pchar(DirectoryListBox1.Directory+'\'+listbox1.Items[listbox1.itemindex]),sw_show);

end;


end.
Вот мы и реализовали нашу идею в жизнь. Спасибо за внимание.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
http://i.zhyk.ru/images/KM9hf.png
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
=F1= (11.03.2014), dred777 (13.03.2014), jaja123 (11.03.2014), Qnix (11.03.2014)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Подскажите программу для поиска оффсетов на руофе 50rep Общение и обсуждение Perfect World 4 27.06.2016 17:50
[Продам] Программу поиска писем на почте fesssi Товары/услуги в Сети 5 19.05.2012 21:52
[Продам] Программу поиска писем!!!!!!!!! JLeGioH Товары/услуги в Сети 3 03.11.2011 13:16

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 21:29.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net