String na TStringsList

2011-07-11 23:44
0

Witam. Mam w komórce w listview jakiś tekst z kilkoma liniami:

linia 1
linia 2
linia 3
linia 4

Chcę te linie dodać z osobna do TStringList bym mógł np. potem usunąć linię pierwszą itp.

Próbowałem tak:

s.Add(Lista.Items.Item[1].SubItems[5]);

Tylko że w ten sposób całą komórkę dodaje jako jeden String w StringList. Jak to podzielić na pojedyncze?

Zawsze używałem do tego wizualnego Memo, tzn do tego dodawałem sobię linie i potem mogłem usuwać, modyfikować itp, jednak to rozwiązanie mi i innym wydaje się nieprofesjonalne, chcę się przenieść na stringlist no ale z tego powodu na razie nie mogę :/

Jak mogę to zrobić?
Pozdrawiam

Pozostało 580 znaków

2011-07-12 00:18
0

Czytam to kilka razy i nie mogę zrozumieć co chcesz osiągnąc. Pokazujesz kod:

s.Add(Lista.Items.Item[1].SubItems[5]);

Jeżeli S to TStringList, a Lista to TListView to przecież dodajesz piąty subitem (fizycznie siódma kolumna dla widoku vsReport) elementu o indeksie 1 (czyli fizycznie drugi wiersz dla widoku vsReport). Możesz przechowywać cały wiersz w TStringList i zrobisz to w pętli. Najpierw tworzysz lub ewentualnie jak już jest stworzona to czyścisz TStringList, później dodajesz Caption, a później w pętli SubItemy. Napisz może po ludzku przykład co masz w wierszu w swoim TListView i co później chcesz mieć w TStringList. Bo podany przez Ciebie kod spowoduje, że wspomniany tekst masz w jednym wierszu w TStringList. A wiadomo cała zawartośc TStringList bez podziału na wiersze będzie w S.Text. A i dodawanie tekstu do widocznego Memo jeżeli nie trzeba go prezentować użytkownikowi jest bez sensu, do tych celów wykorzystuje się właśnie niewizualne obiekty typu TStringList.


edytowany 2x, ostatnio: olesio, 2011-07-12 00:21

Pozostało 580 znaków

2011-07-12 00:38
0

Chodzi mi by jedną komórkę która zawiera adresy www, konwertowało na stringlist tak by każdy adres (czyli linia) była osobno, bym np. pierwszą linię mógł usunąć za pomocą s.delete(0);

Zrobiłem to tymczasowo tak, że to memo konwertuje mi string na stringlist. Tzn string trafia do memo, i potem linie memo do stringlist. Taki rezultat właśnie porządam, ale czy to nie amatorskie używać w ten sposób memo? Może da się w lepszy sposób?

  temp.Text:=(Lista.Items.Item[1].SubItems[5]);  // do memo dodaje moją komórke czyli kilka linii (lub czasami jedna)
  linki:=TStringList.Create; // tworzę stringlist o nazwie linki
  linki.AddStrings(temp.Lines);  // dodaje linie memo do stringlist

Lista.Items.Item[1].SubItems[5] to przykładowa komórka

edytowany 4x, ostatnio: verona94, 2011-07-12 00:40

Pozostało 580 znaków

2011-07-12 00:45
O_o
0

Przypisz ten twój tekst do StringList.Text a potem sobie używaj StringList.Lines ;)


O̾..͠o
Nie StringList.Lines ale StringList.Strings albo po prostu StringList - pelsta 2011-07-12 08:16
A racja :) - O_o 2011-07-12 10:46

Pozostało 580 znaków

2011-07-12 00:46
0
  linki:=TStringList.Create; // tworzę stringlist o nazwie linki
  linki.Text:=Lista.Items.Item[1].SubItems[5];
  linki.Delete(0);
edytowany 1x, ostatnio: pelsta, 2011-07-12 00:47

Pozostało 580 znaków

2011-07-12 00:58
0
pelsta napisał(a)
linki:=TStringList.Create; // tworzę stringlist o nazwie linki
linki.Text:=Lista.Items.Item[1].SubItems[5];
linki.Delete(0);

To działa tak jak chciałem, dzięki :) !

Pozostało 580 znaków

2011-07-12 01:54
0

A teraz wiem o co Tobie chodziło. Jakoś po czytaniu pierwszego posta umykalo mi pierwsze zdanie Mam w komórce w listview jakiś tekst z kilkoma liniami. No nic, ważne że problem rozwiązany.


Pozostało 580 znaków

Liczba odpowiedzi na stronę

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