Перейти к содержанию
  • 0
Volodja

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

Вопросы

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

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

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

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

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

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


Ссылка на сообщение

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

  • 0

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

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


Ссылка на сообщение
  • 0
46 минут назад, Volodja сказал:

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

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

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


Ссылка на сообщение
  • 0

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

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


Ссылка на сообщение
  • 0

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

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

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

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


Ссылка на сообщение
  • 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

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

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

Спасибо, kami.

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


Ссылка на сообщение
  • 0

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

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

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


Ссылка на сообщение
  • 0

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

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

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

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

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

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

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


Ссылка на сообщение
  • 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
1 час назад, Volodja сказал:

Вот код.

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

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

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

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

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

  lbCells.ItemByIndex(i).Release;

 

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


Ссылка на сообщение
  • 0
47 минут назад, Volodja сказал:

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

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

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

Очистка ListView

 

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


Ссылка на сообщение

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

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

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

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

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

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

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

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


  • Похожий контент

    • От SIARHEI RAHOUSKI
      Здравствуйте, у меня возник вопрос Как базу данных подключить к TGrid? Я использую Delphi XE3 и База данных Accsess: ADOConnection + ADOQuery + DataSource. И вот как отобразить в TGrid Таблицу бд ?
    • От 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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