• 0
Volodja

Подскажите какой выбрать компонент

Вопрос

Здравствуйте. 

Пишу на Delphi 7. В принципе нет сложностей с Delphi 10 для Win32.

Необходимо написать небольшую программку для Android (через Delphi 10 и FierMonkey). Функциональность совсем простенькая: запрос к БД, отображение на экране 3-4 полей, нажатие на запись - обновлений записи в БД (установка снятие bit). 

Подключение к БД сделал через DataSnap. С запросами к БД проблем нет, все работает без ошибок. С интерфейсом беда. Использую TGrid (описан как мультиплатформный). Долго боролся с заполнением грида - поборол. Но работает очень медленно, подлагивает, в общем работать, совсем некомфортно. 

Вопрос. Подскажите, какой выбрать компонент(ы) для реализации указанной функциональности. Такое ощущение, что TGrid на Androide вообще не используют. С пулом компонентов FireMonkey практически не знаком. Одноименные с Delphi 7 компоненты ведут себя не предсказуемо. Списки параметров, свойств и методов по-большому не совпадают. Просто теряюсь. Прошу помощи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

22 ответа на этот вопрос

  • 0

Сейчас посмотрел. Но там что-то другое. У меня данные заполняются быстро. Просто при тапе на экран то ли притормаживает, то ли еще что. Галочка (одно поле Check) то ставится, то нет. Думаю надо смотреть в сторону TListBox. Но как с ним работать совсем не ясно. От VCL отличается как небо и земля. Может есть варианты попроще?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
46 минут назад, Volodja сказал:

Может есть варианты попроще?

Нет. FMX - совсем другой фреймворк, его нельзя сравнивать с привычным вам VCL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Что же делать? Такую программу могу на VCL за 10 -15 минут накидать. Что здесь-то не так? Помогите хотя бы определиться с подходящим компонентом. Чтобы не распыляться и копать в каком-то определенном направлении, а не изучать подноготную всего зоопарка...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ну почти никто не пользуется этим гридом. Хотя у меня есть проект на windows. данные берет из http-запроса. все в принципе работает, но не айс, конечно, не VCL. Зато красиво

если на андроиде, то тем более там и смысла нет использовать грид.

Здесь есть ListView - наше всё. А еще ModernLV от ZuBy, который еще более наше всё

Anatoliy понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо. Что-то где-то проскакивало (по мере возможности изучаю материал, правда не систематично), что на TListBox или на TListView можно как-то наложить какой-то TGridPanelLayout. Я посмотрел. Даже добавил в этом Layoutе колонки, но при запуске ничего не вижу. У колонки всего два свойства SizeStyle и Value. Но к содержимому колонки это, видимо, не относится. Больше похоже на размеры колонки. Где можно посмотреть внятное описание работы с этими компонентами? 

Для работы с TGrid я данные из БД занес в массив, а в TGrid .GetValue и SetValue обновлял TGrid и массив.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, Volodja сказал:

на TListBox или на TListView можно как-то наложить какой-то TGridPanelLayout.

для начала можно использовать TListBox. он попроще в понимании и подходит для небольших объемов информации. На объемах от двух экранов и более начинает тормозить, там уже нужен ListView, у которого совсем другой подход.

Вкратце: у TListBox есть элементы, которые (если проводить аналогию с vcl) - просто панельки. На эти "панельки" можно накидать любые компоненты и, выставляя их свойства (начиная от текста и заканчивая выравниванием и стилем), уже регулировать отображение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, Volodja сказал:

какой-то TGridPanelLayout

Этот компонент - контейнер из сетки "панелек", Опять-таки, на каждую из этих панелек можно накидать чего-нибудь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

но это если производительность вообще непринципиальна ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо за ответы. Появилось какое-то понимание. Поправьте меня если я не прав.

У большинства компонентов FM нет свойств отображающих информацию (надписей и пр.). Но все компоненты являются контейнерами для других компонентов. Соответственно отображателями информации на компонентах (так сказать "высокого" уровня) являются прикрепленные к ним компоненты "низкого" уровня, имеющими такие свойства отображения информации (н-р, TLabel, TEdit, TCheckBox и т.д.). В общем что-то вроде бутерброда, у которого на самой верху TLabel. Я правильно понял?

Спасибо, kami.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Примерно так.
Кирпичи - это TRectangle TText и TImage . У них нет никакого стиля.

А TLabel и т.п. это уже довольно сложные штуки

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Т.е. алгоритм примерно вырисовывается такой (в приложении к моей задаче, см. выше):

1. Получение данных из БД

2. Очистка TListBox. (от предыдущих данных)

3. Вставка в нужном кол-ве TListBoxItem (в цикле). На каждый TListBoxItem кладем сколько надо TText, которые заполняем чем надо. Можно сюда же положить TChecBox или TSwitch для наглядности. 

Здесь навскидку  вопрос.

При очистке достаточно удалить TListBoxItem с TListBox, или надо удалять все, что там лежит (я имею ввиду Free). Не будет ли утечки памяти?

sinuke понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
12 минуты назад, Volodja сказал:

При очистке достаточно удалить TListBoxItem с TListBox, или надо удалять все, что там лежит (я имею ввиду Free). Не будет ли утечки памяти?

Под Андройдом имеется ARC. Объект удаляется из памяти только в случае, когда на него ничего не ссылается (счетчик ссылок равен 0). И вызов Free этот счетчик не обнулит. Чтобы точно ничего не осталось, лучше под Android делать для визуальных контроллов:
 

ListBoxItem.DisposeOf;

ListBoxItem := nil;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо, sinuke. А элементы, которые на ListBoxItem? C ними надо что-то делать?

Сейчас пробую: TCheckBox почему-то не ложится на  ListBoxItem???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вот код. При исполнении ошибок нет. (Правда отлаживаю на win32). Объект Cells.CellList не пустой. На форме лежит lbCells : TListBox;

lbCells.BeginUpdate;

for i := Low(Cells.CellList) to High(Cells.CellList) do
  begin
   lbi := TListBoxItem.Create(lbCells);
   lbl := TText.Create(lbi);
   lbl.Align := TAlignLayout.Left;
   lbl.Text := Cells.CellList.PackID.ToString + '  ' +
               Cells.CellList.Cell.ToString + '  ' +
               Cells.CellList.Quant.ToString;
   lbl.Tag := Cells.CellList.ID;
   chb := TCheckBox.Create(lbi);
   chb.Align := TAlignLayout.Right;
   chb.IsChecked := Cells.CellList.IsSet;
  end;

lbCells.EndUpdate;

После выполнения на форме ничего не появилось. Что я делаю не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

я бы переформулировал

1. Загрузка данных извне в модель данных (МД)

2. Очистка ListView

3. Загрузка ListView из МД

все равно вы откажетесь от ListBox, просто поверьте )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
34 минуты назад, krapotkin сказал:

все равно вы откажетесь от ListBox, просто поверьте )

В пользу чего?

У меня я так понимаю объект Cells.CellList - это и есть МД. Заполнять более-менее получилось.

Сейчас бьюсь с очисткой. Чего-то опять недопонимаю. 

ListBoxItem.DisposeOf;

ListBoxItem := nil;

Нужно оба оператора или достаточно любого. И еще. Как получить список ListBoxItem на ListBox. Навскидку не вижу. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вот такая очистка корректна?

 while lbCells.Items.Count > 0 do
   lbCells.ListItems[0].DisposeOf;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Volodja сказал:

Вот код.

Не забываем выставлять Parent у объектов.

3 минуты назад, Volodja сказал:

Вот такая очистка корректна?

Не уверен, а копаться лень.
Вариантов "правильной" очистки в FMX несколько, например:
 

for i:=lbCells.Count-1 downto 0 do

  lbCells.ItemByIndex(i).Release;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
47 минут назад, Volodja сказал:

В пользу чего?

из контекста..

1 час назад, krapotkin сказал:

Очистка ListView

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо всем принявшим участие.

Что-то получилось:) Пока остановился на TListBox.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: gresaggr
      Добрый день.
      Подскажите, пожалуйста, как можно реализовать на Berlin для Андроида такую таблицу без StringGrid'а (динамически)?

       
    • Автор: Rusland
      Не могу сообразить. Нужен раскрытый список c radiobutton-ами. Такой же как в ComboEdit после нажатия треугольничка.
      Пробовал ListBox c ShowCheckboxes=true - не подходит, там можно выбрать несколько, а мне надо дать возможно выбрать только одно.
      Какой компонент использовать?
       
    • Автор: Platon
      Делаю кросс-платформенное прилоежние - на Android работает, на Windows: not such table
      Как сделать так, чтобы на других ПК работало приложение с БД? 

    • Автор: FreeOS
      Я привык в VCL-е вставить некоторые данные через DBEdit.text например:
       
      DBEdit1.text:='какая то обработанная строка';
      ADOQuery1.Post;
       
      А в FMX ничего не происходят то есть в БД не пишется, но если в запущенном программе прописать в edit с клавиатуры то все вставляется. Edit привязан через livebinding
       
       
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу