z listview do memo

0

Siema. Mam listview z 3 kolumnami i chciałbym przenieść to jakoś do memo tak że jeden wiersz w listview to jedna linia w memo, kolumny w z listview w memo mogą być rodzielone np. "-" lub po prostu spacją. Jak to mogę zrobić bo nie mam pomysłu, bo nie ma czegoś takiego jak listview1. text czy innego prostego wyjścia.

Memo:

kolumna1a - kolumna 2a - kolumna 3a
kolumna1b - kolumna 2b - kolumna 3b
kolumna1c - kolumna 2c - kolumna 3c
kolumna1d - kolumna 2d - kolumna 3d
kolumna1e - kolumna 2e - kolumna 3e

V9
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 12 lat
  • Postów:20
0
Kopiuj
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j,k: Integer;
  txt: string;
  sl: TStringList;
begin
  sl:= TStringList.Create;
  try
  for i:=0 to ListView1.Items.Count - 1 do
  begin
    txt:= ListView1.Items.Item[i].Caption;
    for j:=0 to ListView1.Items.Item[i].SubItems.Count - 1 do
      txt:= txt + #09 + ListView1.Items.Item[i].SubItems[j]; //#09 to kod znaku Tab
    sl.Add(txt);
  end;

  for k := 0 to sl.Count - 1 do
  memo1.Lines.Add(sl[k]);
  finally
  sl.Free;
  end;
end;
AL
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:1
0

Jak napisać kody żeby tylko jedną zaznaczoną pozycję w TListview przeniosło do memo???

olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

Najprościej to tak:

Kopiuj
var
  S : string;
  I : integer;
  LI : TListItem;
begin
  LI := ListView1.Items[ListView1.ItemIndex];
  if Assigned(LI) then
  begin
    S := LI.Caption;
    for I := 0 to LI.SubItems.Count - 1 do
    begin
      S := S + #09 + LI.SubItems[I];
    end;
    Memo1.Lines.Add(S);
  end;
end;

I polecam poczytać kursy wyjaśniające podstawy to sam będziesz ogarniał tak banalne kwestie :)


Pozdrawiam.
0

A czy mógłby kolego napisać kilka zdań w jaki sposób to działa? Tak skrótowo.

olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

Spróbuję...

Kopiuj
// 1
var
  S : string;
  I : integer;
  LI : TListItem;
begin
// 2
  LI := ListView1.Items[ListView1.ItemIndex];
// 3
  if Assigned(LI) then
  begin
  // 4
    S := LI.Caption;
    // 5
    for I := 0 to LI.SubItems.Count - 1 do
    begin
      // 6
      S := S + #09 + LI.SubItems[I];
    end;
    // 7
    Memo1.Lines.Add(S);
  // 8
  end;
end;

1 - deklaracje zmiennych - tutaj chyba nie ma co tłumaczyć za bardzo, deklarujemy tylko potrzebne zmienne.
2 - zmiennej typu TListItem czyli elementowi dodawanemu zwykle lub odczytywanemu z ListView (w tym przypadku z ListView1) przypisywany jest wybrany element z tego ListView'a (własność ItemIndex to zaznaczony element).
3 - jeżeli zmienne LI jest rózna od nil, co sprawdza funkcja Assigned (czyli to, co jest w zmiennej LI jest inne od wartości "pusta" to znaczy, że element lub cału wiersz w ListView1 został wybrany, jeżeli nie to LI = nil, a na zmiennych typuów obiektowych, które zawierają nil nie można operowac, bo otrzymamy wyjątek Access Violation od kompilatora) i wtedy rób to co poniżej...
4 - zmiennej S przypisz własnośc Caption zmiennej LI (czyli faktycznie pierwszą kolumne ListView1 (te o indeksie 0).
5 - wykonaj pętle na zmiennej I na pozostałych kolumnach od zera (bo taki indeks ma druga fizycznie kolumna, a ostatnia ma indeks równy ilosć SubiItemów czyli Subitems.Count - 1).
6 - do zmiennej S dodaj to co już wniej jest plus znak tabulacji (kod ASCII #09 lub #09) oraz kolejny SubItem (czyli kolumna i indeksie, ktorego numer znajduje się w zmiennej I.
7 - zawartość zmiennej S jest dodawana do elementów Memo1.
8 - koniec bloku kodu rozpoczętego od linii opisanej numerem 3.
Ufff, przyznam, że tłumaczenie oczywistych oczywistości trwa dłużej niż samo napisanie kodu, bo wydawało mi się, że kod jest na tyle prosty, że wszystko idzie zrozumieć. Radzę na prawdę poczytać kursy z podstawami, pogooglować samodzielnie za informacjami co robią dane elementy języka, bo nie sądze aby za każdym razem ktoś tłumaczył Tobie jakiś kod linijka po linijce, po prostu sam musisz chcieć się tego nauczyć i zrozumieć co "robi" dany fragment kodu. Z czasem jak poznasz podstawy nie powinno to być dla Ciebie trudne. Według mnie Delphi to raczej łatwy język nawet na start nauki, bo łatwo można zrozumieć podstawy, także dzięki dużej ilości materiałów łatwych do znalezienia w Internecie.


Pozdrawiam.
edytowany 1x, ostatnio: olesio
0

A ten znak tabulacji do czego służy? jak to rozumieć w odniesieniu do Delphi.

olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

Służy do rozdzielenia tych wpisów, tak jakbyś w edytorze obsługującym taki znak, jak na przykład Notatnik wcisnąl Tabulator. Równie dobrze może być spacja, znak końca linii, czy co tam chcesz.


Pozdrawiam.
0

A mógłby kolega napisać jak działają te instrukcje na plikach.
zapis
if SaveDialog1.Execute then
SaveDialog1.FileName;
plik := TFileStream.Create(SaveDialog1.FileName,__ fmCreate or fmShareCompat);
__
odczyt
if OpenDialog1.Execute then
OpenDialog1.FileName;
plik := TFileStream.Create(OpenDialog1.FileName, __fmOpenRead or fmShareDenyWrite);
__
szczególnie te podkreślone

olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

Coś dziwnie ten kod wygląda. Ale pewnie zamiar jest taki, że po kliknięciu na Otwórz / Zapisz w Open / Save Dialogu - otwierany / zapisywany jest plik przy użyciu klasy TFileStream. O nazwie podanej w Open / Save Dialogu. Co do flag użytych przy odczycie / zapisie to sobie wygoogluj, po to jest google i help od IDE tam wszystko jest wyjaśnione. Nie ma sensu wyjaśniać Tobie co linijkę, co robi dany kod. Tak się niczego nie nauczysz. Także googluj, myśl, kombinuj samodzielnie i najważniejsze staraj się samodzielnie rozumieć kod.


Pozdrawiam.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 20 godzin
0

Tak a propos, zamiast:

Kopiuj
    S := LI.Caption;
    for I := 0 to LI.SubItems.Count - 1 do
    begin
      S := S + #09 + LI.SubItems[I];
    end;

wystarczy:

Kopiuj
S:=LI.Caption+#9+StringReplace(LI.SubItems.Text,#13,#9,[rfReplaceAll]);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.