Перейти к содержанию
Fire Monkey от А до Я
  • 0

стандартная работа с ListBox (delete,rename,move)


neo

Вопрос

Здравствуйте товарищи знатоки!

 

Недавно решил перейти на Firemonkey чтоб создавать мобильные приложения...

но к сожалению обнаружил что работа в нём сильно отличается =( и информации в интернете очень мало...

и в дельфи демках тоже подобных примеров нету =(

 

не понимаю как можно узнать информацию если ты не работаешь в большом коллективе программистов у которых есть связь с западными колегами

которые участвовали в создании тех или иных компонентов...

 

сейчас я разбираюсь с ListBox

и хочу научится делать стандартные вещи....

 

например сначала я попытался создать 2 колонки как в VCL но оказалось так уже нельзя

пол дня шерстил интернет и методом тыка научился делать это через Detail ... ok! =)

 

Add:

добавлять пункты научился так

  LItem:=TListBoxItem.Create(ListBox1)

  ...

  ListBox1.AddObject(LItem);

 

Delete:

поскольку DeleteSelected больше нет

удаляю пункт сл образом

  ListBox1.Items.Delete(listbox1.Selected.index)

но как проверить существует ли item?

иначе возникает ошибка когда удаляешь и ничего не выделено

 

Rename:

переименовать item не получается =(

 

разве что вставить пункт на место выделенного listbox1.InsertObject(... ,...);

а сл удалить

 

Move:

поменять позицию у выделенного пункта тоже не получается

 

Подскажите пожалуйста ответы на эти казалось бы простые вопросы!

думаю это поможет очень многим начинающим ФаерМанкерам =)

Изменено пользователем neo
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

во первых колонки есть! смотреть внимаельно в опциях TListBox

Columns = 1, поменяй на 2

 

для Add есть еще один способ, просто указать парент

  LItem:=TListBoxItem.Create(nil);
  LItem.Parent := ListBox1;
  ...

для Delete

if Assigned(ListBox1.Selected) then
  ListBox1.Items.Delete(listbox1.Selected.index);

зачем нужно делать переименование??

 

а перемещение где-то было в стандартных демо если не ошибаюсь

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

во первых колонки есть! смотреть внимаельно в опциях TListBox

Columns = 1, поменяй на 2

 

для Add есть еще один способ, просто указать парент

  LItem:=TListBoxItem.Create(nil);
  LItem.Parent := ListBox1;
  ...

для Delete

if Assigned(ListBox1.Selected) then
  ListBox1.Items.Delete(listbox1.Selected.index);

зачем нужно делать переименование??

 

а перемещение где-то было в стандартных демо если не ошибаюсь

 

это не те колонки) проверьте ... просто идёт размещение в две колоны.. а пункты раздельные... и выделение идёт раздельное...субитомов больше нету

 

а наличие я вот так проверяю: if not (Listbox1.Selected=nil) then

 

в ListView переименование легко делается... вот и хотел узнать как в ListBox

 

у меня XE7 в ней точно примеров нет как перемещать пункты...

и самое главное в ListView тоже не получается пункты сдвинуть

 

просто например мне в настройках нужно по желанию менять очередность пунктов

 

спасибо что ответили надеюсь подобные темы для начинающих будут развиваться

Ссылка на комментарий
  • 0

1. Все контролы в ФМ являются контейнерами.

2. Итемы внутр листбокса являются контролами, а значит и контейнерами, следовательно вы можете делать там внутри что угодно хоть колонки, хоть кружочки, хоть что...

3. поменять местами итемы можно так:

ListBox1.ItemsExchange( ListBox1.ItemByIndex(0), ListBox1.ItemByIndex(1)  );

4. Чтобы в Листбокс итеме поменять текст, нужно поменять его паблишед свойство Text, делается это так:

ListBox1.ItemByIndex(1).Text := '123';
Ссылка на комментарий
  • 0

 

1. Все контролы в ФМ являются контейнерами.

2. Итемы внутр листбокса являются контролами, а значит и контейнерами, следовательно вы можете делать там внутри что угодно хоть колонки, хоть кружочки, хоть что...

3. поменять местами итемы можно так:

ListBox1.ItemsExchange( ListBox1.ItemByIndex(0), ListBox1.ItemByIndex(1)  );

4. Чтобы в Листбокс итеме поменять текст, нужно поменять его паблишед свойство Text, делается это так:

ListBox1.ItemByIndex(1).Text := '123';

ага отлично) самое главное что точно также пытался менять через ItemsExchange но ошибку выдавал.. наверно где-то была тупая опечатка

 

а у ListView как? не знаете? там нету ItemsExchange

 

мне на ум только такая ерунда приходит:

    Litem:=ListView1.Items.Insert(ListView1.Selected.Index-1);

    LItem.Text:=listview1.Items.Item[ListView1.Selected.Index].Text;

    LItem.Detail:=listview1.Items.Item[ListView1.Selected.Index].Detail;

    Listview1.Items.Delete(ListView1.Selected.Index);

 

это чтоб пункт вверх сдвинуть ну и соответственно вниз то плюс

Ссылка на комментарий
  • 0

Итак вот что получилось

 

//сдвинуть выделенный пункт вверх

procedure TForm1.Up1Click(Sender: TObject);
begin
  if Assigned(ListBox1.Selected) and (listbox1.Selected.index>=1) then
  ListBox1.ItemsExchange( ListBox1.ItemByIndex(listbox1.Selected.index), ListBox1.ItemByIndex(listbox1.Selected.index-1)  );
end;

 

//сдвинуть выделенный пункт вниз
procedure TForm1.Down2Click(Sender: TObject);
var
  NextItem: Integer;
begin
  if Assigned(ListBox1.Selected) and (listbox1.Selected.index<ListBox1.Items.Count-1) then
  begin
  NextItem:=Listbox1.Selected.Index+1;
  ListBox1.ItemsExchange( ListBox1.ItemByIndex(listbox1.Selected.index), ListBox1.ItemByIndex(listbox1.Selected.index+1)  );
  Listbox1.ClearSelection; //к сож. нужно добавить ClearSelection и NextItem иначе идёт мультиселект
  listbox1.ItemIndex:=NextItem;
  end;

end;

Изменено пользователем neo
Ссылка на комментарий
  • 0

Возможно будет полезно, вот тут немного про ListBox и его особенности (глюки) описывал. Кое что решил:

 

http://fire-monkey.ru/topic/949-posle-aktivatcii-tsearchbox-ne-vozvraschaetsia-indeks-novog/

Изменено пользователем Belov.V.
Ссылка на комментарий
  • 0

А как реализовать у ListBox и у ListBoxItem длинный (продолжительный) Tap?

Т.е. нужно вызвать контекстное меню для выбранного (выделенного) ListBoxItem`а. Для Windows продолжительный Tap - это просто щелчок правой кнопкой мышки, а для Android - это продолжительный тап.

Например, чтобы удалить или расшарить то ,что лежит на ListBoxItem.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...