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

krapotkin

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

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

  • Посещение

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

    209

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

  1. http://fire-monkey.ru/topic/5519-фреймворк-для-стандартного-listview/?page=2#comment-37339
  2. "Соблюдая индекс сортировки" - это и есть "в том порядке в котором они отсортированы". Если есть порядок, то запросто можно добавлять. Кроме вроде есть методы и для перестановок тоже, если лень заново заполнять каждый раз. Хотя по мне это самое простое поэтому можете использовать что хотите, но работают эти компоненты по-разному
  3. ну, есть идеи, как бы модифицировать код, но и так сойдет я бы перефразировал if frmScanWindow = nil then frmScanWindow := TFrmScanWindow.Create(NIL); frmScanwindow.showModal( procedure (const AResult:TModalResult) begin if AResult = mrOK then begin ....... и может быть даже FreeAndNil(frmScanwindow); end; end);
  4. насколько я понимаю, GridPanelLayout сам делает назначение ячейки при вставке очередного компонента просто добавляйте в том порядке, в котором нужно. Если нужно что-то пропустить, то можно вставлять пустой TLayout
  5. You shouldn't do it this way Follow the simple rules. 1. Create your components without Owner ==> Aaa := TAAA.Create(NIL); 2. Keep the links to created objects. Use them to destroy objects after. L:=TLayout.Create(NIL); L.parent := ContainerComponent; .... L.Parent := NIL; FreeAndNil(L); // now it works the same way in desktop and mobile !! 3. Don't call DisposeOf manually. ARC should do it for you automatically! If you didn't provide conditions for automatic destruction and killed the object yourself, it means that some links to your object are keeped somewhere inside and can be utilized at any moment, so you'll get an Access Violation... Good alternative to your scenario is using Frames! Construct the frame from several components and use it as single unit instead of creating Layout, then rectanlge inside it then ... then ...
  6. там из нетривиального есть itemwidth и remain = itemwidth - <элемент>.X itemwidth считается с учетом отступов, т.е. значение чистое, правильное вопрос про арифметику не совсем понял. там используется мой собственный парсер выражений Для текста задается H = "Auto" - с автоматическим расчетом высоты
  7. P.S. по факту использования мне показалось, что удобнее использовать не отдельный JSON файл, а прямо в коде константой задавать JSON строкой. (Видимо сказались приключения с деплоем)))
  8. правильный ответ - не делать так )) нужно хранить настройки приложения в отдельном классе тогда кроме самого класса нужны методы, которые 1) читают пишут его из ... файла, БД, интернета и т.д. 2) в нужный момент (обычно чтобы изобразить форму и заполнить св-ва компонентов или еще для чего угодно) использовать эти настройки 3) вытекает из 2) сохранять в нужный момент новые значения в переменную, где лежат настройки для хранения настроек отлично подходит JSON. Т.к. он может иметь иерархическую структуру, что очень удобно. Его и хранить в БД. Можно и прямо поля, строки и все такое, но все равно, собирать их нужно в некое хранилище в программе. Пример разбирал тут http://www.cyberforum.ru/blogs/469693/blog4883.html
  9. смелее используйте F1 там будет описание метода и модуль где он находится System.Threading запускается новый поток, который запускает процедуру в главном потоке т.е. мы даем закончиться текущему методу и наше действие выполнится с гарантией после него
  10. еще один пример раскладки из реального проекта { "Columns":[], "Variables": [ {"Y_UNIT":"12"}, {"GAP":"8"}, {"ITEM_H":"2*GAP+5*Y_UNIT"}, {"IMG_H":"76"}, {"IMG_W":"76"}, {"STOCK_SIZE":"48"}, {"PRICE_COLW":"53"} ], "Objects": [ {"Name":"ID","Kind":"data"}, , {"Name":"img","Kind":"image", "Place":{"X":"0","Y":"0","W":"IMG_W","H":"IMG_H"}, } , {"Name":"Text","Kind":"text","TextHAlign":"leading","TextVAlign":"leading", "Place":{"X":"img.right","Y":"GAP","W":"itemwidth - IMG_W - GAP - 2*PRICE_COLW - GAP","H":"52"}, "WordWrap":true, "Color":"black", "Font":{"Size":12} } , {"Name":"earlier","Kind":"text","TextHAlign":"leading","TextVAlign":"leading", "Place":{"X":"text.left","Y":"ITEM_H-2*GAP+2","W":"itemwidth - 2*PRICE_COLW","H":"Y_UNIT"}, "WordWrap":false, "Color":"green", "Font":{"Size":10} } , {"Name":"price1","Kind":"text","TextHAlign":"trailing","TextVAlign":"trailing", "Place":{"X":"itemwidth-GAP-PRICE_COLW-W","Y":"GAP+2*Y_UNIT","W":"auto","H":"Y_UNIT*1.5", "priority":"WXYH"}, "WordWrap":false, "Color":"black", "Font":{"Size":15} } , {"Name":"imgstrike","Kind":"image", "Place":{"X":"price1.x-5","Y":"price1.y","W":"price1.w+8","H":"price1.h"}, } , {"Name":"price2","Kind":"text","TextHAlign":"trailing","TextVAlign":"trailing", "Place":{"X":"price1.right-W","Y":"ITEM_H-GAP-Y_UNIT*1.5","W":"auto","H":"Y_UNIT*1.5", "priority":"WXYH"}, "WordWrap":false, "Color":"black", "Font":{"Size":15, "style":"bold"} } , {"Name":"qty","Kind":"text","TextHAlign":"trailing","TextVAlign":"center", "Place":{"X":"itemwidth-PRICE_COLW-GAP","Y":"GAP","W":"PRICE_COLW","H":"2*Y_UNIT"}, "WordWrap":false, "Color":"black", "Font":{"Size":27, "style":"bold"} } , {"Name":"imgstock","Kind":"image", "Place":{"X":"itemwidth-STOCK_SIZE-3","Y":"ITEM_H-STOCK_SIZE-4","W":"STOCK_SIZE","H":"STOCK_SIZE"}, } ], "ItemHeight":"ITEM_H", "ItemSpaces": {"X":"0","Y":"0","W":"0","H":""}, "SideSpace":"0" }
  11. Во-первых, откройте для себя фреймы )) Во-вторых убивать себя из обработчика себя нельзя, да и не нужно (см п.1) В качестве костыля. 1. Создавайте все с Owner=NIL2. 2. TTask.Run(procedure begin tthread.synchronize(nil, procedure begin KILLTHEMALL(); end); end)
  12. смысл очень простой - эта технология идеально подходит для скрытых вирусных закладок поэтому запрещена так что оповещайте смской самого курьера а не его программу
  13. Я так и написал. Бс это эмулятор на интеле. Он запускается и фиг с ним. А делфи программу на нем запустить никто не обещал. Потому что интел не поддерживается
  14. bluestacks работает на intel Delphi официально не поддерживает этот процессор
  15. когда-то делал свое обновление. скачивал свой APK со своего сайта и запускал его если выставлено "доверять установке из левых источников", все штатно проходило, запускался установщик
  16. перехват звонков тоже относится к опасным разрешениям
  17. значит, договаривайтесь с гугл, чтобы изменили политику взад...
  18. вроде же закрыт вопрос с читалками смс? отправляйте push
  19. Насколько я помню, эта функциональность теперь считается опасной и у гугла спец апи для этого https://medium.com/@sampadasalimath14/sms-retriever-api-for-automatic-sms-verification-e029cc501b1f реализаций на делфи не видел
  20. Запустил код по ссылке на delphi 10.3.2, android 8.1 Xiaomi redmi 5 plus В моем случае выяснилось, что поведение зависит от состояния Mainform.Borderstyle Если none - ведет себя как Fullscreen, статусбар прячется Дополнено! Чистый проект на 10.3.2 сам добавляет в Deployment файл styles-v21.xml Его нужно отключить! иначе будет только вариант Fullscreen (он же Borderstyle=none) когда статусбар скрыт и выезжает полупрозрачный, либо обычный неокрашенный статаусбар. Если без него впоследствии что-то не взлетит, можно так же как с основным styles.xml добавить в deployment свой, модифицированный, со строками <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">false</item> У меня после отключения окрашивание статусбара работает корректно.
  21. да. из-за перехода на новую версию IDE видимо при upgrade проекта у меня слетели настройки, которые были в .dproj я в реальном-то проекте JSON просто в константе храню, без файла, тут чисто иллюстрация возможности. проверку добавлю. хотя теперь в CreateFromFile тоже есть Exception
  22. ненавижу Deploy опять потерялся файл pattern.json, поэтому не создавался шаблон в целом, и парсер его тоже приложил. у меня запустилось штатно. проверьте plz
  23. под виндой нормально, на андроиде проверю попозже. но TVK_LVPattern.itemspaces это record поэтому вроде бы и не нужно а LV.ItemSpaces вроде должен сам ListView инициализировать Если раньше найдешь, сигналь...
×
×
  • Создать...