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

Nix0N

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

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

  • Посещение

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

    12

Активность репутации

  1. Like
    Nix0N отреагировална Aptem в Столицы мира   
    Автор: Артем Ходаев (Aptem)
    Ссылка на приложение: AppStore
     
    Выпустил свое первое приложения для iPhone - Страны мира.

    Смысл приложения не затейлив - справочник стран мира и их столиц. Уникальность его в том, что он содержит полный список всех признанных Россией стран мира. За основу взят Общероссийский классификатор стран мира. На текущий момент найти в AppStore подобное приложение (с полным списком) мне не удалось. Может плохо искал

    Также в приложении есть небольшой тест для проверки знаний столиц. Самый простой вариант - 10 вопросов по 5 вариантов ответа, в конце итог с правильными ответами.

    Планы на приложение огромные, от новых списков столиц уже не только мира, но и регионов отдельных стран. Например, столица Тосканы? Или столица штата Техас? И до интеллектуального алгоритма проверки знаний. Ну и версия под Android.
     

     
     
     

     
     
     

     
     
     

  2. Like
    Nix0N отреагировална Brovin Yaroslav в [Windows] Ищу компонент для отображения табличных данных   
    Чем не устраивает TGrid и TStringGrid, входящий в состав FireMonkey?
    Начиная с версии XE6 скорости работы TGrid и TStringGrid была значительно увеличена и на текущий момент не зависит от количества отображаемых данных. Так же эти гриды имеют поддержку LiveBinding, что позволяет в дизайнере выводить данные из TDataSet подобных компонентов.
  3. Like
    Nix0N отреагировална Andrey Efimov в Нарушение правил 1.2, 2.1.1, 2.1.2, 2.1.3, 2.2.1, 2.2.2, 2.2.3 правил публикации сообщений   
    Этот форум посвящён программистам, которые используют FireMonkey, как инструмент для разработки приложений.
     
    Если вы всё-таки не ошиблись форумом, то прошу пояснить:
    Что такое «XBMS»?  
    Если вы имели ввиду «XBMC», то вы всё-таки ошиблись форумом, т.к. здесь не оказываются консультации по чужим приложениям. Думаю, что необходимую вам информацию можно найти в официальной справке по приложению.
  4. Like
  5. Like
    Nix0N получил реакцию от Brovin Yaroslav в [Windows] TComboBox, как разрешить использовать кастомные, стилизованные TListBoxItem в выпадающем списке?   
    Не отображаются кастомные item's при разворачивании списка TComboBox. Нет отображения конкретно в выпадающем списке, в самом TComboBox всё ок.  Пробовал перерисовку во время события onPopup, создание на различных родителях и т.д. - не помогло. Подскажите в чем может быть дело ? Спасибо.
     

     
    Чистый проект прилагается: RAD Studio XE6
    CustomComboBox.zip
  6. Like
    Nix0N получил реакцию от rareMax в [Windows] Ищу компонент для отображения табличных данных   
    В составе TMS есть нечто похожее - TTMSFMXGrid
  7. Like
    Nix0N отреагировална Brovin Yaroslav в Apps4All Forum 2014 - Пятый ежегодный международный форум разработчиков   
    Место проведения: Москва Сроки проведения: 19 мая 2014, 9:00 - 19:00 (Весь день) Ссылка на мероприятие: http://forum.apps4all.ru/ Новость позаимствована от сюда: http://apps4all.ru/post/05-05-14-pyatyj-mezhdunarodnyj-forum-razrabotchikov-prilozhenij-apps4all 19 мая 2014 года сообщество разработчиков Apps4All, совместно с агентством «Полилог», компанией Samsung Electronics и Сбербанком России соберет на площадке Digital October более 1000 представителей экосистемы разработки приложений, специалистов крупнейших IT-корпораций и ведущих экспертов в сфере мобильных технологий.
     
    Пятый юбилейный форум Apps4All будет включать в себя конференцию, состоящую из четырех треков деловой программы, выставку высоких технологий и устройств, финал Ежегодного конкурса разработчиков Apps4All, а также традиционный фуршет для участников и гостей. Мероприятие пройдёт при поддержке Высшей Школы Бизнес-Информатики и Стартап Академии Сколково.   Деловая программа мероприятия включает в себя секции по продвижению приложений, удержанию пользователей, аналитике рынка и мобильной рекламе. В дискуссионных панелях участники конференции наряду с экспертами смогут обсудить требования к процессу и результатам сдачи проектов, стандарты индустрии, мобильный контент, а также технологии будущего и рынок венчурных инвестиций. Лидеры и эксперты рынка, такие как Google, Huawei, Intel, Unity, Embarcadero, RedMadRobot, GalsSoft, ZeptoLab, Ostrovok, Aviasales, TNS, AdWatch/Isobar, Video International, Articul Media, AdCamp, AdInch и другие компании представят свои новые продукты и успешные кейсы.   Представители штаб-квартиры Google EMEA (Europe, the Middle East and Africa) из Ирландии расскажут о секретах монетизации приложений на платформе Android и проведут мастер-классы для заинтересованных разработчиков. Особое внимание будет уделено экосистемам и сообществам разработчиков: Dan Romescu (Droidcon, Германия) расскажет о последних тенденциях сообщества разработчиков в Европе, а Thibaut Rouffineau (Apptual, Великобритания) выступит с презентацией на тему «Управление инновационными и предпринимательскими экосистемами».   Деловая программа завершится подведением итогов и торжественным награждением победителей Ежегодного конкурса лучших разработчиков приложений по версии Apps4All. Конкурс проводится по 4 основным номинациям: «Лучший разработчик-аутсорсер», «Лучший разработчик собственных продуктов», «Лучший разработчик игр» и «Лучший цифровой издатель». Победителями будут являться разработчики с наивысшим показателем Apps4All Index в соответствующем рейтинге.   Компания Samsung Electronics поделится последними разработками в области Samsung Smart TV. В конце дня состоится розыгрыш необычных призов от партнёров и спонсоров мероприятия и вечерний фуршет в честь юбилейного международного форума разработчиков Apps4All. В честь юбилея участие в V Международном форуме разработчиков приложений Apps4All является бесплатным по предварительной регистрации* для всех разработчиков и участников экосистемы, желающих окунуться в мир приложений и технологий.   Вся информация о мероприятии, а также форма регистрации – forum.apps4all.ru   P.S. На этом мероприятия я буду выступать с докладом на тему "Мульти платформенная мобильная разработка глазами разработчика"   * Участие в V Международном форуме является бесплатным и проводится по премодерации. Заявки рассматриваются Организационным комитетом форума. 
  8. Like
    Nix0N отреагировална Brovin Yaroslav в Как получить значение свойства объекта стиля, используя StylesData?   
    Нужно помнить, что StylesData при запросе значения свойства какого-либо объекта стиля всегда возвращает TValue.
    Поэтому например в вашем случае вы допускаете сразу две ошибки по одной в каждом варианте:
     
    Ошибка 1
    Не правильно:
    ListBoxItem.StylesData['text.width'].asInteger Свойство Width вещественного типа, поэтому при попытке конвертировать TValue в Integer этим способом приведет к ошибке "Invalid class typecast", так как представления вещественного и целого чисел отличаются.
     
    Правильно:
    ListBoxItem.StylesData['text.width'].AsExtended Ошибка 2
    Не правильно:
    ListBoxItem.StylesData['text.text'].asString В этом случае вы пытаетесь представить содержимое TValue, как строка. Но при таком обращении через методы, начинающиеся с приставки "As", идет попытка конвертации чистого значения вещественного числа (указатель в памяти) в строку. Естественно, что такая конвертация пройдет не правильно и закончится все той же ошибкой "Invalid class typecast"
     
    Правильно:
    ListBoxItem.StylesData['text.text'].ToString
  9. Like
    Nix0N отреагировална Brovin Yaroslav в [Android] Как изменить качество изображения?   
    Сжатие работает. Проверил на Samsung S3.
    Код использования:
    ChangeQuality(ImageBefore.Bitmap, ImageAfter.Bitmap, 10); P.S. Чтобы Bitmap можно было передать вторым параметром в вашей процедуре убрал модификатор доступа var.
     
    Результат сжатия

  10. Like
    Nix0N отреагировална Brovin Yaroslav в [TTabControl] Как сделать плавное переключение двух вкладок в TTabControl?   
    Самый простой вариант использования эффекта прокручивания основывается на использовании компонента TTabControl, который реализует переключение табов (вкладок) с анимацией. Для этого достаточно:
    Поместить TTabControl на форму и растянуть его на всю область TTabControl.Align = alClient. Создать вкладки. Одну вкладку на один логический экран (слайд, представление и тд). На каждую вкладку помещаете любой контент. В вашем случае TListBox. Вызвать в нужный момент метод переключения вкладок с анимацией: TTabControl.SetActiveTabWithTransition(const ATab: TTabItem; ATransition: TTabTransition; const ADirection: TTabTransitionDirection = TTabTransitionDirection.tdNormal) Где, 
    ATab: TTabItem - Вкладка, которую нужно отобразить ATransition: TTabTransition - Отобразить вкладку мгновенно или с эффектом сдвига (В вашем случае нужно второе TTabTransition.ttSlide) ADirection: TTabTransitionDirection - направление эффекта сдвига: Слева на право (TTabTransitionDirection.tdNormal) или с права налево (TTabTransitionDirection.tdReversed). Второй способ
    Аналогично создаем Таб контрол с вкладками, но для переключения вкладок используем стандартное действие TChangeTabAction, которое выполняет те же действия, что и SetActiveTabWithTransition. Действия доступны в редакторе TActionList "New Standart Action..."
     

  11. Like
    Nix0N получил реакцию от Brovin Yaroslav в Почему для моего стиля TListBoxItem сбрасывается состояние встроенного TCheckBox при прокручивании списка?   
    Отвечаю сам на свой же вопрос, может кому пригодится. Путем долгих и изнурительных экспериментов было установлено: после того, как создан и размещен checkbox, его необходимо "прочекать", т.е. в моём случае это
    //ставим чек Item.StylesData['mycheckbox'] := True; //снимаем чек Item.StylesData['mycheckbox'] := False; С чем связано данное поведение не имею понятия, но многим пригодится...
  12. Like
    Nix0N получил реакцию от Brovin Yaroslav в Почему для моего стиля TListBoxItem сбрасывается состояние встроенного TCheckBox при прокручивании списка?   
    ListBox содержит 100 ListBoxItem (созданные в run-time) с кастомным стилем, который содержит TCheckBox и TLabel. Если у первого item'a отметить CheckBox, он выборочно дублируется у остальных item. Пример: отмечаем первый item, отмечаются 20, 30 и т.д. Пробовал перерисовку, перестановку контента и т.д. - не помогает. В чем может быть дело ?

    Чистый проект прилагается. RAD Studio XE6 
    ChekBox ListBox.zip
  13. Like
    Nix0N получил реакцию от Kitty в Почему для моего стиля TListBoxItem сбрасывается состояние встроенного TCheckBox при прокручивании списка?   
    Отвечаю сам на свой же вопрос, может кому пригодится. Путем долгих и изнурительных экспериментов было установлено: после того, как создан и размещен checkbox, его необходимо "прочекать", т.е. в моём случае это
    //ставим чек Item.StylesData['mycheckbox'] := True; //снимаем чек Item.StylesData['mycheckbox'] := False; С чем связано данное поведение не имею понятия, но многим пригодится...
  14. Like
    Nix0N получил реакцию от Ingalime в [Руководство] Отладка программы на Android устройстве через Wi-Fi   
    Если вас, как и меня, не устраивает скорость работы эмулятора Android и в вашей системе нет свободных USB чтобы подключить устройство для отладки, то эта инструкция для вас. Внимание ! Перед дальнейшим выполнением необходимо получить root на устройстве ! Как это сделать описано здесь
     
    *статья написана на основе RAD Studio XE6 с путями по умолчанию
    **подразумевается что драйвера на устройство установлены, оно определяется в системе и успешно работает по USB кабелю с IDE
     
    Итак, начнем:
     
    1. Устанавливаем на устройство ADB over WIFI Widget. Вообще подобных программ множество, но я выбрал именно эту за её удобство. Исполнена в виде виджета, по клику активируется или деактивируется.
     
    2. Перезагружаем устройство
     
    3. Идём в раздел "Виджеты" и выносим виджет на рабочий стол (настройки виджета не меняем)
     
    4. Включаем Wi-Fi на устройстве (если еще не включен) и кликаем по виджету. Если на виджете появилась информация в виде "IP адрес : порт" и цвет виджета из серого сменился на зеленый - программа успешно запущена и можно переходить ка настройкам на ПК.
     

     
    5. Теперь необходимо подключить ADB к устройству. Для этого идем в каталог c:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk\platform-tools\ и создадим там BAT-файл следующего содержания:
    adb connect 192.168.1.3:8000 (IP адрес и порт, которые изображены на виджете вашего устройства) pause (чтобы окно CMD не закрывалось и можно было отследить результат работы ADB) 6. Запускаем BAT-файл
     
    В случае успешного выполнения ADB подключится к устройству. Всё, можно запускать IDE.

  15. Like
    Nix0N получил реакцию от Kitty в Запуск видео по расписанию в плеере на Андроиде   
    Да, необходимо завершить предыдущую активити с MXPlayer
     
    Используйте JNI и переделайте под Ваши нужды:
    ActivityManager.killBackgroundProcesses(String packageName) Где packageName - название пакета MXPlayer
     
    Если видео запускается в том же экземпляре программы MXPlayer, то этого делать не нужно.
     
    Можете подсмотреть здесь
  16. Like
    Nix0N получил реакцию от egeven в Как узнать текущие положения вертикального и горизонтального скролов в TScrollBox?   
    ScrollBox.ViewportPosition.Y - вертикаль
    ScrollBox.ViewportPosition.X - горизонталь
  17. Like
    Nix0N получил реакцию от Morfi в Как узнать текущие положения вертикального и горизонтального скролов в TScrollBox?   
    ScrollBox.ViewportPosition.Y - вертикаль
    ScrollBox.ViewportPosition.X - горизонталь
  18. Like
    Nix0N получил реакцию от Andrey Efimov в Как узнать текущие положения вертикального и горизонтального скролов в TScrollBox?   
    ScrollBox.ViewportPosition.Y - вертикаль
    ScrollBox.ViewportPosition.X - горизонталь
  19. Like
    Nix0N отреагировална Kitty в [Отклонение] Программа не отвечает после вращения устройства   
    И так тоже работает:
    void __fastcall TForm1::FormResize(TObject *Sender) { Application->ProcessMessages(); Sleep(5); }
  20. Like
    Nix0N отреагировална Alexey в Какие разрешение нужно включить для TIdTCPClient?   
    Причина
    При  финальной сборке приложения для Application store в файле AndroidManifest.xml отсутствует разрешение для интернета (не смотря на то, что в разделе Uses Permissions разрешение для интернета стоит true), а при сборке Debug в файле AndroidManifest.xml это разрешение присутствует.
     
    Решение
    Проблема решилась следующим способом:  в разделе Uses Permissions разрешение для интернета ставим false, затем в файл AndroidManifest.template.xml.  вставляем строку:
    <uses-permission android:name="android.permission.INTERNET" />
  21. Like
    Nix0N отреагировална Brovin Yaroslav в Средства логирования в FireMonkey   
    RAD Studio XE5 предоставляет несколько способов логирования под платформы Андроид и iOS. Давайте их рассмотрим:
    Встроенный в FIreMonkey механизм логирования (кроссплатформенный). Использование системных функция каждой платформы для логирования Использование файлов для вывода логов. Использование сети для передачи сообщений лога 1. Встроенный механизм логирования
    FireMonkey содержит специальный класс FMX.Types.Log для осуществления логирования на всех платформах.
    Этот класс использует на каждой платформе системные средства вывода лога.
    Log = class abstract public class procedure d(const Msg: String); overload; class procedure d(const Fmt: String; const Args: array of const); overload; class procedure d(const Tag: String; const Instance : TObject; const Msg : String); overload; class procedure d(const Tag: String; const Instance : TObject; const Method : String; const Msg : String); overload; class procedure TimeStamp(const Msg: String); overload; class function ObjToString(const Instance : TObject) : String; class function ArrayToString(const AArray : TEnumerable<TFmxObject>) : String; overload; class function ArrayToString(const AArray : TEnumerable<TFmxObject>; MakeStr : ToStringFunc) : String; overload; class procedure DumpFmxObject(const O: TFmxObject; Nest: Integer = 0); end; Он предоставляет довольно много методов по вывода лога. 
    Чтобы его использовать достаточно вызвать любой нужный классовый метод. Например в моем приложении по нажатию на кнопку я буду выводить сообщение: "Log message from FireMonkey application"
    procedure TFormPhone.Button1Click(Sender: TObject); begin Log.d('Log message from FireMonkey application'); end; Далее нужно понять, куда будет выведено это сообщение.
     
    1.1. Андроид
    Под андроид это сообщение попадает в системный журнал. Прочитать его можно в утилите Андроида LogCat - это специальная утилита для просмотра системного лога. Ее можно запустить двумя способами:
    C GUI оболочкой Из командной оболочки (консольный вариант). Первый способ (с GUI). В Eclipse с Android SDK открыть Window->ShowView->LogCat. Откроется окно с GUI интерфейсом, в котором вы сможете увидеть все сообщения, которые отправляют все приложения на телефоне. Стоит отметить, что это вариант LogCat в эклипсе содержит ряд полезных функций по фильтрации лога и его управлению. Поэтому я предпочитаю этот способ, нежели использовать консольный вариант этой же утилиты. Сразу же перед использования советую полностью очистить текущий журнал логов телефона, так как он вначале будет содержать огромное количество сообщений. Для очистки нажмите кнопку очистки лога в окне (кнопка с листком и красным крестиком).

     
    Второй способ (консольный режим). Второй вариант запуска утилиты LogCat заключается в вызове утилиты из командной строки. Утилита просмотра журналов логов входит в общую утилиту ADB.exe. Чтобы запустить лог изз командой строки воспользуйтесь следующей командой:
    .\sdk\platform-tools\adb.exe logcat Утилита лежит в папке platform-tools Android SDK. В вашем случае вы должны указать свой путь к этому файлу. Ключ logcat запускает просмотр журнала логирования.
    Так же как и в первом варианте я советую предварительно очистить лог вызвав logcat с ключом -c:
    .\sdk\platform-tools\adb.exe logcat -с Описание всех ключей утилиты logcat: logcat
    После того, как мы открыли Logcat любым из предложенных способов, запускаем нашу программу и смотрим сообщение в логе:

     
    1.2 Йос
    В йос лог попадает в два журнала в зависимости от того, где вы запускаете свою программу (Симулятор или устройство).
     
    iOS Симулятор. Открываем журнал лога в меню симулятора Отладка->Открыть системный журнал...
     
     
    iOS устройство. Открываем XCode Органайзер и выбираем вкладку Console у вашего устройства.

     
    2. Использование системных функций логирования
    Для тех, кто по каким-то причинам не хочет использовать FireMonkey для этих целей может использовать на каждой платформе системные функции логирования.
     
    2.1 Андроид
    Для андроида в Delphi предусмотрены системные функции из Androidapi.Log:
    { Helper functions } function LOGI(Text: MarshaledAString): Integer; function LOGW(Text: MarshaledAString): Integer; function LOGE(Text: MarshaledAString): Integer; function LOGF(Text: MarshaledAString): Integer;  Каждая из которых выводит сообщение с указанным типом (I - информационное сообщение, W - предупреждение, E - ошибка, F - фатальная ошибка)
     
    2.2 iOS
    В IOS вы можете использовать системную функцию iOSapi.Foundation.NSLog.
    procedure NSLog(format: PNSString); cdecl; varargs; external libFoundation name _PU + 'NSLog'; 3. Логирование в файл
    Является самым стандартным средством. Для его использования вы можете использовать стандартные способы работы с текстовыми файлами, которые полностью работают на всех платформах.
     
    4. Логирование по сети
    Этот способ так же имеет место быть и заключается в создании простого TCP клиента на стороне вашего приложения и FTP сервера на Windows. С приложения вы просто шлете на указанный адрес сервера сообщения, а на стороне сервера просто отображаете. Для этих целей можно использовать стандартные Indy компоненты. 
  22. Like
    Nix0N отреагировална Brovin Yaroslav в Запуск видео по расписанию в плеере на Андроиде   
    Если такая опция и есть, то она скорее всего носит рекомендательный характер для системы, а не обязательный. Например, есть опция largeHeap в манифесте, которая говорит о том, что нужно выделять приложению больше памяти largeHeap. Но официально указано, что нет гарантии ее выполнения. Что в общем и ожидаемо. Так как если на устройстве нет свободной памяти, то больше ее брать не от куда.
     
    Тоже касается и этой опции. Так как - это будет потенциальный риск написания вредоносного приложения или сервиса, который будет занимать все ресурсы и не давать ничего загрузить.
  23. Like
    Nix0N получил реакцию от Brovin Yaroslav в [Отклонение] Программа не отвечает после вращения устройства   
    Данные "косяки" присутствовали в RAD Studio XE5. В XE6 полёт нормальный. Android 4.1
    Предполагаю, что в Вашем случае проблема кроется в перерисовке стиля. Попробуйте realigncontent, update и т.д.
  24. Like
    Nix0N получил реакцию от Brovin Yaroslav в Запуск видео по расписанию в плеере на Андроиде   
    Да, необходимо завершить предыдущую активити с MXPlayer
     
    Используйте JNI и переделайте под Ваши нужды:
    ActivityManager.killBackgroundProcesses(String packageName) Где packageName - название пакета MXPlayer
     
    Если видео запускается в том же экземпляре программы MXPlayer, то этого делать не нужно.
     
    Можете подсмотреть здесь
  25. Like
    Nix0N получил реакцию от rareMax в [Руководство] Отладка программы на Android устройстве через Wi-Fi   
    Если вас, как и меня, не устраивает скорость работы эмулятора Android и в вашей системе нет свободных USB чтобы подключить устройство для отладки, то эта инструкция для вас. Внимание ! Перед дальнейшим выполнением необходимо получить root на устройстве ! Как это сделать описано здесь
     
    *статья написана на основе RAD Studio XE6 с путями по умолчанию
    **подразумевается что драйвера на устройство установлены, оно определяется в системе и успешно работает по USB кабелю с IDE
     
    Итак, начнем:
     
    1. Устанавливаем на устройство ADB over WIFI Widget. Вообще подобных программ множество, но я выбрал именно эту за её удобство. Исполнена в виде виджета, по клику активируется или деактивируется.
     
    2. Перезагружаем устройство
     
    3. Идём в раздел "Виджеты" и выносим виджет на рабочий стол (настройки виджета не меняем)
     
    4. Включаем Wi-Fi на устройстве (если еще не включен) и кликаем по виджету. Если на виджете появилась информация в виде "IP адрес : порт" и цвет виджета из серого сменился на зеленый - программа успешно запущена и можно переходить ка настройкам на ПК.
     

     
    5. Теперь необходимо подключить ADB к устройству. Для этого идем в каталог c:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk\platform-tools\ и создадим там BAT-файл следующего содержания:
    adb connect 192.168.1.3:8000 (IP адрес и порт, которые изображены на виджете вашего устройства) pause (чтобы окно CMD не закрывалось и можно было отследить результат работы ADB) 6. Запускаем BAT-файл
     
    В случае успешного выполнения ADB подключится к устройству. Всё, можно запускать IDE.

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