Wstawianie zawartości kilku plików tekstowych do memo.

0

Witam,jestem dość początkująca w Delphi i mam pewien problem. Chciałabym,żeby program automatycznie wstawiał do memo zawartość wszystkich plików tekstowych z wybranego przez użytkownika folderu.
Domyślam się,że program powinien zliczyć ilośc takich plików w folderze i potem za pomocą pętli kolejno wstawiać ich zawartość.Niestety nie mam pojęcia jak sie do tego zabrać.
Oto co mam zrobione do tego momentu(w ustawieniach mam,żeby w folderze pokazywały sie jedynie pliki *txt)

''unit tekstowy;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, ShellApi;

type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Memo1: TMemo;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin

if opendialog1.execute=true then; //opcja otwarcia pliku
begin
// wywolujemy metode execute opendialogu ktora zwraca wartosc true jezeli
// uzytkownik wybral jakis plik a jezeli nie zwraca ona false
Form1.caption:=OpenDialog1.Filename;
form1.memo1.lines.loadfromfile(OpenDialog1.Filename)

end;
//wchodzimy w inspektora obiektów
//title wyswietla to co pokaze sie w opisie okna
//filter nakazuje otworzyc wybrane typy zamiast "all files"
end;

procedure TForm1.Button2Click(Sender: TObject);
var
plik:textfile;
begin

if savedialog1.execute=true then // zapisze gdy uzytkownik kliknal ok

// musimy otworzyc dojscie do konkretnego pliku

Memo1.Lines.SaveToFile(SaveDialog1.Filename);

end;

initialization
{$I tekstowy.lrs}

end.

Byłabym wdzięczna za wszelkie wskazówki;)

1

Wskazówkę? Zainteresuj się własnością Files od OpenDialogu.
Bo jak podejrzewam - chodzi Tobie o rozwiązanie jak poniżej.

var
  I : integer;
  SL : TStringList;
begin
  OpenDialog1.Filter := 'Pliki tekstowe|*.txt';
  OpenDialog1.Options := [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist];
  if OpenDialog1.Execute then
  begin
    Memo1.Clear;
    SL := TStringList.Create;
    OpenDialog1.InitialDir := ExtractFilePath(OpenDialog1.FileName);
    for I := 0 to OpenDialog1.Files.Count - 1 do
    begin
      SL.LoadFromFile(OpenDialog1.Files[I]);
      Memo1.Lines.Insert(Memo1.Lines.Count, SL.Text);
    end;
    SL.Free;
  end;
end;
0

Jakiś separator by się przydał między odczytanymi tekstami.

0

Domyślnie wstawi się pusta linijka, ale mając już kod "na tacy" to nie
problem go zmodyfikować tak, aby dodawał jakiś ustalony separator.

0
olesio napisał(a)

Domyślnie wstawi się pusta linijka, ale mając już kod "na tacy" to nie
problem go zmodyfikować tak, aby dodawał jakiś ustalony separator.

Wszystko już leży w dłoniach autorki. :) (łapach autora).

0

Tutaj tak na marginesie:

  if savedialog1.execute=true then

'true' jest niepotrzebne.

  if savedialog1.execute then

Tak masz o 5 znaków mniej w kodzie ;)

A zamiast 'false'

  if not savedialog1.execute then
0

Dziękuje bardzo za pomoc;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1