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

sinuke

Пользователи
  • Постов

    190
  • Зарегистрирован

  • Посещение

  • Победитель дней

    35

Весь контент sinuke

  1. sinuke

    AppBar scrolling

    Вот набросал примерчик. В примере используется обработка жеста igiPan. Для того, чтобы во время изменения размера AppBar не работал скролл у ЛистВью, использовался чуть доработанный modernListView, в котором добавлено свойство CanScroll (не помню, публиковал ли Равиль его или нет). В общем надеюсь смысл будет понятен Тестовый проектик: AppBarSizing.zip
  2. Ну вот набросал примерчик. Он упрощенный, но смысл такой же примерно (код листвью со скриншота выше выложить не могу просто из-за того, что там идут зависимости от модели данных). Лично я все рисую кодом - так полный контроль того, что выводится на экран. И собственно так можно выводить практически что угодно. И не нужны никакие монструозные ТМС компоненты ListView_Schedule_Sample.zip
  3. sinuke

    XSuperObject

    не знаю как с null'ом, но вот MemberView - это массив (в квадратных же скобках). тут проще. что-то типа такого: var MemView: ISuperArray; myJSON: ISuperObject; ... myJSON := SO('сюда загоняем json'); MemView := myJSON.A['MemberView']; if MemView.Length = 0 then {Пустой массив} П.С. глянул то, как можно проверить на null, вышло следующее (вроде работает): var x: ISuperObject; begin x := SO('{"value":null}'); if x.Null['value'] = jNull then ShowMessage('null') else ShowMessage(x.I['value'].ToString) end;
  4. да, легко вот мое расписание в листвью
  5. Ну плохой он еще и потому что код с процессмессаджес работал до 10.2.2 (у меня Delay был реализован с ProcessMessages). А после обновления до 10.2.2 - вылет из приложения. (знаю что выпустили в феврале патч для исправления этого бага в анимациях, но в другом коде оно все равно вылетать будет). Пришлось уходить в асинхронщину
  6. А обработчик вешаете на ListBox или на итемы? Просто итемат листбокса можно задавать свои обработчики OnClick: procedure TForm1.ListBoxItem1Click(Sender: TObject); begin ShowMessage((Sender as TListBoxItem).Index.ToString); end; А можно задать обработчик OnItemClick у самого листбокса, и индекс узнавать например так: procedure TForm1.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); begin ShowMessage(Item.Index.ToString); end;
  7. а это связано с тем, что в коде обработки нажатия вы очищаете список итемов (ну мне так кажется, потому как чтобы вывести новый список файлов/папок нужно старый очистить). вот тут и происходит фатальная ошибка, потому как после обработки нажатия, приложение пытается вернуться к вызвавшему событие итему. а его уже нет. и получаем вылет из приложения. в общем то я и написал, что в событии нажатия на итем, все действия лучше помещать либо в отдельный поток (очередь). помещаем действия в поток/очередь, событие нажатия завершается и начинается выполнение кода в потоке/очереди. а там уже можно делать все, что угодно, только главное помнить, что обращение к визуальным компонентам нужно производить в Synhronize ваш код я бы как-то так изменил: uses System.Threading; procedure TForm1.FoldersListBoxItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); var ExtFile: string; begin // Сохраняем выбранный путь CurrentPath := CurrentPath+Item.ItemData.Text; //Текущая директория if Item.TagString = 'folder' then //Проверяем, если это папка begin if TDirectory.Exists(CurrentPath) then //Проверяем, если папка существует begin Label1.Text:= 'Нажата строка № '+ inttostr(Item.Index); //Контроль!!! //Помещаем действия по заполнению лист бокса в очередь. можно попробовать в отдельный поток через TTask.Run TThread.ForceQueue(nil, procedure () begin TThread.Synchronize(nil, procedure () begin FillFolderListBox(CurrentPath, True); //Процедура заполнения ListBox`а папками и файлами end); end); end else if Item.TagString = 'file' then //Иначе - файл begin Label1.Text:='Отправляем файл "'+Item.ItemData.Text+'" на плеер'; //Готовим на исподнение end; end; end; П.С. я тоже могу в каких-то моментах ошибаться. потому как я вообще не программист =))
  8. Ну можно примерно так (не делал проверку на исключения) procedure TForm1.FormShow(Sender: TObject); var LRes: TResourceStream; LFileName: string; begin LFileName := TPath.Combine(TPath.GetDocumentsPath, '1.txt'); if not TFile.Exists(LFileName) then begin LRes := TResourceStream.Create(HInstance, 'SOMEFILE', RT_RCDATA); try LRes.SaveToFile(LFileName); finally FreeAndNil(LRes); ShowMessage('Файл скопирован из ресурсов'); end; end else ShowMessage('Файл уже существует'); end; 1.txt - имя вашего файла TPath.GetDocumentsPath - возвращает путь как раз к папке \assets\internal SOMEFILE - имя ресурса, который добавлен в проект. При этом после добавления файла в ресурсы обязательно нужно зайти в Deployment и убрать галочку с добавленного файла (при добавлении в ресурсы файл автоматически добавляется в деплоймент) Вот тестовый проектик. Делал правда в Starter-версии, поэтому Android не доступен. Но принцип ничем не отличается ResFile.zip
  9. ну я бы сделал так: поместил нужный файл в ресурсы (при этом в деплойменте галочку рядом с этим файлом убрал). при первом запуске проверял бы - если файл отсутсвует, то копируем из ресурсов в нужное место. а если файл уже присутствует, то ничего не делаем
  10. попробуйте переход делать в потоке, при этом заполнение лист-бокса в синхронайз. вместо потока можно еще попробовать ForceQueue (для Токио)
  11. продублирую сюда свое "исследование"
  12. ну я ж не виноват, что ЛВ такой удачный и быстрый)) ну а по поводу АС... ну уже начал ковырять. посмотрим что из этого выйдет ))
  13. в интерфейсной части ничего особо сложного нету... я б только посмотрел как кнопка поиска реализована. как она реагирует на нажатие. есть анимация или какая-нибудь трансформация?
  14. Про память возможно и не точно. Я в чатике проводил "исследование" месяца 1,5 назад...
  15. Так уберите изменение ширины. Просто меняйте позицию
  16. В OnGesure обрабатывать начало жеста, его окончание и собственно сам жест (Pan). Вот когда-то для себя делал демку test_touchanim.zip
  17. Как я понимаю модуль FMX.FontGlyphs.Android.pas подключен из Берлинской версии студии. Вам нужен этот файлик для Токио. Как я понимаю, используете что-то типа FontAwesome. Например, на гитхабе Равиля этот файл есть версии и для Берлин и для Токио.
  18. если это Windows, то шрифт должен быть установлен в системе
  19. Да, Xiaomi Ну на простеньком проекте все нормально. Это нужно заведомо "проблемный" проектик пробовать
  20. Что значит с чистым? Есть Mi A1 с голым Android 8 Oreo (без MIUI)
  21. и еще. на x86 образах (а они реально работают шустро) fmx-приложения не запускаются все равно придется создавать виртуальное устройство на arm-образе
  22. Локализовать под разные языки не получится. Там эти строки заданы в виде констант. Я лично использую NativeView Равиля - и вид нативный и надписи можно любые вставлять во время выполнения приложения
  23. это сообщение называется Toast использовал из библиотеки Ярослава - TfgToast
  24. Попробуйте не TImage, Fill.Kind = Bitmap И загружайте вашу картинку в Bitmap для заполнения ректангла. Я так делал, когда нужно было тоже самое, что и вам
×
×
  • Создать...