Zmiana w Memo2, aktualizacja Memo1

0

Witam, mam taki programik:
do memo1 wczytuje z pliku liczby w takiej formie
212
31231231
3231

2313123
4324
213

35465676
54324
432

Program dynamicznie tworzy mi nowe memo do którego wkłada liczby dopóki nie znajdzie pustej linii, jak na nią trafi to tworzy następne memo i tam lądują następne liczby.
Teraz pytanie: jak zrobić żeby po zmianie liczby w dynamicznie utworzonym memo automatycznie liczba ta była zmieniana w głównym memo1? Czyli coś jakby aktualizacja zmiany.
Wklejam kod programu chociaż jest on bardzo zagmatwany :)


unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ComCtrls, SynEdit;

type

  { TForm1 }

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

var
  Form1: TForm1;
  plik : TextFile;
  MyText : String;
  m,n,i,l,liczby,licznik:integer;
  tab: array [ 1 .. 100 ] of string;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  zakladka: TTabSheet;
  memo: TMemo;
  edit: TEdit;
begin
  licznik:=1;
  Memo1.Clear;

if OpenDialog1.Execute then
        begin
        AssignFile(plik, OpenDialog1.FileName);
        Reset(plik);

        while not eof(plik) do
                begin
                    Readln(plik, MyText);
                    tab[licznik]:=MyText;
                    Memo1.Lines.Add(MyText);
                end;

        CloseFile(plik);
        end;

 m:=1;
 n:=1;
 l:=1;
 liczby:=1;
 zakladka:= TTabSheet.Create(self);
 zakladka.PageControl:= PageControl1;
 zakladka.Caption:= 'L' + IntToStr(liczby);
 zakladka.Show;
 //tworzenie pierwszego TMemo
 memo :=TMemo.Create(Self);
 memo.Align := alClient;
 memo.ReadOnly:=False;
 memo.ScrollBars:=ssBoth;
 memo.WordWrap:=false;
 memo.Parent := zakladka;
 //tworzenie pierwszego TEdif
 edit:=TEdit.Create(Self);
 edit.Align:=alBottom;
 edit.ReadOnly:=True;
 edit.Parent:=zakladka;
 //kopiowanie liczb z Memo1 do poszczególnych memo
 for I := 0 to Memo1.Lines.Count-1 do
  begin
       if (Memo1.Lines[i]<>'') then (PageControl1.ActivePage.Controls[0] as TMemo).Lines.Add(Memo1.Lines[i]);

       if Memo1.Lines[i]='' then //jak znajdzie pusta linie to tworzy nowa zakladke z memo
               begin
                          zakladka:= TTabSheet.Create(self);
                          zakladka.PageControl:= PageControl1;
                          zakladka.Caption:= 'L' + IntToStr(liczby);
                          zakladka.Show;
                          //tworzenie Tmemo
                          memo := TMemo.Create(Self);
                          memo.Align := alClient;
                          memo.ReadOnly:=False;
                          memo.ScrollBars:=ssBoth;
                          memo.WordWrap:=false;
                          memo.Parent := zakladka;
                          //tworzenie TEdif
                          edit:=TEdit.Create(Self);
                          edit.Align:=alBottom;
                          edit.ReadOnly:=True;
                          edit.Parent:=zakladka;

                          inc(n);
                          m:=0;
               end;
       inc(m);
  end;

  PageControl1.Pages[0].Show;  //pierwsza zakladka aktywna
end;

end.
1

możesz na przykład w dynamicznie stworzonym memo w Tag, zapisać nr pierwszej linii z oryginalnego memo lub po prostu numer tego memo, wtedy będziesz wiedział którą linię w oryginalnym memo zeedytować. tylko pamiętaj, żeby uwzględnić fakt, że jak w dynamicznym memo dodasz linię, to musisz zaktualizować tagi pozostałych memo.

0

Wielkie dzięki za odpowiedź tylko nie za bardzo wiem jak to zrobić ;/ Możesz trochę bardziej łopatologicznie?

1

Najprościej - ale pewnie mało elegancko - po zmianie liczby w którymkolwiek "dynamicznym" memo, przepisać zawartości wszystkich "dynamicznych" memo do memo1:)

0

To jest dobry pomysł tylko że przy kilkuset dynamicznych memo będzie to dosyć wolne ;/

0

przy kilku set dynamicznie stworzonych memo albo ci zabraknie RAMu albo w ogóle ci komp nie obrobi komp ;]

0

Jak napisać żeby przepisywało mi wartości z dynamicznych memo do memo1? Próbuje to napisać ale mi nie wychodzi.
Program ma tak działać, nie ja go wymyśliłem :) Nie będzie on do niczego używany, jest to tylko zaliczenie z przedmiotu.

Próbuje to jakoś zrobić i nie wiem jak napisać procedure która skopiuje mi po zmianie w dynamicznym memo właśnie z niego do memo1

0

Nie umiem sprawdzić, czy w dynamicznym memo zaszły jakieś zmiany. Pomoże ktoś?

1

piszesz sobie procedure:

var
  memos: array of TMemo;
procedure TForm1.MemoChange(Sender: TObject);
begin
  //tutaj twoja procedura, aktualne memo możesz uzyskać poprzez:
  // var aktualnememo:TMemo
  // atualnememo := Sender as TMemo;
end;

memos, to jest lista Tych memo co stworzyłeś, pewnie masz coś takiego w kodzie

i po prostu do każdego memo przypisujesz:
DynamiczneMemo.OnChange :=MemoChange;

0

Nie moge sobie z tym poradzić. U mnie nowe memo tworzy się w nowej zakładce TTabSheet i nie wiem jak z tego dostać się do memo.

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