Autor Téma: Zmeniť poradie TListBoxItem v TListBox  (Přečteno 459 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Zmeniť poradie TListBoxItem v TListBox
« kdy: 03-09-2024, 19:48:10 »
Skúšam cvične toto: https://delphi.cz/post/Jednoducha-FMX-mobilni-Android-aplikace-krok-za-krokem.aspx
Nikde neviem nájsť, ako v čase návrhu môžem zmeniť poradie TListBoxItem v TListBox. Je to možné?
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline tomak586

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 2
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #1 kdy: 03-09-2024, 23:54:16 »
Ano možné to je. Já to řeším vyjmutím a novým vložením TListBoxItem.

Kód: Delphi [Vybrat]
  1.   var SelectedIndex := lbName.ItemIndex;
  2.   if (SelectedIndex < lbName.Count - 1) then
  3.   begin
  4.     var Item: TListBoxItem := lbName.ListItems[SelectedIndex];
  5.     lbName.RemoveObject(Item);  // remove
  6.     lbName.InsertObject(SelectedIndex + 1, Item); // insert
  7.     lbName.ItemIndex := SelectedIndex + 1; // selected item
  8.   end;
  9.  

Tento kód ti posune vybraný TListBoxItem o jednu pozici dolu. Pokud chceš nahoru tak budeš kontrolovat SelectedIndex je vetší jak 0 a misto přičítaní budeš odečítat. lbName je TListBox.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #2 kdy: 04-09-2024, 10:10:20 »
Dúfal som, že to urobím pomocou ItemIndex. Ale TListBoxItem nič podobné nemá.
Len nerozumiem/neviem kedy a kde mám spustiť Tvoj kód.
Žiaľ, help na wiki mi pre FMX nefunguje už tretí deň.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline tomak586

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 2
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #3 kdy: 04-09-2024, 22:46:24 »
Třeba jsem tě špatně pochopil, ale měl jsem za to že máš ListBox a v něm chceš změnit pořadí položek, které jsou typem TListBoxItem. A ten můj kod ti posune vybranou položku o jednu pozici dolu. Používam to na tlačítko down a kod kde odečítám používám pro tlačítko up. Metodou InsertObject určuješ index kam TListBoxItem vložíš tak mužeš libovolne v ListBoxu, jen jsi musiš hlídat rozsah aby jsi nebyl mimo.

var Item: TListBoxItem := ListBox1.ListItems[2]; // vyberu polozku na treti pozici
ListBox1.RemoveObject(Item);  // Odeberu vybranou polozku z ListBoxu
ListBox1.InsertObject(10, Item); // Vlozim polozku na jedenactou pozici

Offline vandrovnik

  • Padawan
  • ******
  • Příspěvků: 1585
  • Karma: 52
    • Verze Delphi: 11.3
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #4 kdy: 05-09-2024, 08:51:09 »
Nestačí tohle?
Kód: Delphi [Vybrat]
  1.  ListBox1.Items.Move(2, 1);

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #5 kdy: 05-09-2024, 10:17:23 »
Ďakujem za odpovede. Len Vám ušiel malý detail. Má to byť v design time.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Padawan
  • ******
  • Příspěvků: 1585
  • Karma: 52
    • Verze Delphi: 11.3
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #6 kdy: 05-09-2024, 10:24:52 »
Tam si prostě rozklikneš vlastnost Items a změníš, co potřebuješ.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #7 kdy: 05-09-2024, 11:17:13 »
To akosi nejde

Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Padawan
  • ******
  • Příspěvků: 1585
  • Karma: 52
    • Verze Delphi: 11.3
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #8 kdy: 05-09-2024, 11:19:05 »
Dvakrát kliknu na (TStrings)...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #9 kdy: 05-09-2024, 14:26:20 »
Jáj, takto. Ja som išiel na to cez object inspector. Dvojklik mi nenapadol. To je úplne iná pesnička. Mám inú situáciu. Omnoho lepšiu  :)  Ten dvojklik bol na TListBox
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Padawan
  • ******
  • Příspěvků: 1585
  • Karma: 52
    • Verze Delphi: 11.3
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #10 kdy: 05-09-2024, 15:46:05 »
Jáj, takto. Ja som išiel na to cez object inspector. Dvojklik mi nenapadol. To je úplne iná pesnička. Mám inú situáciu. Omnoho lepšiu  :)  Ten dvojklik bol na TListBox

No jo, jenže to dialogové okno mají, řekl bych, rozbité - např. zrovna ta šipka pro přesun položky mi v něm funguje jednou a pak už ne, okno se musí zavřít a znovu otevřít.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7413
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Zmeniť poradie TListBoxItem v TListBox
« Odpověď #11 kdy: 05-09-2024, 16:58:15 »
Tak som to vyskúšal a funguje ako má.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.