Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Delphi - TMemo i TStrings - odczyt i zapis

leburaque 12 Maj 2011 12:05 2775 4
  • #1 12 Maj 2011 12:05
    leburaque
    Poziom 17  

    Program który tworzę na bieżąco "wypluwa" dużą ilość komunikatów o działającym algorytmie. Większość rzeczy wyświetla się w Labelach itp, ale "przełomowe" elementy algorytmu wpisuję do TMemo. Zależy mi na tym, by wygodnie można było kopiować sobie efekty działania.

    Dotychczas wpisywałem do TMemo tekst za pomocą:

    Code:
    TMemo1.Lines.Add(_Napis_)


    Dodaję w ten sposób jak widzę nie jedną linijkę do obiektu TStrings, a ciąg znaków bez znaku kończącego - dobrze to rozumiem?

    Rzecz w tym, że TStrings ma jednak ograniczony rozmiar - co jest dla mnie nawet wygodne. Problemem jest jednak możliwość usunięcia początkowej części tekstu, kiedy dodawany już ma się nie zmieścić:

    Code:
    if Length(TMemo1.Lines^) + Length(_Napis_)) > 1000 then


    ...i tu chciałbym nauczyć się jakoś usuwać część danych z TStrings'ów. Rozumiem, że TStrings mogę traktować jak zwykłą tablicę odwołując się do indeksu np.

    Code:
    var Lines: TStrings
    
    ...
    Lines[1] = ...


    Czy to też dobrze rozumiem?

    Chciałbym zatem usuwać pierwszy element gdy ilość dodawanych przekroczy np. 10.

    Mam tutaj opis całej klasy:
    http://www.freepascal.org/docs-html/rtl/classes/tstrings.html

    Czy którąś z tych procedur mogę wykorzystać jako "usuwacz" pierwszej pozycji w liście? A jeśli tak - to czy klasa nadal będzie stabilnie działać, bez wysypywania się i bez podawania złych wartości?

    Bardzo dziękuję za każdą wskazówkę.

    0 4
  • Pomocny post
    #2 12 Maj 2011 12:41
    ma rfi
    Poziom 12  

    while Memo1.Lines.Count > 10 do Memo1.Lines.Delete(0);

    0
  • #3 12 Maj 2011 13:30
    leburaque
    Poziom 17  

    Bardzo dziękuję, działa:)

    Pytanie tylko mam do tego: skoro maksymalna ilość znaków przechowywana w TStrings określana tu jest limitem pola TMemo.MaxLength, to najlepiej byłoby znaleźć jakąś metodę która zwraca obecną ilość znaków w TStrings'ie, coś w stylu:

    Code:
    while Memo1.Lines.ObecnaIlośćZnaków > Memo1.MaxLength do Memo1.Lines.Delete(0);


    i takiej procedury/zmiennej/metody szukam. Jeśli mi wskażesz jakąś możliwość, to byłoby super, bo póki co zamierzam to robić ręcznie sumując długości wszystkich stringów w TStringsie (pomocna jest wartość Capacity). Twoja działa jak najbardziej, więc klikam oczywiście pomógł:)

    0
  • Pomocny post
    #4 12 Maj 2011 13:59
    ma rfi
    Poziom 12  

    if Length(Memo1.Text) ...

    0
  • #5 12 Maj 2011 15:27
    leburaque
    Poziom 17  

    Dziękuję i pozdrawiam:)

    0