![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск и открытие документа Word [D7, WinXP]
VologdaBobR © (2007-03-29 10:57:00)Здравствуйте. Извините если пост не в той теме. у меня такой вопрос:
С помощью делфи надо реализовать поиск и открытие документа ворд.
Ищу средствами ВБ:
w:=createoleobject('word.application');
w.FileSearch.FileName:=searchform.labelededit1.text+'.doc';
w.FileSearch.SearchSubFolders:=true;
w.FileSearch.LookIn:= Extractfiledir(application.ExeName)+'\documents\';
if w.filesearch.execute>0
then
begin
messagebox(handle,'Файл найден','Внимание',0);
dir:=w.filesearch.execute.foundfiles();
w.documents.open(dir);
w.visible;
end
else
messagebox(handle,'Файл не найден','Внимание',0);
end;
В итоге пишет что файл найден, однако открыть его не могу. Подскажите в чем ошибка? Заранее спасибо
Elen (2007-03-29 13:04:00) [1]
> Выглядит правдоподобно
Работает так же :)
BobR (2007-03-29 12:57:00) [2]Бегло просмотрел этот код...
Выглядит правдоподобно. Проблема в том, что я забыл про shellexecute совсем...
Приду домой попробую... но спасибки все равно тк мне кажется все получится
BobR (2007-03-29 12:57:00) [3]Бегло просмотрел этот код...
Выглядит правдоподобно. Проблема в том, что я забыл про shellexecute совсем...
Приду домой попробую... но спасибки все равно тк мне кажется все получится
Elen (2007-03-29 12:51:00) [4]
> В том и дело что в директории где ищу есть и другие директории
> и файл там в одной из них... заранее неизвестно в какой.
Вот это как раз не проблема. Вот тебе примерчик рекурсии по каталогу и открытия файла в соответствующем приложении (код требует доработки и може розглядаться только как пример) :
unit Unit1;
interface
uses shellapi,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function findA(p:string; var slist:TStringList):variant;
var i:integer;
Form1: TForm1;
implementation
{$R *.dfm}
//********** FUNCTION **********
function findA;
var s:TSearchRec; lp,ep,ss:string;k:integer;
begin
ep:=ExtractFilePath(p)+'*.*';
if FindFirst(ep,faAnyFile, s)=0 then begin
repeat
if (s.Name <>'.')and(s.Name <>'..') then begin
lp:='';k:=0; while k<=i*4 do begin lp:=lp+' ';inc(k);end;
if s.Attr=faDirectory then
slist.Append(lp+'['+s.Name+']')
else
if s.Name='Doc1.doc' then
ShellExecute(Application.Handle,'open',pchar(ExtractFilePath(ep)+s.Name),'','',SW_SHOWDEFAULT); //Если файл такой найден запускаем
slist.Append(lp+s.Name);
if s.Attr=faDirectory then begin
inc(i);
findA(ExtractFilePath(p)+s.Name+'\'+ExtractFileName(p), slist);
dec(i);
end;
end;
until FindNext(s)<>0
end;
end;
//********** END FUNCTION ****** {}
procedure TForm1.FormCreate(Sender: TObject);
var ts:TStringList;
begin
ts:=TStringList.Create;
finda( 'c:\temp\*.*',ts); // Путь сам прпишеш
ListBox1.Items:=ts;
end;
end.
Удачи.
BobR (2007-03-29 12:39:00) [5]В том и дело что в директории где ищу есть и другие директории и файл там в одной из них... заранее неизвестно в какой.
Elen (2007-03-29 11:28:00) [6]
> файл если и найдется то будет только один
Директория одна? Я имею ввиду рекурсии для поиска делать не надо?
VologdaBobR (2007-03-29 11:27:00) [7]
> А почему не обычними FindFirst?
>
просто так быстрее работает как мне кажется... кстати не могли бы вы предложить вариант поиска с помощью findfirst пробовал но тоже что-то не получается... файл если и найдется то будет только один
Elen (2007-03-29 11:24:00) [8]
> Ищу средствами ВБ:
А почему не обычними FindFirst?