![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Привет! Пишу программку вывода списка документов в выбранной папке. Список в самой программке выводит, но еще нужно сделать чтобы она этот список сохраняла в текстовый файл. Как это сделать толком незнаю, т.к в дельфи новичек, надеюсь на вашу помощь.
Код целиком: Код:
unit ListBuilderUnit; //Построитель списка документов //Главная форма interface uses FileCtrl, ShellAPI, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtDlgs, StdCtrls, ComCtrls, ImgList, ExtCtrls, OleServer; type TListBuilderForm = class(TForm) DirectorySelectButton: TButton; DirectoryEdit: TEdit; FileListView: TListView; IconImageList: TImageList; SaveDialog: TSaveDialog; Button1: TButton; procedure DirectorySelectButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } procedure AddFiles(Extension: string); procedure AddFile(FileName: string; FileSize: integer; FileDateTime, Extension: string); public { Public declarations } end; var ListBuilderForm: TListBuilderForm; implementation {$R *.DFM} //Получить полное имя файла из пути к каталогу Dir и имени Name function GetFullFileName(Dir, Name: string): string; begin Result := ExcludeTrailingBackslash(Dir) + '\' + Name; end; //Добавить в список файл с //именем FileName, размером FileSize, временем изменения FileDateTime, //расширением Extension procedure TListBuilderForm.AddFile(FileName: string; FileSize: integer; FileDateTime, Extension: string); var NewItem: TListItem; FileInfo: TSHFileInfo; begin Newitem := FileListView.Items.Add; NewItem.Caption := FileName; if SHGetFileInfo(PChar(GetFullFileName(DirectoryEdit.Text, FileName)), 0, FileInfo, sizeof(TSHFileInfo), SHGFI_SMALLICON or SHGFI_SYSICONINDEX) <> 0 then begin NewItem.ImageIndex := FileInfo.IIcon end else NewItem.ImageIndex := 0; NewItem.SubItems.Add(FloatToStrF(FileSize, ffNumber, 18, 0)); NewItem.SubItems.Add(FileDateTime); begin NewItem.SubItems.Add(''); end; Application.ProcessMessages; end; //Найти все файлы с расширением Extension и добавить их в список procedure TListBuilderForm.AddFiles(Extension: string); var SearchRec: TSearchRec; begin if FindFirst(GetFullFileName(DirectoryEdit.Text, '*.' + Extension), faAnyFile - faDirectory, SearchRec) = 0 then begin AddFile(SearchRec.Name, SearchRec.Size, FormatDateTime('dd.mm.yy hh:nn:ss', FileDateToDateTime(SearchRec.Time)), Extension); while FindNext(SearchRec) = 0 do begin AddFile(SearchRec.Name, SearchRec.Size, FormatDateTime('dd.mm.yy hh:nn:ss', FileDateToDateTime(SearchRec.Time)), Extension); end; end; FindClose(SearchRec); end; //По созданию формы заменить обработчик ощибок //и найти список системных иконок procedure TListBuilderForm.FormCreate(Sender: TObject); var FileInfo: TSHFileInfo; begin IconImageList.Handle := SHGetFileInfo(PChar(''), 0, FileInfo, SizeOf(TSHFileInfo), SHGFI_SMALLICON or SHGFI_SYSICONINDEX); end; //По нажатию кнопки DirectorySelectButton выбрать папку //и построить список ее файлов procedure TListBuilderForm.DirectorySelectButtonClick(Sender: TObject); var Dir: string; begin if SelectDirectory('Выберите папку с документами', '', Dir) then begin DirectoryEdit.Text := Dir; FileListView.Items.Clear; AddFiles('txt'); AddFiles('rtf'); AddFiles('doc'); end; end; end. Ну а дальше у меня ступор, как собственно все это дело сохранить в текстовый файл... Вот выложу кое-какие попытки это осуществить: Код:
procedure TListBuilderForm.SaveDialog(Sender: TObject); begin if DirectoryEdit.Text <> '' then begin //Диалог задания имени документа SaveDialog.InitialDir := DirectoryEdit.Text end else begin SaveDialog.InitialDir := '.'; end; SaveDialog.DefaultExt := 'txt'; SaveDialog.Filter := '*.txt|*.txt'; SaveDialog.FileName := 'Unknown.txt'; if SaveDialog.Execute then begin FileListView.Items.SaveToFile(SaveDialog.FileName); end;end; end. А вот как это было в примере, в нем список сохраняется в вордовский файл, но он почемуто не работает.(Ошибка в: "WordApplication.Documents.Add(Template, NewTemplate);" ) Код:
//По нажатию кнопки WordExportButton сохранить список //в документ DOC Microsoft Word procedure TListBuilderForm.WordExportButtonClick(Sender: TObject); var Template, NewTemplate, ItemIndex, WordFileName, AlignTab, TabLeader: OleVariant; k: Integer; WordString: string; begin if DirectoryEdit.Text <> '' then begin //Диалог задания имени документа SaveDialog.InitialDir := DirectoryEdit.Text end else begin SaveDialog.InitialDir := '.'; end; SaveDialog.DefaultExt := 'doc'; SaveDialog.Filter := '*.doc|*.doc'; SaveDialog.FileName := 'Unknown.doc'; if SaveDialog.Execute then begin if SaveDialog.FileName <> '' then begin try WordApplication.Connect; //Запустить Word Template := 'EmptyParam'; NewTemplate := false; WordApplication.Documents.Add(Template, NewTemplate); ItemIndex := 1; WordDocument.ConnectTo(WordApplication.Documents.Item(ItemIndex)); //Абзац без отступа с одинарным интервалом строк WordApplication.Selection.ParagraphFormat.LineSpacingRule := wdLineSpaceSingle; WordApplication.Selection.ParagraphFormat.FirstLineIndent := 0; //Табуляции и размер шрифта TabLeader := wdTabLeaderSpaces; AlignTab := wdAlignTabRight; WordApplication.Selection.ParagraphFormat.TabStops.Add( WordApplication.CentimetersToPoints(10) ,AlignTab ,TabLeader); AlignTab := wdAlignTabLeft; WordApplication.Selection.ParagraphFormat.TabStops.Add( WordApplication.CentimetersToPoints(10.3) ,AlignTab ,TabLeader); AlignTab := wdAlignTabRight; WordApplication.Selection.ParagraphFormat.TabStops.Add( WordApplication.CentimetersToPoints(17.7) ,AlignTab ,TabLeader); WordApplication.Selection.Font.Size := 8; //Путь к папке WordString := SaveDialog.InitialDir; WordApplication.Selection.TypeText(WordString); WordApplication.Selection.TypeParagraph; WordApplication.Selection.TypeParagraph; if FileListView.Items.Count > 0 then begin //Заголовок списка WordString := 'Имя' + Chr(9) + 'Размер, байт' + Chr(9) + 'Изменен' + Chr(9) + 'Параметры'; WordApplication.Selection.TypeText(WordString); WordApplication.Selection.TypeParagraph; WordString := '---------------------------------------------------------------------------------------------------------'; WordApplication.Selection.TypeText(WordString); WordApplication.Selection.TypeParagraph; //Текст списка for k := 0 to FileListView.Items.Count - 1 do begin WordString := FileListView.Items.Item[k].Caption + Chr(9) + FileListView.Items.Item[k].SubItems[0] + Chr(9) + FileListView.Items.Item[k].SubItems[1] + Chr(9) + FileListView.Items.Item[k].SubItems[2]; WordApplication.Selection.TypeText(WordString); WordApplication.Selection.TypeParagraph; end; end; //Сохранить документ и закрыть Word WordFileName := SaveDialog.FileName; WordDocument.SaveAs(WordFileName); WordApplication.Quit; WordApplication.Disconnect; except MessageDlg('Ошибка. Возможно, Word не установлен.', mtError, [mbOk], 0); end; end; end; end; Мне хотя бы все это дело научить сохраняться в простой текстовый файл, ну или может кто выяснит почему несохраняет в вордовский. Надеюсь на вашу помощь... Последний раз редактировалось twist, 13.05.2010 в 17:14. |
#2
|
||||
|
||||
![]() Можно обявить глобально переменную строкового типа ну например S. При загрузке нового файла просто добовлять его название в переменную примерно так:
Код:
s:=s+'Имя файла'+#13; Не твори зла, и жизнь повернется к тебе передом ![]() |
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
|||
|
|||
![]() Вобщем с сохранением разобрался, но появился еще один вопрос: в этом списке у меня выводит - имя файла, его размер, дату последнего изменения. Но мне еще нужно чтобы выводило "первые N непустых строк документа", т.е первые пару слов текстового документа, типа превью. Как это сделать ума не приложу... Кто что посоветует?
|
#5
|
||||
|
||||
![]() Ты имеешь введу выводило в файл? если да то код:
Код:
writeln(файловая переменная,'текст строки'); Не твори зла, и жизнь повернется к тебе передом ![]() |