Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Открытие вордовского документа при поиске 
:(
    Опции темы
Genius3d
Дата 8.6.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.6.2007

Репутация: нет
Всего: нет



Вот есть функции следующие:



//функция поиска файлов и внутри них по содержанию
Код

procedure TForm1.FindFiles(StartFolder, Mask: string;
 ScanSubFolders: Boolean = True; Node: TTreeNode=nil;st:string='';List: TStrings=nil);
var
 SearchRec: TSearchRec;
 FindResult: Integer;
 NewNode, PNode: TTreeNode;
 S:String;
 a, b: OleVariant;
 j, ilengy: Integer;
 Nashli:boolean;
begin
  ChDir(StartFolder);
  PNode := TreeView1.Items.AddChild(Node, StartFolder);
        // задание пиктограмм для папок закрытых
  PNode.ImageIndex := 1;
  PNode.SelectedIndex := PNode.ImageIndex;
  Nashli:=false;
  ilengy:=Length(WordDocument1.Range.Text);
  j:=0;
 try
   StartFolder := IncludeTrailingBackslash(StartFolder);
   FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
   try
     while FindResult = 0 do
       with SearchRec do
       begin
         if (Attr and faDirectory) <> 0 then
         begin
           if ScanSubFolders and (Name <> '.') and (Name <> '..') then
             FindFiles(StartFolder + Name, Mask, ScanSubFolders,PNode);
         end
         else
         begin
           if MatchesMask(Name, Mask) then
           begin
           // открытие файла для поиска внем
            OpenFile(Name);
              repeat
                a:=j;
                b:=j+Length(st);
                if WordDocument1.Range(a,b).Text=st then
                begin                      //создаем узел если нашли такой файл
                Nashli:=true;
                NewNode := TreeView1.Items.AddChild(PNode, SearchRec.Name);
          //задание пиктограммы
              NewNode.ImageIndex := 0;
              NewNode.SelectedIndex := NewNode.ImageIndex;
          // сохраняем в мемо имя файла, и фразу где встречается искомый текст
                List.Add(StartFolder + Name);
                List.Add(WordDocument1.Range(a,b).Text);
                List.EndUpdate;
                 end;
                inc(j);
                until (j>=ilengy-Length(st)) or Nashli;
             If Nashli then
             begin // если нашли файл содержащий информацию, то заносим его название в мемо
  //и текст в котором содержиться искомая строка для поиска
             List.Add(StartFolder + Name);
                List.Add(WordDocument1.Range(a,b).Text);
                List.EndUpdate;
             end;
             //закрываем word
             WordDocument1.Close;
              WordApplication1.Disconnect;
                {
              NewNode := TreeView1.Items.AddChild(PNode, SearchRec.Name);
          
              NewNode.ImageIndex := 0;
              NewNode.SelectedIndex := NewNode.ImageIndex;
              S:='';
              S:=NewNode.Text;
              while NewNode.Parent <> nil do
              begin
                NewNode:=NewNode.Parent;
                S:=NewNode.Text+'\'+S;
              end;   }
           end;
         end;
         FindResult := FindNext(SearchRec);
       end;
   finally
     FindClose(SearchRec);
   end;
 finally
 end;



//открывает файлы для поиска:
Код


procedure TForm1.OpenFile(FileName: string);
var
DocName,ConfConv,ReadOnly,AddToRecFiles,Psw,PswTmp,Revert,WritePsw,WritePswTmp,
  Fmt,replace:OleVariant;
begin
DocName:=FileName;//èìÿ ôàéëà
ConfConv:=False;
ReadOnly:=False;
AddToRecFiles:=False;
Psw:='';
PswTmp:='';
Revert:=False;
WritePsw:='';
WritePswTmp:='';
Fmt:=wdOpenFormatAuto;
replace:=wdReplaceAll;
WordApplication1.Connect;
WordApplication1.Visible:=false;//íå âêëþ÷àåì âèäèìîñòü Âîðäà
WordApplication1.Documents.Open(DocName, ConfConv, ReadOnly, AddToRecFiles,
  Psw, PswTmp, Revert, WritePsw, WritePswTmp, Fmt, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
end;



Проблема в том, что работа программы падает когда файл открывается(((....
пишет "Файл не найден".

можете помочь? бьюсь уже который день. Дельфи 7 стоит у меня/

Может я неправильно задаю параметры для Open?
PM MAIL   Вверх
Genius3d
Дата 8.6.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.6.2007

Репутация: нет
Всего: нет



короче починил))... теперь другая проблема как вывести мне кусок текста в котором встречается искомое слово???
чтобы было понятно вообще в каком контексте это слово употребляется или текст

правленный код:
Код

procedure TForm1.FindFiles(StartFolder, Mask: string;M:string;
 ScanSubFolders: Boolean = True; Node: TTreeNode=nil;st:string='';List: TStrings=nil);
var
 SearchRec: TSearchRec;
 FindResult: Integer;
 NewNode, PNode: TTreeNode;
 S:String;
 a, b: OleVariant;
 j, ilengy: Integer;
 Nashli:boolean;

begin
  ChDir(StartFolder);
  PNode := TreeView1.Items.AddChild(Node, StartFolder);
        // çàäàíèå ïèêòîãðàììû çàêðûòîé ïàïêè
  PNode.ImageIndex := 1;
  PNode.SelectedIndex := PNode.ImageIndex;
  Nashli:=false;
  ilengy:=Length(WordDocument1.Range.Text);
  j:=0;
 try

   StartFolder := IncludeTrailingBackslash(StartFolder);
   FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
   try
     while FindResult = 0 do
       with SearchRec do
       begin


         if (Attr and faDirectory) <> 0 then
         begin
           if ScanSubFolders and (Name <> '.') and (Name <> '..') then
             FindFiles(StartFolder + Name, Mask,M, ScanSubFolders,PNode);
         end
         else
         begin
           if MatchesMask(Name, Mask) then
           begin
           // çàíåñåíèå óçëà â ñïèñîê
           //   List.Add(StartFolder + Name);
             // çàíåñåíèå óçëà â äåðåâî
            if M ='doc' then
            begin
            OpenFile(StartFolder + Name);
              repeat
                a:=j;
                b:=j+Length(st);
                if WordDocument1.Range(a,b).Text=st then
                begin                      //ñîçäàåì óçåë åñëè íàøëè ôàéë òàêîé
                Nashli:=true;
                NewNode := TreeView1.Items.AddChild(PNode, SearchRec.Name);
          // çàäàíèå ïèêòîãðàììû
              NewNode.ImageIndex := 0;
              NewNode.SelectedIndex := NewNode.ImageIndex;

              S:='';
              S:=NewNode.Text;
              while NewNode.Parent <> nil do
              begin
                NewNode:=NewNode.Parent;
                S:=NewNode.Text+'\'+S;
              end;

                 end;

                inc(j);
                until (j>=ilengy-Length(st)) or Nashli;
             //íå çàáûâàåì çàêðûòü word
             List.Add(StartFolder + Name);
             List.Add(WordDocument1.Range(a,b).Text);
             List.EndUpdate;
             WordDocument1.Close;
             WordApplication1.Disconnect;
             end;
                {
              NewNode := TreeView1.Items.AddChild(PNode, SearchRec.Name);
          // çàäàíèå ïèêòîãðàììû
              NewNode.ImageIndex := 0;
              NewNode.SelectedIndex := NewNode.ImageIndex;

              S:='';
              S:=NewNode.Text;
              while NewNode.Parent <> nil do
              begin
                NewNode:=NewNode.Parent;
                S:=NewNode.Text+'\'+S;
              end;   }

           end;
         end;
         FindResult := FindNext(SearchRec);
       end;
   finally
     FindClose(SearchRec);
   end;
 finally

  // if List.Count = 0 then
 //   List.Add('Íè÷åãî íå íàéäåíî');
 //  List.EndUpdate;
 end;
 


end;


Это сообщение отредактировал(а) Genius3d - 8.6.2007, 22:58
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0985 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.