Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2009, 12:05   #11
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию

Спасибо! Сёня попробую, завтра отпишу...
Ralf_ru вне форума Ответить с цитированием
Старый 04.04.2009, 10:27   #12
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию

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

Код:
unit Unit12;

interface

uses
  Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ComCtrls;

type
  TMatchesMask = function(TFileName:string;mask:string): boolean;
  TForm1 = class(TForm)
    Label3: TLabel;
    Label4: TLabel;
    printer_name: TEdit;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Help1: TMenuItem;
    About1: TMenuItem;
    find: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    type_printer: TComboBox;
    Label1: TLabel;
    Memo1: TMemo;
    procedure findClick(Sender: TObject);
    procedure N2Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  FileName,cDir:string;
  v : array [1..256] of string;
  n,m,h:integer;
  printer_name,Edit2: TEdit;
  SearchRec: TSearchRec;     // информация о файле или каталоге
  MatchesMask: TMatchesMask;
  Memo1: TMemo;
  
implementation

uses
  Windows;

{$R *.dfm}

// поиск файлов в текущем каталоге
procedure Findproc;
var
a,z:string;
l,k: array [1..256] of string;
j,i,ik,q,o,p,poh:integer;
F: TextFile;       // связка файла
S: string[80];     // строки файла
fName: String[80]; // имя файла
begin
   //GetDir(0,cDir); // получить имя текущего каталога
   //if cDir[length(cDir)] <> '\' then cDir := cDir+'\';

   if FindFirst('*.txt', faAnyFile,SearchRec) = 0 then  // начало поиска
       repeat
 begin
 a:=ExtractFileName(SearchRec.Name);// разбиение найденого имени файла на символы без пробелов
 p:=Length(a); 
 ik:=0;
 for i := 1 to p do
     begin
       if a[i]<>chr(32) then
       begin
       ik:=ik+1;
       l[ik]:=a[i];
       end;
     end;

 o:=Length(FileName);               // разбиение введенного имени файла на символы без пробела
 z:=FileName;
 ik:=0;
 for q := 1 to o do
     begin
       if z[q]<>chr(32) then
       begin
       ik:=ik+1;
       k[ik]:=z[q];
       end;
     end;
 n:=0;
 j:=1;
    for poh := 1 to p do      // сравнение разбитых на символы имен файлов
          begin
            if k[j]<>'' then
                 begin
            if k[j]=l[poh] then j:=j+1;

            if j=ik then begin
            if n>0 then break else begin
      fname:=SearchRec.Name;
      AssignFile(F,fname);
        Reset(F);
        while Not EOF(F) do
      begin
        Readln(F, S);
        Memo1.Lines.Add(S); <------- тут выскакивает ошибка
      end;
       CloseFile(F); n:=n+1;
                                   end
                         end
                 end
            else j:=1;
          end;
  end
        until FindNext(SearchRec) <> 0;

       if FindFirst('*', faAnyFile, SearchRec) = 0 then  <---- тут начало перехода по папкам
          repeat
          begin
              if (SearchRec.Attr and faDirectory) = faDirectory then

                    if SearchRec.Name[1] <> '.' then
                       begin
                         //Memo1.Lines.Add('>>>>'+SearchRec.Name);
                         ChDir(SearchRec.Name);// войти в каталог
                         Findproc; // выполнить поиск в подкаталоге
                         ChDir('..');// выйти из каталога
                         //Memo1.Lines.Add('<<<<'+SearchRec.Name);
                       end
                   else
          end;
          until FindNext(SearchRec) <> 0;
end;



procedure TForm1.findClick(Sender: TObject);
begin
find.Enabled:=false;
 if printer_name.Text = '' then
    begin
         MessageBox(0,'Введите хотя бы модель принтера.', 'Не ленись!', mb_Ok);
         find.Enabled:=true;
         exit;
    end;

Memo1.Lines.Clear;
 CDir:='C:\Printer\bases\'+type_printer.Text+'\';
        FileName := printer_name.Text;   // что искать
        ChDir(CDir);                    // войти в каталог поиска
        h:=0;                          // количество найденых принтеров
        m:=0;                         // обнуление счетчиков
        Findproc;                    // начать поиск

        if Memo1.Lines.GetText='' then
             begin
         MessageBox(0,'Такого принтера в базе нет.', 'Ваша БД мала!', mb_Ok);
         find.Enabled:=true;
         edit1.Text:=cDir;
         exit;
             end;

find.Enabled:=true;
find.Enabled:=true;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
  form1.Close;
end;

end.
Вобщем у меня два вопроса: 1) про ошибку
2) он у меня только в одну папку залазиет выходит из неё и не хочет дальше искать их или входить в них.

Последний раз редактировалось Ralf_ru; 04.04.2009 в 11:14.
Ralf_ru вне форума Ответить с цитированием
Старый 04.04.2009, 16:56   #13
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию

Товарищи хакеры, неужели некому помочь???
Ralf_ru вне форума Ответить с цитированием
Старый 05.04.2009, 05:20   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ralf_ru, Вы допускаете ГРУБЕЙШУЮ ошибку при работе с объектами!
Как Вы думаете, что такое означает написанное у Вас:
Код:
var
  ...
  Memo1: TMemo;
Это означает, что Вы объявили переменную Memo1
а кто за Вас будет её создавать?!
Код:
  Memo1.Create(self);
и потом не забудьте ещё сделать Memo1.Free;
(или, лучше - FreeAndNil(Memo1);

это во-первых.
во-вторых.
похоже, что Вам нужно вообще выкинуть описание из var'ов и
printer_name,Edit2: TEdit;
и
Memo1 : TMemo;
Совсем!

а там, где Вы в процедуре Findproc хотите к ним обратиться (кстати, проще было сделать эту процедуру методом формы TForm1 !!!)
пишите:
Код:
 Form1.Memo1.Lines.Add(S)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
access violation at address UnChanter Общие вопросы Delphi 22 07.02.2011 11:00
Access violation at address при выполнении end elsin Общие вопросы Delphi 5 30.01.2009 10:29
Access violation at address.. RegentM Общие вопросы Delphi 4 01.11.2007 03:46
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. Fen1x Общие вопросы Delphi 8 13.10.2007 20:13
Возникает исключение "Access violation at address ... Наташка Общие вопросы Delphi 1 18.05.2007 12:16