Wątek przeniesiony 2016-02-05 14:05 z Delphi i Pascal przez furious programming.

Szybkie usuwanie pustych linii z Memo

0

Witam,
mam problem z usuwaniem pustych linii z TMemo. Wiem jak to robić, ale działa to strasznie wolno, może coś poradzicie?

Mam powiedzmy 2000 linii w Memo, z czego co druga jest pusta - więc powinno zostać mi 1000 wierszy.

Mój kod:

DataMemo.Lines.BeginUpdate;
    for I := DataMemo.Lines.Count - 1 downto 0 do
      if DataMemo.Lines[I] = '' then
        DataMemo.Lines.Delete(I);
    DataMemo.Lines.EndUpdate; 

Proszę o wskazówki :)

0

Nie używać obiektów VCL. Jeśli masz Delphi od 2009 w górę możesz użyć klasy TDictionary (unit Generics.Collections). Operujesz wtedy na odpowiednich obiektach w pamięci i tylko po dodaniu/usunięciu czegoś z listy robisz zapis do Memo.
Ponadto jeśli faktycznie masz 2000 linii to Memo ma to do siebie, że całość ładujesz od razu do komponentu. Jest to bez sensu bo userowi i tak wyświetlisz 50-100 linii naraz gdyż więcej się na ekranie nie zmieści i trzeba to scrollować. Lepszym rozwiązaniem jest użycie np TListView i jego trybu VirtualMode.

0

Ahh sam nie wiem czmu sie na Memo uparłem :)
Zrobiłem teraz to na StringList i działa w sekunde,
pozdrawiam i dzięki za przypomnienie.

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