Autor Téma: Ulozenie rukovete TStrings  (Přečteno 168 krát)

Offline wwlado

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
Ulozenie rukovete TStrings
« kdy: 05-04-2020, 00:18:48 »
Dobry den.

Potreboval by som poradit. Mam jeden editor (synEditor) v ktorom by som chcel editovat viacere subory. Mám vytvorenu databázu z dynamickych premennych, ktore obsahuju premennu TStrings.
Textové subory sa nacitavaju do databázy zo suboru:
 (Este dodam, ze Atom je bunka databazy. Atom^.List : TStrings; MyEdit je hlavny edit typu SynEdit)
Kód: [Vybrat]
      {$I-}
      Assign  (f, A+'SaveOpenFiles.txt');
      Reset   (f);
      While Not Eof(f) Do
       Begin
        ReadLn(f, S);
        If FileExists(S) Then
         Begin
          aWrite(ExtractFileName(S), atLiblary, False, paUnit);
          If cAtom<>Nil then
           Begin
            cAtom^.Str := S;
            if cAtom^.List=Nil Then cAtom^.List:= TStringList.Create;
            cAtom^.List.LoadFromFile(S);  <----- Tu sa nacitavju subory
            cAtom^.Hide:= False;
           End;
         End;
       End;
      Close   (f);
      If IOResult<>0 Then Result:='Read error. Can not load List file!'
                     Else Result:='List file is loadded.';
      {$I+}

Prepinanie Editacie jednotlivych textov:
Kód: [Vybrat]

   If uAtom<>Nil Then                 
     Begin
      MyEdit.Lines:= uAtom^.List;   <--- Vlozenie Textu z DB do Editu
      uTabName    := uAtom^.Name;
      uFileName   := uAtom^.Str;
     End;

Myslel som, ze sa takym sposobom predava iba adresa komponentu (TStrings). A texty v databaze sa daju takymto sposobom editovat. No pri editacii sa mi text v databaze nemeni.
Aky je postup aby som adresu TStrings z Editu (MyEdit.Lines) nasmeroval na uAtom^.List. Aby Editor pouzival TStrings ktory je ulozeny v databaze.

Offline wwlado

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
Re:Ulozenie rukovete TStrings
« Odpověď #1 kdy: 05-04-2020, 08:54:31 »

Offline wwlado

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
Re:Ulozenie rukovete TStrings
« Odpověď #2 kdy: 05-04-2020, 13:30:18 »
Nakoniec som to len zmenil strategiu na kopirovanie textu pomocou funkcie Assign a takto to funguje.
Kód: [Vybrat]
// --- Zmena ---
  If uAtom<>Nil Then uAtom^.List.Assign(MyEdit.Lines);
 TabInfo;
 if uAtom<>Nil Then
  Begin
   // -- Zmena -- MyEdit.Lines:= uAtom^.List;
    MyEdit.Lines.Assign(uAtom^.List);
   Status ('File: '+uFileName, 0);
  End Else Status ('Can not open unit!', 3);



Je zaujimave, ze vsade na forach sa riesil opacny problem. Nedokazali vytvorit kopiu. Priklad:
Kód: [Vybrat]
Var A, B : TStrings;
A:=B;
Stale ked prepisu B, prepise im to aj text v A. Nedokazali spravit zalohu textu. Tento problem riesili prave funkciou A.Assign(B);