Forum Delphi.cz

Delphi => Obecné => Téma založeno: Marek.V 04-02-2019, 23:13:26

Název: ListView
Přispěvatel: Marek.V 04-02-2019, 23:13:26
Klucí, co mužu dělat špatně?
https://delphi.cz/post/ListView.aspx

ViewStyle     vsList               // pokud dam vsReport tak se v komponentě ListView nic nevypisuje
ShowColumnHeader   true 
GroupView  true     

https://postimg.cc/5YwcmM6D

Kód: Delphi [Vybrat]
  1. procedure TForm5.btn1Click(Sender: TObject);
  2. var
  3.   li: TListItem;
  4. begin
  5.   li := listview2.Items.Add;
  6.   li.Caption := 'První sloupec';
  7.   li.SubItems.Add('Další sloupec');
  8.   li.SubItems.AddObject('Sloupec 3', nil ); // případná reference na jiný objekt
  9. end;

Vidím jen první sloupec a nejde vidět ta vrchní lišta čislo řádku, atd
Název: Re:ListView
Přispěvatel: Radek Červinka 04-02-2019, 23:52:19
vsReport, a chybí ti Columns
Název: Re:ListView
Přispěvatel: Marek.V 05-02-2019, 07:33:02
http://img24.cz/images/24099851929396660832.png
vsReport nastaven a , a 3 x Columns přidan.
Při klikaní na button to nic neděla  :(
Název: Re:ListView
Přispěvatel: Delfin 05-02-2019, 08:02:54
Protoze potrebujes predat list view informaci o skupine, v niz ma polozka byt umistena, napr:

Kód: Delphi [Vybrat]
  1. var
  2.   li: TListItem;
  3. begin
  4.   li := listview2.Items.Add;
  5.   li.GroupID := 0; // timto se polozka prida do skupiny s ID 0
  6.   ...
  7. end;
Název: Re:ListView
Přispěvatel: Marek.V 05-02-2019, 10:31:27
Děkují moc  :)
A když budu mít 3 sloupce.
Bych potřeboval prohledat celý 3 sloupec a pokud najde hledaný text, vypsat vše co je na danem řadku ve všech 3 sloupcích?
Tři sloupce tak třeba 3X  s.s1,s2:string;
Název: Re:ListView
Přispěvatel: Delfin 05-02-2019, 11:32:16
Predne bych doporucil zmenu navrhu aplikace. List view by mel slouzit jen k prezentaci dat; data samotna by byla ulozena v separatnim kontejneru jimz by se iterovalo a jehoz zmeny by se promitaly v tom prezentacnim list view (pripadne dalsich komponentach).

Chapu ovsem, ze jde dost mozna i o skolni projekt (jenz ocekava programovani nespravnymi technikami). Pokud tomu tak je, zkus si uvedomit anatomii list view. Mas kolekci polozek Items (jehoz text se zobrazuje v radku pro sloupec s indexem 0), a kazda tato polozka ma pak kolekci SubItems (jejichz texty se zobrazuji ve sloupcich s indexy vetsimi 0). Ty tedy pro to hledani potrebujes proiterovat kolekci Items a pro kazdou z polozek sahnout do kolekce SubItems.
Název: Re:ListView
Přispěvatel: Stanislav Hruška 05-02-2019, 11:35:44
Školský projekt to nie je, keď s Delphi robil naposledy pred 10 rokmi :)
Citace
Predne bych doporucil zmenu navrhu aplikace.
Kvôli tomu som sa ho pýtal, do čoho si chce dané údaje ukladať. Zachoval sa ako pravý partizán :-X  a nič neprezradil.
Název: Re:ListView
Přispěvatel: Delfin 05-02-2019, 11:43:47
Školský projekt to nie je, keď s Delphi robil naposledy pred 10 rokmi :)
Citace
Predne bych doporucil zmenu navrhu aplikace.
Kvôli tomu som sa ho pýtal, do čoho si chce dané údaje ukladať. Zachoval sa ako pravý partizán :-X  a nič neprezradil.

Studovat se da v jakemkoli veku :) Popravde me mimo nejake hry nenapada realne vyuziti hledani "textu bunek" zobrazenych ve 3. sloupci s nahradou takoveho textu v celem radku. Ale kdovi, treba mam omezenou predstavivost nebo jsem si spatne vylozil zadani :)
Název: Re:ListView
Přispěvatel: Marek.V 05-02-2019, 11:57:25
Jsem našel toto

Kód: Delphi [Vybrat]
  1. lvItem := ListView1.FindCaption(0,      // StartIndex: Integer;
  2.                                   'Pavel',   // Search string: string;
  3.                                   True,   // Partial,
  4.                                   True,   // Inclusive
  5.                                   False); // Wrap  : boolean;
Což mi zvladne vyhledat text v prvním odstavcí  :)

Kód: Delphi [Vybrat]
  1. Label1.Caption := Listview1.Items[1].Caption
Toto take ok, ale furt první sloupec  >:(

Jak na dalši sloupce?
Název: Re:ListView
Přispěvatel: KarelHorky 05-02-2019, 12:37:35
Když ses ve vedlejším vláknu naučil pracovat s AdvStringGrid (mocný nástroj), proč se teď pokoušíš zkrotit ListView vlastně do podoby StringGridu (vsReport) ? AdvStringGrid má metodu HideColumn, kterou skryješ libovolný počet sloupců, do kterých si zapíšeš tajné informace. A procházet přes řádky gridu není žádný problém.
Název: Re:ListView
Přispěvatel: Marek.V 05-02-2019, 12:44:21
Protože k AdvListView toho moc neení, tak se učím první na tom klasickem ListView  ;)
Tak už vyřešeno  ;D
Název: Re:ListView
Přispěvatel: Marek.V 10-02-2019, 20:04:20
Zdravím.
Tak s komponentou AdvListview jsem při ukladaní pohořel.
Uložím a i načtu to do všech format, co tato komponenta podporuje.
Ale když mam v komponentě jen jeden řadek, zhroutí se to.

Tak jsem zkusil takto
Kód: Delphi [Vybrat]
  1. begin
  2. myStringList := TStringList.Create;
  3. for i := 0 to AdvListView1.Items.Count -1 do
  4.      begin
  5.       Item := AdvListView1.Items.Item[i];
  6.       s := Item.Caption + '|' + Item.SubItems[0] + '|' + Item.SubItems[1];
  7.       myStringList.Add(s);
  8.       end;
  9. myStringList.SaveToFile('d:\ListView.txt');
  10. myStringList.Free;
  11. end;
.

Jak to pak nejjednodušejí načíst zpět?
Kód: Delphi [Vybrat]
  1. begin
  2. myStringList := TStringList.Create; //
  3. myStringList.LoadFromFile('d:\buddys.txt');
  4.  
  5. for i  := 0 to myStringList.Count-1 do
  6.                                  begin
  7.  
  8.                                  end;
  9. end;
Název: Re:ListView
Přispěvatel: Stanislav Hruška 10-02-2019, 21:25:11
Ja tam síce chybu nevidím, ale daj sem chybovú hlášku. SaveToFile máš mať správne v bloku try...
Název: Re:ListView
Přispěvatel: Marek.V 10-02-2019, 21:53:59
Tam neni chyba.
Mně zajima ten druhý zdrojak.
Je tam dotaz.
Jak to pak nejjednodušejí načíst zpět?
Název: Re:ListView
Přispěvatel: Stanislav Hruška 10-02-2019, 22:21:48
Citace
Tam neni chyba.
Mně zajima ten druhý zdrojak.
To som si uvedomil až po odoslaní príspevku :(
Keď sa na to pozerám laickým okom, tak vidím nasledovný postup (parsovania textu)
Název: Re:ListView
Přispěvatel: Stanislav Hruška 10-02-2019, 22:24:29
A cyklus nebude podľa myStringList.Count, lebo je ešte prázdny. Bude podľa počtu riadkov. Niečo také som nerobil, ale v podobných prípadoch sa používa niečo také "while not MyFile.Eof do"
Název: Re:ListView
Přispěvatel: Karel.V 10-02-2019, 23:04:07
Není prázdný, protože do něj znovu načítám ty uložena data.
myStringList.LoadFromFile('d:\ListView.txt');

Rozsekat to pomoci copy bych zvadl.
Pak je další možnost, použit další StringList a jeho funkcí delimiter.

Proto se ptám tady profilu, na ten nejjednodušší způsob, jak na to.
Možná ještě poradí něco lepšího, a já se zas přiučím  :P
Název: Re:ListView
Přispěvatel: Delfin 11-02-2019, 04:50:08
Tak nejjednodussi je export a import pomoci nativnich metod TAdvListView, coz jsi psal ze umis. Proc si ulohu takto komplikujes? Potrebujes Tebou uvedeny format?
Název: Re:ListView
Přispěvatel: Delfin 11-02-2019, 05:31:36
P.S. Pokud ukladani nativnim zpusobem nefunguje, zareportuj chybu autorum. Jedine tak se totiz da zaridit posun kvality produktu ;)
Název: Re:ListView
Přispěvatel: Karel.V 11-02-2019, 22:16:21
Vyřešeno
Název: Re:ListView
Přispěvatel: Karel.V 11-02-2019, 22:20:38
Jinak AdvListview podporuje par formát, do kterých se da ukládat a zpětně načitat.
Pokud mam v AdvListview vice jak 1 řádek, tak je to ok a ukládat i načitat to jde do všech formátu.
Pokud tam však nechám jen jeden řádek, při načítaní mi vyskočí hláska, že má problém s načtením tohoto souboru.
A děla to u všech formátu.
Nemohu přijít na to, kde dělám kopanec.