logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Delphi - Jak usuwać dane z TStrings w TMemo przy przekroczeniu limitu?

leburaque 12 Maj 2011 12:05 3678 4
REKLAMA
  • #1 9497772
    leburaque
    Poziom 17  
    Posty: 488
    Pomógł: 4
    Ocena: 111
    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ą:
    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ć:

    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.

    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ę.
  • REKLAMA
  • Pomocny post
    #2 9497868
    ma rfi
    Poziom 12  
    Posty: 32
    Pomógł: 4
    while Memo1.Lines.Count > 10 do Memo1.Lines.Delete(0);
  • REKLAMA
  • #3 9498006
    leburaque
    Poziom 17  
    Posty: 488
    Pomógł: 4
    Ocena: 111
    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:

    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ł:)
  • REKLAMA
  • Pomocny post
    #4 9498076
    ma rfi
    Poziom 12  
    Posty: 32
    Pomógł: 4
    if Length(Memo1.Text) ...
  • #5 9498297
    leburaque
    Poziom 17  
    Posty: 488
    Pomógł: 4
    Ocena: 111
    Dziękuję i pozdrawiam:)
REKLAMA