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

Kitty

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

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

  • Посещение

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

    16

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

  1. Like
    Kitty отреагировална Andrey Efimov в Некорректное отображение элементов списка при загрузке глобального стиля   
    Стили лежат тут "C:\Users\Public\Documents\Embarcadero\Studio\14.0\Styles", там есть папки "Android", "iOS".
    Также все стандартные стили можно вытащить из "Bitmap Style Designer", как это сделать, читайте в разделе "Стили", например в теме "Где взять стандартный стиль в FireMonkey для iOS и Android, используемый по умолчанию?"
  2. Like
    Kitty получил реакцию от Andrey Efimov в Использование killBackgroundProcesses для пользоватлей С++ Builder   
    Тема была закрыта: http://fire-monkey.ru/topic/230-zapusk-video-po-raspisaniiu-v-pleere-na-androide/
    Однако было найдено решение и в продолжение темы вопрос решен так:
    1. Воспользуемся советом Nix0N и используем PAS файл из той темы.
    2. Чтобы в C++ Builder XE6 можно было корректно использовать killBackgroundProcesses, в PAS файл вносим изменения любезно предоставленные Hugh Xiao. Источник обсуждения тут:
    http://bcbjournal.org/forums/viewtopic.php?f=10&t=2496&sid=b33b673eeb80f12f15a169a58e55cc67&start=15
    Код:
    //------------------------------------------------ // RegisterTypes added by Hugh Xiao : qs.xiao@gamil.com 2014-07-20 Taiwan Time procedure RegisterTypes; begin TRegTypes.RegisterType('Androidapi.JNI.ActivityManager.JDebug_MemoryInfo', TypeInfo(Androidapi.JNI.ActivityManager.JDebug_MemoryInfo)); end; initialization RegisterTypes; // end by Hugh //--------------------------------------------------- 3. Теперь запускаем MX плеер по расписанию кодом, при котором предыдущий экземпляр видео уничтожается и таким образом программа не вываливается из памяти:
    //запуск PlayVideo из таймера Timer1 void PlayVideo(const String AFileName) { try { //MX player: https://sites.google.com/site/mxvpen/api _di_JString PackageName = StringToJString(L"com.mxtech.videoplayer.ad"); _di_JActivityManager activityManager = GetActivityManager();//<- для работы GetActivityManager необходим код от Hugh Xiao activityManager->killBackgroundProcesses(PackageName); //убиваем предыдущее видео String EXE = System::Ioutils::TPath::GetExtension(AFileName); _di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW); _di_Jnet_Uri Data = StrToJURI(AFileName); Intent->setDataAndType(Data, StringToJString(L"video/" + EXE)); //Важные две строки совет от rlebeau разработчика Indy Intent->setPackage(PackageName); Intent->addFlags(TJIntent::JavaClass->FLAG_ACTIVITY_CLEAR_TOP | TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK | TJIntent::JavaClass->FLAG_ACTIVITY_NO_HISTORY); //Application->ProcessMessages(); //Sleep(2000); SharedActivity()->startActivity(Intent);//старт нового видео } catch(Exception &E) { ShowMessage( E.ClassName() + " " + E.Message); Application->Terminate(); } } В архиве правильный PAS и HPP, включая тестовый пример на С++.
    Androidapi.JNI.ActivityManager.zip
  3. Like
    Kitty получил реакцию от Nix0N в Как в Firemonkey на C++Builder использовать ява код?   
    Может кому пригодиться. Использование java классов JIntent и JNet_Uri. Спасибо разработчику Indy Remy Lebeau (TeamB)
    http://bcbjournal.org/forums/
    void PlayVideo(const String AFileName) { _di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW); _di_Jnet_Uri Data = StrToJURI(AFileName); Intent->setDataAndType(Data, StringToJString(L"video/mp4")); SharedActivity()->startActivity(Intent); }
  4. Like
    Kitty получил реакцию от Brovin Yaroslav в Delphi XE6 and C++Builder XE6 Update 1   
    Fix list for RAD Studio XE6, Delphi XE6 and C++Builder XE6 Update 1
    http://edn.embarcadero.com/article/43893
  5. Like
    Kitty получил реакцию от Andrey Efimov в Delphi XE6 and C++Builder XE6 Update 1   
    Fix list for RAD Studio XE6, Delphi XE6 and C++Builder XE6 Update 1
    http://edn.embarcadero.com/article/43893
  6. Like
    Kitty отреагировална Brovin Yaroslav в Как работать с TStringHelper и TStringBuilder в C++Builder ХЕ6   
    Просто используйте на всех платформах тот вариант, который вас устраивает:
    SubString0 - если вы хотите работать с 0-основными строками SubString1 - если хотите работать как-будто с 1-основной строкой
  7. Like
    Kitty отреагировална Brovin Yaroslav в Как работать с TStringHelper и TStringBuilder в C++Builder ХЕ6   
    Как вы заметили есть два способа:
    Использовать директиву условной компиляции Использовать аналоги функции SubString Каждая функция в C++ Builder имеет три аналога. Например, для вашей функции SubString, есть три варианта:
    SubString0 - работает со строкой, как с 0-основной SubString1 - работает со строкой, как с 1-основной SubString - Вариант работы со строкой зависит от платформы (мобильные - 0, настольные - 1) Вы используете третий и поэтому на разных платформах получаете разные варианты работы.
     
    Другого варианта я думаю нет. TStringHelper - это чисто Делфовая особенность. В билдере она не будет работать. Так как строки в Delphi - это базовый тип, а в Builder C++ - нет.
  8. Like
  9. Like
    Kitty отреагировална Nix0N в Почему на билдере для регулярных выражений не работает "?:"   
    Вижу 2 ошибки:
    У Вас не верная формула для поиска. С этой формулой (? <a href=\"))(\\S+)(? \">)) Вы не найдете то, что Вам необходимо. Эта формула не работает так же в Perl и Notepad++ Я у Вас вижу 4 группы, но на выходе Вы ни к одной не обращаетесь и по-этому получаете исходную строку.  В данном случае вопрос с FireMonkey никак не связан...
     
    P.S. Если опишите какие данные в итоге хотите получить - пишите в личку. Подскажу как сделать, так как эту тему скорее всего удалят...
     
    Либо так:
    url = TRegEx::Matches(text->Text, "(?<a href=\"))(\\S+)(?\">))").Item[i].Groups[n].Value; Где n - номер группы. Группа - это данные, которые располагаются между ()
     
    Пример Delphi
    procedure TForm1.Button1Click(Sender: TObject); var RegEx: TRegEx; M: TMatchCollection; begin RegEx := TRegEx.Create('(<a href=\"(.*?)\">)'); if RegEx.IsMatch('<a href="messanger.cgi?action=read&msg=2">')then begin M := RegEx.Matches('<a href="messanger.cgi?action=read&msg=2">'); //Вторая группа содержит текст между кавычками Memo1.Lines.Add(M.Item[0].Groups[2].Value); end; end; На выходе: messanger.cgi?action=read&msg=2 
  10. Like
    Kitty отреагировална Brovin Yaroslav в Воспроизвидение видео в TMediaPlayer по кругу   
    Используйте лучше другой вариант определения окончания видео. Такой вариант работает:
    if MediaPlayer1.State = TMediaState.Stopped then begin MediaPlayer1.CurrentTime := 0; MediaPlayer1.Play; end;
  11. Like
    Kitty получил реакцию от Brovin Yaroslav в Воспроизвидение видео в TMediaPlayer по кругу   
    Огромное спасибо за рекомендации! Буду пробовать.
  12. Like
    Kitty отреагировална Brovin Yaroslav в Воспроизвидение видео в TMediaPlayer по кругу   
    Самый простой вариант реализации воспроизведения аудио/видео по кругу является использование таймера:
    procedure TFormPlayer.PlayerTimerTimer(Sender: TObject); begin // Выполнять таймер с интервалом 1 секунда if MediaPlayer.State = TMediaState.Stopped then begin MediaPlayer.CurrentTime := 0; MediaPlayer.Play; end; end;
  13. Like
    Kitty отреагировална Brovin Yaroslav в Воспроизвидение видео в TMediaPlayer по кругу   
    Поставьте задержку 100 мсек (или 24 кадров в секунду). Я попробовал это на стандартном виндовом примере MediaPlayerHD и там я не вижу проблемы черного экрана (Даже при интервале таймера в 1 секунду). 
  14. Like
    Kitty отреагировална Brovin Yaroslav в Как изменить размер шрифта у TListItemText в TListItem?   
    Не знаю, как вы создаете итемы (в следующий раз нужно прикреплять тестовый проект, согласно правилам форума). Но у меня работает:
     
    Создаю итемы для TListView с дополнительным текстовым полем так:
    procedure TForm1.Button1Click(Sender: TObject); var Item: TListViewItem; TextObject: TListItemText; I: Integer; begin for I := 0 to 10 do begin Item := ListView1.Items.Add; Item.Text := 'Item ' + I.ToString; TextObject := TListItemText.Create(Item); TextObject.Name := 'SubCaption'; TextObject.PlaceOffset.Point := TPointF.Create(100, 0); TextObject.Font.Size := Random(20) + 5; TextObject.Height := Item.Height; TextObject.Text := 'Sub caption'; end; end; Обновляю размеры под текста и цвет так:
    procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); var TextObject: TListItemText; begin TextObject := AItem.Objects.FindObject('SubCaption') as TListItemText; if TextObject <> nil then begin TextObject.Font.Size := 20; TextObject.TextColor := TAlphaColorRec.Red; end; end; Результат ниже: Без обновления размера и с кодом коррекции размера и цвета:

     
  15. Like
    Kitty отреагировална Brovin Yaroslav в Как указать целевые платформы для компонента, написанного на C++ Builder?   
    Delphi атрибуты не поддерживаются в С++ Builder. Поэтому не получится на уровне одного компонента указать, на каких платформах он будет работать. Однако, есть другой способ указания этого (правда для всех компонентов пакета). При добавлении новой платформы в список целевых платформ пакета, все компоненты пакета считаются полностью рабочими на этих платформах. (после сборки пакета на каждую платформу). Что проиллюстрировано на рисунках ниже:

     
    Если у вас пакет содержит компоненты, как рассчитанные на одну платформу, так и на несколько, то я вижу пока только единственных выход - создание отдельных пакетов для таких компонентов.
     
  16. Like
    Kitty отреагировална 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 Международном форуме является бесплатным и проводится по премодерации. Заявки рассматриваются Организационным комитетом форума. 
  17. Like
    Kitty отреагировална Nix0N в Почему для моего стиля TListBoxItem сбрасывается состояние встроенного TCheckBox при прокручивании списка?   
    Отвечаю сам на свой же вопрос, может кому пригодится. Путем долгих и изнурительных экспериментов было установлено: после того, как создан и размещен checkbox, его необходимо "прочекать", т.е. в моём случае это
    //ставим чек Item.StylesData['mycheckbox'] := True; //снимаем чек Item.StylesData['mycheckbox'] := False; С чем связано данное поведение не имею понятия, но многим пригодится...
  18. Like
    Kitty отреагировална Nix0N в Запуск видео по расписанию в плеере на Андроиде   
    Да, необходимо завершить предыдущую активити с MXPlayer
     
    Используйте JNI и переделайте под Ваши нужды:
    ActivityManager.killBackgroundProcesses(String packageName) Где packageName - название пакета MXPlayer
     
    Если видео запускается в том же экземпляре программы MXPlayer, то этого делать не нужно.
     
    Можете подсмотреть здесь
  19. Like
    Kitty отреагировална konung в Запуск видео по расписанию в плеере на Андроиде   
    2 Brovin Yaroslav
     
    Согласен. Такого рода вещи не стоит юзать без крайне необходимости. И естественно - если и использовать то после тестирования.
     
    2 Kitty
     
    Что до параметра, то вроде как вот он (не проверял, ессно, и не могу сказать можно ль его поставить в самом BDS. скорее всего - ручками в манифесте):
    в корневом элементе (манифеста) <application, атрибут android:persistent="false|true". По умолчанию - false. При true - "приложение должно работать во что бы то ни стало. Актуально для небольшого круга системных приложений." 
  20. Like
    Kitty получил реакцию от Nix0N в [Отклонение] Программа не отвечает после вращения устройства   
    И так тоже работает:
    void __fastcall TForm1::FormResize(TObject *Sender) { Application->ProcessMessages(); Sleep(5); }
  21. Like
    Kitty получил реакцию от Brovin Yaroslav в Правильное завершение программы на Андроиде   
    Спасибо!
  22. Like
    Kitty получил реакцию от Brovin Yaroslav в [Отклонение] Программа не отвечает после вращения устройства   
    Вот это исправляет проблему:
    void __fastcall TForm1::FormResize(TObject *Sender) { //Портретная ориентация if (Height > Width) { Application->ProcessMessages(); Realign(); } //Альбомная ориентация else if (Height < Width) { Application->ProcessMessages(); Realign(); } } Спасибо Nix0N.
  23. Like
    Kitty получил реакцию от Brovin Yaroslav в Как в Firemonkey на C++Builder использовать ява код?   
    Может кому пригодиться. Использование java классов JIntent и JNet_Uri. Спасибо разработчику Indy Remy Lebeau (TeamB)
    http://bcbjournal.org/forums/
    void PlayVideo(const String AFileName) { _di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW); _di_Jnet_Uri Data = StrToJURI(AFileName); Intent->setDataAndType(Data, StringToJString(L"video/mp4")); SharedActivity()->startActivity(Intent); }
  24. Like
    Kitty получил реакцию от Brovin Yaroslav в Запуск видео по расписанию в плеере на Андроиде   
    Большое спасибо за развернутые ответы!
     
     
    Да, именно так и планируется. Закуплены однотипные устройства: http://rozetka.com.ua/iconbit_movie_3d_iptv/p387929/ и сугубо для этих целей - играть по одному видео по расписанию. Сейчас вместо программы, в назначенное время ходит человек и запускает нужные видео.
     
    Конкретно на этих устройствах еще не тестировала программу т.к. пока все в разработке. На моем же PIPO M7 Андроид 4.4.2 похоже, что работает. Обидно будет, что возможно на этих устройствах программа не заработает как надо, но плюс по любому есть - изучение FM.
  25. Like
    Kitty отреагировална Nix0N в [Руководство] Отладка программы на 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.

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