[Delphi] Zapis treści dynamicznego RichEdita do pliku i nie

0

Witam.

Mam mały problemik.
Kombinuje i niewiem jak to rozwiązać.
Za pomocą przycisku tworzę dynamicznie zakładke(na niej RichEdit) na TPageControl:

I := 1;
.
.
.
Var Kartka:TTabSheet;
    Notka :TRichEdit;
begin
  Kartka:=TTabSheet.Create(Notatnik);
  Kartka.PageControl:=Notatnik;
  Kartka.Parent:=Notatnik;
  Kartka.Tag := I;
  Kartka.Name := 'Karta'+IntToStr(I);
  Kartka.Caption := InttOStr(I);
  Notka:=TRichEdit.Create(Kartka);
  Notka.Align:=alClient;
  Notka.Visible:=True;
  Notka.Name := 'Notes'+IntToStr(I);
//  Notka.Lines.Clear;
  TControl(Notka).Parent:=Kartka;
  I := I + 1;

Teraz mam kilka takich zakładek utworzonych. Naciskam przycisk żeby zapisać treść obecnie aktywnego RichEdita:

var
  S : String;
  X : Integer;
begin
  If Notatnik.TabIndex <> -1 then
  begin
    If Zapisz.Execute then
    begin
      X := Notatnik.ActivePageIndex + 1;
      TRichEdit(FindComponent('Notes'+IntToStr(X))).Lines.SaveToFile(Zapisz.FileName);
      Notatnik.Pages[Notatnik.TabIndex].Destroy;
    end;
  end else I := 1;
end;

No i wywala mi błąd "Acces violation..." w lini

TRichEdit(FindComponent('Notes'+IntToStr(X))).Lines.SaveToFile(Zapisz.FileName);

Jak się z tym uporać??

PS. A jak wyczyścić richedita żeby w lines niebyło nazwy komponentu?? Mam w tworzeniu dynamicznym taką linie

 Notka.Lines.Clear; 

i wyrzuca mi błąd : "'Control 'Notes1' has no parent window ??
A jeszcze jedno bo bym zapomniał. Jak tworze tą zakładkę z RichEditem to jak zrobić zeby ta nowo utworzona była aktywna??

Myśłę że to wszystko :)

THX

0

Zamiast szukać komponentu użyj indeksowania komponentów na zakłądce:

if NazwaZakladki.Controls[0] is TRichEdit then
  (NazwaZakladki.Controls[0] as TRichEdit).Lines.SaveToFile('Nazwa pliku');

Oczywiście indeks nie musi równać się 0 ale można też przeszukać wszystkie komponenty:

var i: integer;
begin
  for i:=0 to NazwaZakladki.ControlCount-1 do begin
    if NazwaZakladki.Controls[i is TRichEdit then
      { reszta kodu ... }
  end;
end;

Taka metoda jest dużo prostsza ...

0

Zamiast szukać komponentu użyj indeksowania komponentów na zakłądce:

if NazwaZakladki.Controls[0] is TRichEdit then
  (NazwaZakladki.Controls[0] as TRichEdit).Lines.SaveToFile('Nazwa pliku');

Tak tylko NazwyZakładki też nie znam bo jest ona tworzona dynamicznie (znaczy się znam u mnie to "Notes1', kolejna to 'Notes2').
WIęc dalej stoje w miejscu. Jak sięodwołąć do Aktywnego RichEdita utworoznego dynamicznie wraz z zakłądką na PageControl ??

0

moze zamien ta linie

TRichEdit(FindComponent('Notes'+IntToStr(X))).Lines.SaveToFile(Zapisz.FileName);

na

(FindComponent('Notes'+IntToStr(X)) as TRichEdit).Lines.SaveToFile(Zapisz.FileName);

// Co za różnica? .. - detox

// nie wiem, nie bawilem sie tak ;) ale czasem podaja ta, czasem inaczej :)

0

Myśle, że cos nie tak jest z poleceniem FindComponent - spróbuj dla wyeliminowania błędu wywowałać sobie listę wszystkich komponentów na danej zakładce - i sprawdź czy ten RichEdit w ogóle tam widnieje.. - kiedyś też miałem podobny problem..

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