-
Постов
190 -
Зарегистрирован
-
Посещение
-
Победитель дней
35
Весь контент sinuke
-
Вот набросал примерчик. В примере используется обработка жеста igiPan. Для того, чтобы во время изменения размера AppBar не работал скролл у ЛистВью, использовался чуть доработанный modernListView, в котором добавлено свойство CanScroll (не помню, публиковал ли Равиль его или нет). В общем надеюсь смысл будет понятен Тестовый проектик: AppBarSizing.zip
-
Ну вот набросал примерчик. Он упрощенный, но смысл такой же примерно (код листвью со скриншота выше выложить не могу просто из-за того, что там идут зависимости от модели данных). Лично я все рисую кодом - так полный контроль того, что выводится на экран. И собственно так можно выводить практически что угодно. И не нужны никакие монструозные ТМС компоненты ListView_Schedule_Sample.zip
-
не знаю как с 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;
-
да, легко вот мое расписание в листвью
-
Ну плохой он еще и потому что код с процессмессаджес работал до 10.2.2 (у меня Delay был реализован с ProcessMessages). А после обновления до 10.2.2 - вылет из приложения. (знаю что выпустили в феврале патч для исправления этого бага в анимациях, но в другом коде оно все равно вылетать будет). Пришлось уходить в асинхронщину
-
А обработчик вешаете на 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;
-
а это связано с тем, что в коде обработки нажатия вы очищаете список итемов (ну мне так кажется, потому как чтобы вывести новый список файлов/папок нужно старый очистить). вот тут и происходит фатальная ошибка, потому как после обработки нажатия, приложение пытается вернуться к вызвавшему событие итему. а его уже нет. и получаем вылет из приложения. в общем то я и написал, что в событии нажатия на итем, все действия лучше помещать либо в отдельный поток (очередь). помещаем действия в поток/очередь, событие нажатия завершается и начинается выполнение кода в потоке/очереди. а там уже можно делать все, что угодно, только главное помнить, что обращение к визуальным компонентам нужно производить в 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; П.С. я тоже могу в каких-то моментах ошибаться. потому как я вообще не программист =))
-
Ну можно примерно так (не делал проверку на исключения) 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
-
ну я бы сделал так: поместил нужный файл в ресурсы (при этом в деплойменте галочку рядом с этим файлом убрал). при первом запуске проверял бы - если файл отсутсвует, то копируем из ресурсов в нужное место. а если файл уже присутствует, то ничего не делаем
-
попробуйте переход делать в потоке, при этом заполнение лист-бокса в синхронайз. вместо потока можно еще попробовать ForceQueue (для Токио)
-
продублирую сюда свое "исследование"
-
ну я ж не виноват, что ЛВ такой удачный и быстрый)) ну а по поводу АС... ну уже начал ковырять. посмотрим что из этого выйдет ))
-
в интерфейсной части ничего особо сложного нету... я б только посмотрел как кнопка поиска реализована. как она реагирует на нажатие. есть анимация или какая-нибудь трансформация?
-
Про память возможно и не точно. Я в чатике проводил "исследование" месяца 1,5 назад...
-
Так уберите изменение ширины. Просто меняйте позицию
-
В OnGesure обрабатывать начало жеста, его окончание и собственно сам жест (Pan). Вот когда-то для себя делал демку test_touchanim.zip
-
Как я понимаю модуль FMX.FontGlyphs.Android.pas подключен из Берлинской версии студии. Вам нужен этот файлик для Токио. Как я понимаю, используете что-то типа FontAwesome. Например, на гитхабе Равиля этот файл есть версии и для Берлин и для Токио.
-
если это Windows, то шрифт должен быть установлен в системе
- 14 ответов
-
и еще. на x86 образах (а они реально работают шустро) fmx-приложения не запускаются все равно придется создавать виртуальное устройство на arm-образе
-
Локализовать под разные языки не получится. Там эти строки заданы в виде констант. Я лично использую NativeView Равиля - и вид нативный и надписи можно любые вставлять во время выполнения приложения
-
ListBox1.ItemIndex := -1;
-
Попробуйте не TImage, Fill.Kind = Bitmap И загружайте вашу картинку в Bitmap для заполнения ректангла. Я так делал, когда нужно было тоже самое, что и вам