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

ENERGY

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

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

  • Посещение

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

    57

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

  1. Системе не навредит, просто смысла в этом нет. Лучше упаковать архиватором, или инсталлятором. Упакованные exe распаковываются целиком в память, и остаются там до конца, плюс дольше запускаются. Не упакованные exe загружаются по сегментам, частично, только то, что нужно. http://api.farmanager.com/ru/articles/packers.html Я такой обычно код вставляю в dpr файл, для Windows проектов. uses Windows; {$IFDEF RELEASE} {$SETPEFlAGS IMAGE_FILE_RELOCS_STRIPPED or IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED} {$WEAKLINKRTTI ON} {$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])} {$ENDIF} Конечно же нужно выбрать Release в Build Configurations в правой панели. Есть смысл упаковывать вирусы итп, чтобы быстрее скачать, чтобы зашифровать и сменить сигнатуру. Или кеиген или что-то подобное.
  2. Этот модуль не адаптирован для мобильных платформ. К примеру GunSmoker в своей очень интересной статье пишет Вместо него нужно использовать дженерик коллекции. Вот пример использования TObjectList<T> http://docwiki.embarcadero.com/CodeExamples/Seattle/en/Generics_Collections_TObjectList_(Delphi)
  3. Подскажите пожалуйста как определить что программа запустилась из AlarmManager? Я сделал это так, по аналогии с http://stackoverflow.com/questions/6751564/how-to-pass-a-boolean-between-intents В Java коде, который компилиться в итоге в classes.dex (с XE7 не нужен DEX файл, можно подключить Jar файл сразу к проекту!), добавил строчку public class AlarmReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity"); TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); TestLauncher.putExtra("StartedFromAM", true); context.startActivity(TestLauncher); } } По идее теперь при старте из AlarmManager, должно быть true в активити. Из Delphi пытаюсь получить это значение, но всегда возвращает false (0). ShowMessage(SharedActivity.getIntent.getBooleanExtra(StringToJString('StartedFromAM'), false).ToString ); И вот так тоже: ShowMessage ( MainActivity.getIntent.getBooleanExtra(StringToJString('StartedFromAM'), false).ToString); Не подскажете в чем может быть проблема?
  4. Андрей Ефимов, мое персональное вам спасибо и почтение, счастье и здоровье в комплекте! Без вас Delphi сообщество многое бы потеряло.. Насчет склеивания dex файлов, судя по коммандной строке в батнике, dex файлы можно склеивать просто указав их пути - к примеру, в ней указано сразу 3 файла classes.dex (который может лежать тут, это может быть какой нибудь предыдущий dex файл) test_classes.dex и classes.dex от Embarcadero. java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX% Еще один ньюанс о котором я забыл, и промучился пол дня переименовывая проект 10 раз т.к. выскакивали разные ошибки. А переименовывать его нужно было, потому что - андроид запоминал битый пакет и не давал его ставить по новой. Не забудьте в Deployment при добавлении classes.dex поставить напротив него в колонке Remote Path строчку "classes\"! Иначе будет Unable to create process: Unable to install '<APK file>'. Failure [INSTALL_FAILED_DEXOPT] Также есть оф. инструкция: Using a Custom Set of Java Libraries In Your RAD Studio Android Apps
  5. Вроде там все просто, не запутанно. https://community.embarcadero.com/blogs/entry/timagelistxe8ru
  6. А вот еще такой вопрос, в эту же тему. Сейчас пока не надо, но чтобы знать. Если нужно сделать автозапуск службы после рестарта ОС, как в статье, и одновременно с этим Автозапуск приложения в назначенное время или добавить еще какой то Java класс, то ведь получиться 2 файла classes.dex? Как их объединить? Я так понял по идее нужно взять первый сгенерированный файл classes.dex (от первой статьи), отложить его в другую папку и указать его путь вместо set EMBO_DEX="c:\Program Files (x86)\Embarcadero\Studio\18.0\lib\android\release\classes.dex" ? И на основе него сгенерить второй файл DEX (от второй статьи)?
  7. Andrey Efimov javac -source 1.7 -target 1.7 %VERBOSE_FLAG% -Xlint:deprecation Спасибо! Все заработало! Появился файл dex
  8. To Андрей В обоих случаях пишет c:\Projects\MyProj\Java>javac -source 1.6 -target 1.6 -Xlint:deprecation -cp c:\Users\Alex\Documents\Embarcadero\Studio\18.0\PlatformSDKs\android-sdk-windows\platforms\android-24\android.jar -d output\classes src\TestClassHello\HelloWorld.java warning: [options] bootstrap class path not set in conjunction with -source 1.6 1 warning Я указал путь Java 1.8 (там только 2 папки с названием jdk1.8.0_60 и jre1.8.0_60 с другими версиями нету), насколько я понял эта Java поставилась с Delphi Berlin. Может мне нужно скачать другую версию Java ?
  9. Привет. Точно такая же проблема. Можно уточнить что означает фраза "меняем на java -jar что бы понять что случилось - далее в гугл и.. делаем Downgrade jdk" Что конкретно поменять на java -jar? Спасибо
  10. Хэш нужно еще вычислить для строки. А потом все равно перелопатить весь массив последовательно (т.к. он не сортируется). Но для OnItemClick - это вообще не критично. И такой перебор это стандартная фича для Data элементов. И доступ к элементам стиля также работает. Так что это стало уже стандартом. Не понимаю почему они не ввели возможность использовать числовые константы для этих целей.
  11. Что то у Евгения много лишнего в коде. Также вариант AItem.Data['ShowPool']:=AShowPool; медленный (т.к. в списке строк (TDictionary) ищется строка 'ShowPool' прямым перебором от начала до конца всего массива строк ), в моем случае гораздо быстрее. Вот вариант с чекбоксами : lvDetails.ItemAppearanceName := TAppearanceNames.ImageListItem; // или свой тип станадртный TAppearanceNames.ListItem lvDetails.ItemAppearanceObjects.ItemObjects.Accessory.AccessoryType := TAccessoryType.Checkmark; Все. теперь создаете OnItemClick - который будет включаь\выключать чекбокс procedure TfrmMain.lvDetailsItemClick(const Sender: TObject; const AItem: TListViewItem); begin if aItem = nil then exit; if AItem.Objects.AccessoryObject.AccessoryType = TAccessoryType.Checkmark then begin AItem.Objects.AccessoryObject.Visible := not AItem.Objects.AccessoryObject.Visible; // When listview is resized because of rotation, accessory properties will be reset to default values // Save status to the Tag AItem.Tag := integer(AItem.Objects.AccessoryObject.Visible); end; end; Добавляем событие OnUpdateObjects, на случай если девайс поменял ориентацию (в этом случае accessory свойства не сохраняются). procedure TfrmMain.lvDetailsUpdateObjects(const Sender: TObject; const AItem: TListViewItem); begin // In order for text to be truncated properly, shorten text object AItem.Objects.TextObject.Width := AItem.Objects.TextObject.Width - (2 + AItem.Objects.AccessoryObject.Width); // Restore checked state when device is rotated. // When listview is resized because of rotation, accessory properties will be reset to default values if AItem.Objects.AccessoryObject.AccessoryType = TAccessoryType.Checkmark then AItem.Objects.AccessoryObject.Visible := Boolean(AItem.Tag); end; Проверяем наличие чекбокса: if ListView.Items[i].Objects.AccessoryObject.Visible then
  12. Приветствую! Очень странная проблема, Дано: TTabControl на нем страницы. На одной TListView - со стандартным стилем (Stylelookup = '' и Items со стилем TAppearanceNames.ImageListItem) На другой лежит TListBox со Stylelookup = '', но переопределен с моим сustom стилем (3 TText разных цветов и TImage с именем icon). Везде стоит Font size - Default, втч и в этих трех TText. Когда запускаю на Android размер шрифта конкретно в этом TListBox меньше чем в TlistView и в остальных компонентах (например в другом TListBox, который встроен в TMultiView). На Windows вроде одинаково. Нигде в проекте не менял размер шрифта, scale тоже нигде не менял.. Может кто встречал подобное поведение? Delphi Berlin update 2 FireMonkey Different font size on custom and default styled controls
  13. Ребят, извините за оффтоп. Можно ли разработать и запустить программу для iOS на таком конфиге: MacOS на виртуалке + подключенный к PC реальный iPhone 5? Или нужен реальный MacPC?
  14. Кстати там уже новая версия для Берлина появилась: http://docs.embarcadero.com/products/rad_studio/radstudioBerlin/Mobile_Tutorials_en.pdf
  15. Спасибо Равиль! По факту используется ListBox. В случае TCustomPopover и TCustomListPicker все равно придется (проще всего) его использовать. Самый простой варинат, как уже написал Равиль, TMultiView с режимом Popover. Как это сделать вручную без TMultiView пошагово: https://community.embarcadero.com/blogs/entry/creating-an-overflow-menu-on-android-463 На случай если статья пропадет: Также этот же вариант описан в бесплатной книге в главе Create an Overflow Menu
  16. 1. А метод Embarcadero это тот что в примере ScrollableForm? 2. А в этом методе учитывается вторая панель? Спасибо за идею. Правда мне придется и для фрэймов делать, т.к. я стараюсь создавать и показывать нужный фрэйм с компонентами только когда они необходимы. P.s. А вы не могли бы поделиться этим шаблоном, пожалуйста, если можно - вы очень многим страждущим поможете . Я тут порылся на форуме, этот вопрос очень часто всплывает.
  17. Ребят, подскажите, почему убрали VkOffset ? Я скачал последнюю версию (кстати указывайте версию) с https://github.com/rzaripov1990/vkbdhelper - Latest commit f132774 on Oct 10, 2016 и там нету VkOffset. Как быть с этой доп. панелькой? На одной Java программе (Tasks) эта панелька может подниматься вверх и контрол как бы оказывается между клавиатурой и панелькой (HTC), наверное это решение программиста, а не системное. Честно говоря удивляет что Embarcadero ничего не придумали на этот счет, ведь эта стандартная функция нужна всем разработчикам.
  18. Есть же такая штука, которую нужно всего лишь вписать в uses проекта https://github.com/rzaripov1990/vkbdhelper
  19. ENERGY

    TListBox vs TVertScrollBox

    Что лучше в плане производительности использовать из этих компонентов для Android и iOS? Мне показалось что TlistBox как то дольше создается и грузится (я использую фрэймы (TFrame), которые создаются в RunTime, но сделаны они в Design Time) На компоненте будут лежать Editbox 2x, лэйблы, Tmemo, DateEdit, TimeEdit. TListBox удобен тем что (я так понимаю) он автоматом подстроит визуальный стиль заголовков и пунктов под текущую систему (fix me?). А вот TScrollBar это не сделает. Кстати, если использовать этот компонент, скроллбар, как отделить пункты рамкой (горизонтальной чертой?). Может есть какой то межплатформенный TBorder, который отображается в нужной стиле? А если использовать TLine то какого цвета его делать (DarkGray?), кто нибудь знает? Спасибо.
  20. Andrey Efimov Спасибо, это я еще не читал. Буду разбираться.
  21. enatechno Спасибо большое, это читал в первую очередь. Могу ли я запустить свое приложение, и как то ему сообщить что ему делать? В Windows, например, я бы отправил сообщение, или запустил бы программу с аргументом из планировщика или в крайнем случае сообщил бы через файл. Можно ли запустить свое приложение при помощи AlarmManager и если да, то каким образом дать ему знать что нужно начать какую то операцию? Наверно проще через файл указать ему аргументы? Или лучше это сделать в виде сервиса, который будет постоянно крутиться в системе?
  22. Подскажите пожалуйста, я правильно понимаю что при помощи AlarmManager можно сделать так, чтобы телефон вышел из спящего режима и запустить приложение?
  23. Brovin Yaroslav По идее автору нужно ловить сообщение WM_HOTKEY. Разве не достаточно проверить пришло оно или нет в WndProc? И если это другое сообщение, просто отправлять его на старый WndProc? Кстати, а если сделать еще вариант - создать свое невидимое окно (как делает VCL TTimer ) его зарегистрировать в RegisterHotKey и ловить сообщения с него?
  24. Приветствую. Нужно в определенное время отправлять несколько смс сообщений, к примеру это может быть через час, день, неделю. Подскажите как лучше это реализовать. В виде Android фонового сервиса или при помощи AlarmManager? Я где-то пару месяцев назад уже пытался сделать фоновой сервис для другой задачи, но у меня ничего не получилось, программа закрывалась системой, в общем пришлось забросить. Возможно есть рабочий код на эту тему? Для Java готовых решений полно, а вот для Delphi пока нет стандартного примера сервиса (основы), который бы работал всегда в Android системе. Почему то сообщество медленно развивается. Заранее спасибо за советы, очень жду мнения опытных программистов.
  25. Насколько я знаю хук устанавливается при помощи SetWindowsHookEx. А оконная процедура (WndProc ) переопределяется в своем процессе при помощи SetWindowLong и GWL_WNDPROC без каких то плясок.
×
×
  • Создать...