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

AngryOwl

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

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

  • Посещение

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

    45

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

  1. Like
    AngryOwl отреагировална Fedor K в Как правильно обрабатывать параметры запуска приложения в iOS и Android и открывать нужную форму?   
    Для Android достаточно в приложении "Дочка" обработать стартовый Intent:
    uses System.StartUpCopy, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText; ... var Intent: JIntent; lStartIndex : Integer = -1; begin Application.Initialize; Intent := TAndroidHelper.Activity.getIntent; if (Intent <> nil) and (Intent.getExtras <> nil) and Intent.getExtras.containsKey(StringToJString('START_FORM')) then begin lStartIndex := Intent.getExtras.getInt(StringToJString('START_FORM')); end; //создание нужной формы в зависимости от lStartIndex Для мобильных платформ я бы советовал использовать TFrame, вместо TForm, оперирую лишь одной главной формой. Много форм оставьте для VCL.
  2. Like
    AngryOwl получил реакцию от Pax Beach в Как запустить приложение на планшете с Windows10 ?   
    Установить PAServer на удаленной машине (ПК/планшет) и все.
    Как сделать тут и тут. И вообще много в сети примеров, в том числе и на этом форуме где-то было.
  3. Like
    AngryOwl отреагировална Brovin Yaroslav в [RX] [FGX] Описание версии 0.7.1.118   
    Ссылка на скачивание (Только для RAD Studio Berlin?fgx_0.7.1.118.zip Инструкция по установке: "Инструкция по установке набора компонентов FGX" Описание
    Эта версия включает в себя следующий набор компонентов:
    Дизайнер итемов - дизайнер итемов. TfgToast (UPDATED) - класс отображения быстрых сообщений TfgFlipView - слайдер изображений. Поддерживает несколько способов переключения фотографий при помощи эффектов и сдвигов. При первом использовании ОБЯЗАТЕЛЬНО прочитать инструкцию "TfgFlipView - Инструкция загрузки стиля" TfgPositionAnimation - анимация свойств типа TPosition TfgPosition3DAnimation - анимация свойств типа TPosition3D  TfgBitmapLinkAnimation - анимация свойств типа TBitmapLink  TfgProgressDialog (UPDATED) - Компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения фоновой операции можно оценить. TfgActivityDialog (UPDATED) - компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения операции не возможно адекватно оценить. TfgActionSheet (UPDATED) - Аналог контекстного меню для мобильных платформ. TfgColorsPanel - Палитра цветов с возможностью выбора цвета. TfgGradientEdit (UPDATED) - Компонент выбора градиента. TfgLinkedLabel  - Метка поддерживающая открытие Web ссылки в браузере по умолчанию. TfgApplicationEvents - компонент с возможностью легко задать обработчики на основные события приложения: Отслеживание смены состояния приложения, простой, обновление и выполнение действий Actions, Изменение ориентации устройства и тд. TfgVirtualKeyboard - компонент облегчающий работу с виртуальной клавиатурой. Позволяет задать пользовательские кнопки над виртуальной клавиатурой под iOS, а так же отлавливать события по отображению и скрытию клавиатуры. (UPDATED) Зарегистрированы все стилевые объекты на вкладке "FGX: Style objects" Список изменений
    TfgActionSheet: Добавлен новый вариант темы Theme = Custom и свойство ThemeID, позволяющий для андроида указать идентификатор своей темы диалога. Теперь доступна возможность создать свой вариант диалога для андроида. Изменен порядо срабатывания событий OnCancel, OnHide в реализации на iOS. Раньше срабатывали OnHide -> OnCancel, Теперь: OnCancel -> OnHide Обновлен пример Общие улучшения в читабельности кода TfgProgressDialog, TfgActivityDialog: Добавлен новый вариант темы Theme = Custom и свойство ThemeID, позволяющий для андроида указать идентификатор своей темы диалога. Обновлен пример Общие улучшения в читабельности кода TfgGradientEdit: Добавлено событие OnPointRemoved, срабатывающее, когда точка удалена из градиента. Обновлен пример TfgToast: Исправлена ошибка на iOS, приводящая к AV при многочисленном отображении тостов. (Спасибо Сергею Пьянкову за найденную ошибку) Регистрация стилевых объектов: Теперь регистрируются только те объекты, которые не добавлены в палитру.
  4. Like
    AngryOwl получил реакцию от Rusland в Как запустить приложение на планшете с Windows10 ?   
    Установить PAServer на удаленной машине (ПК/планшет) и все.
    Как сделать тут и тут. И вообще много в сети примеров, в том числе и на этом форуме где-то было.
  5. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в Помогите разобраться с потоком   
    нужно делать вот так:
    1) использовать компоненты Ярослава
    2) анимацию запускаем до потока (в котором выполняются разного рода запросы), по завершению операции в !синхронизации! выключаем анимацию
  6. Like
    AngryOwl получил реакцию от Равиль Зарипов (ZuBy) в Как запустить приложение на планшете с Windows10 ?   
    Установить PAServer на удаленной машине (ПК/планшет) и все.
    Как сделать тут и тут. И вообще много в сети примеров, в том числе и на этом форуме где-то было.
  7. Like
    AngryOwl получил реакцию от Andrey Efimov в Как запустить приложение на планшете с Windows10 ?   
    Установить PAServer на удаленной машине (ПК/планшет) и все.
    Как сделать тут и тут. И вообще много в сети примеров, в том числе и на этом форуме где-то было.
  8. Like
    AngryOwl получил реакцию от chaplin.u@gmail.com в Как запустить приложение на планшете с Windows10 ?   
    Установить PAServer на удаленной машине (ПК/планшет) и все.
    Как сделать тут и тут. И вообще много в сети примеров, в том числе и на этом форуме где-то было.
  9. Like
    AngryOwl отреагировална Fedor K в Андроид-фейсбук-вконтакте   
    При реализации  OAuth 2.0 при помощи TWebBrowser главное отследить Redirect. В случае успешной авторизации в URL будет содержаться необходимый токен. Посмотрите в сторону использования вот этих форм (находятся в ..\source\data\rest):
    {$IFDEF MSWINDOWS} REST.Authenticator.OAuth.WebForm.Win {$ELSE} REST.Authenticator.OAuth.WebForm.FMX {$ENDIF} У них есть событие:
    property OnAfterRedirect: TOAuth2WebFormRedirectEvent read FOnAfterRedirect write FOnAfterRedirect; TOAuth2WebFormRedirectEvent = procedure(const AURL: string; var DoCloseWebView : boolean) of object; Вот обработчик:
    procedure TframeAutch.AfterRedirect(const AURL: string; var DoCloseWebView: boolean); var i:integer; Str: string; Params: TStringList; begin i := pos('#access_token=',AURL); if (i>0) then begin Str := AURL; Delete(Str,1,i); Params:=TStringList.Create; try Params.Delimiter:='&'; Params.DelimitedText := Str; token := Params.Values['access_token']; DoCloseWebView := True; finally Params.Free; end; end; end; **Код выше из XE7, сейчас мб что-то изменилось. Использовал такой подход для авторизации в vk, facebook, google+.
    ***Если нужно, могу сделать демку, но это только на выходных.
  10. Like
    AngryOwl отреагировална rareMax в Андроид-фейсбук-вконтакте   
    Намерения конечно это вариант, но:
    1. Что если у пользователя не стоит клиент (для которого мы пишем намерение) для Вк/ фейсбука/ неба/ал...(ой чет увлекся). На плеймаркете полно клиентов. Придется собирать их полные названия и перебирать перед постингом. 
    2
    С поставленной целью отлично справится вариант именно через АПИ: Пользователю нужно всего лишь один раз пройти авторизацию и дать права. Ну а после можем уже без его спроса сливать цру постить сообщения
  11. Like
    AngryOwl отреагировална ruslan в [Android] Как узнать мой IP адрес?   
    можно куда проще 
    ip:= IdHttp.get('http://icanhazip.com/');
  12. Like
    AngryOwl получил реакцию от rareMax в Проблема с анимацией   
    Как один из вариантов решения подобных проблем - как можно меньше создавать/размещать на "двигающихся" элементах различных компонент.
    Чем меньше компонент - тем меньше "перерисовок". Отсюда - какие именно компоненты, тоже играет роль. Если это TLabel или TPanel, или другие несложные компоненты, то это "простые" элементы. Соответственно их перерисовка не сложна. Если это элементы посложнее, типа TListBox, в котором у всех его TListBoxItem определены свойства Text, Detail и, возможно, другие, типа вставлены еще и картинки и т.д., то это будет уже "весомый" элемент.
    Что еще важно - какой стиль вы применили к тому или иному компоненту. Если у вас простой TPanel имеет сложный стиль, переопределенный вами, то и его "прорисовка", соответственно, будет дольше происходить.
    Не забывайте о том, что можно сделать предварительную загрузку стиля. Это сильно уменьшит время первого отображения вашего элемента.
    Ну есть еще вариант... Он будет, относительно, "мудреней"... Все зависит от вашего желания)
    Пример, насколько я помню, можно посмотреть тут. Суть заключается в том, что можно сделать скрин вашего элемента (панели) и работать с ним (показывая его в момент анимации и отключая поле выполненной анимации). Подобных примеров достаточно, в том числе на сайте Embarcadero.
  13. Like
    AngryOwl отреагировална estra в Как узнать мой IP адрес?   
    Подойдет?
  14. Like
    AngryOwl получил реакцию от Martifan в Проблема с анимацией   
    Как один из вариантов решения подобных проблем - как можно меньше создавать/размещать на "двигающихся" элементах различных компонент.
    Чем меньше компонент - тем меньше "перерисовок". Отсюда - какие именно компоненты, тоже играет роль. Если это TLabel или TPanel, или другие несложные компоненты, то это "простые" элементы. Соответственно их перерисовка не сложна. Если это элементы посложнее, типа TListBox, в котором у всех его TListBoxItem определены свойства Text, Detail и, возможно, другие, типа вставлены еще и картинки и т.д., то это будет уже "весомый" элемент.
    Что еще важно - какой стиль вы применили к тому или иному компоненту. Если у вас простой TPanel имеет сложный стиль, переопределенный вами, то и его "прорисовка", соответственно, будет дольше происходить.
    Не забывайте о том, что можно сделать предварительную загрузку стиля. Это сильно уменьшит время первого отображения вашего элемента.
    Ну есть еще вариант... Он будет, относительно, "мудреней"... Все зависит от вашего желания)
    Пример, насколько я помню, можно посмотреть тут. Суть заключается в том, что можно сделать скрин вашего элемента (панели) и работать с ним (показывая его в момент анимации и отключая поле выполненной анимации). Подобных примеров достаточно, в том числе на сайте Embarcadero.
  15. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в Проблема с анимацией   
    ну вы же понимаете как работает анимация?
    1) реорганизация положения контрола на родителе
    2) реорганизация положения компонентов внутри контрола
    3) сработает ресайз контрола и всех его дочерних компонентов, что вызовет содержащий в обработчиках код
    если высота контрола для которого применяется анимация равна 100 пикселям, все это повторится 100 раз
  16. Like
    AngryOwl отреагировална Brovin Yaroslav в NOTIFICATION_SERVICE перестает работать с андроид 5.0   
    Это связано со старой ошибкой Google NDK, которая приводит к AV, при попытке взять константу, объявленную в базовом классе, через наследуемый. 
    Поэтому все константы нужно брать из того, класса, где они объявлены первоначально, а не в наследуемых.
  17. Like
    AngryOwl отреагировална Fedor K в NOTIFICATION_SERVICE перестает работать с андроид 5.0   
    Необходимо использовать 
    TJContext.JavaClass.NOTIFICATION_SERVICE вместо
    TJActivity.JavaClass.NOTIFICATION_SERVICE Для получения менеджера лучше использовать контекст (данный код работает на версии 4.4 и 5+):
    function GetNotificationService: JNotificationManager; var NotificationServiceNative: JObject; begin NotificationServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.NOTIFICATION_SERVICE); Result := TJNotificationManager.Wrap((NotificationServiceNative as ILocalObject).GetObjectID); end;  
  18. Like
    AngryOwl получил реакцию от #WAMACO в Мультиязычность в андроиде   
    И еще, друзья! Делалось это все для себя, для личного пользования, а не для "распространения")
    Так-что не обессудьте - если где "говнокод") Сами поправите кому как нравится)
    Заодно может поделитесь интересными мыслями и идеями.
    Если кому что не понятно - подскажу.
  19. Like
    AngryOwl получил реакцию от DimArt в Мультиязычность в андроиде   
    Как обещал - приложение для создания, редактирования, автоматического перевода и сохранения Ini-файлов с переводами для локализации своих приложений. Для примера есть два файлики (Lang.en и Lang.ru) и другие файлы, содержание которых всем будет понятно)
    Все, вроде, просто)
    P.S. Все желающие могут использовать как хотят. Можете что-то добавлять, исправлять и т.д. Ну и не забываем делиться с другими...))
    P.P.S. - делалось уже давно, под XE7. Кто захочет под XE10 - думаю все будет крайне просто переделать.
    SLLanguage.zip
  20. Like
    AngryOwl получил реакцию от Winexcel в Локализация приложений   
    Друзья!
    Я тут в одной теме выложил юнит для локализации приложений и демо-пример к нему, а также приложение облегчающее создание и редактирование ресурсов для локализации (файлов с переводами на разные языки).
    Потом подумал - может стоит вынести это в отдельную тему?
    Данная проблема (локализации приложений) возникла уже давно. На заре XE2. Потом были все версии, вплоть до текущей. Но лично меня текущие решения так и не  устраивали. Мне нужно было простое и удобное редактирование сразу всех языков приложения, и чтобы быстро работало.
    Тогда и были созданы этот юнит и приложения, с которыми я решил с вами поделиться. Создано это было для себя, для упрощения локализации собственных приложений. Поэтому никакой "красоты" кода прошу не искать - ее там нет. Местами вообще кому-то покажется "кривым"... )
    Очень жаль, что у меня критически мало времени для общения на данном ресурсе, а потому я в некотором смысле извиняюсь - мог бы выложить этот код давно.
    Тем-более, что он очень простой. Все что в нем используется, и как используется, думаю, всем будет доступно и понятно.
     
    Итак.
    Приложение Test_Translator - это дело пример с, непосредственно, самим юнитом uTranslatorFM.pas
    В uTranslatorFM.pas вы увидите, что локализация осуществлена за счет использования INI-файлов, а сам "перевод" осуществляется простым перебором компонент на форме.
    Стоит отметить, что перевод осуществляется использованием свойства компонент HelpContext (integer), а у компонент, что не имеют этого свойства - используется свойство Tag.
    На первый взгляд может показаться неудобным. А если приложение большое - что-то может забыться. Однако, лично я очень быстро привык к такому использованию. И поверьте  - приложение, в котором я использую этот юнит, очень большое! )))
    Кроме того, если есть компоненты, которые не имеют этих свойств, или которые могут менять значение перевода самостоятельно, либо могут быть динамическими - можно использовать нулевой HelpContext, но при этом придавать им значения "вручную".
    Например: если требуется у компонента TLabel динамически менять значение в ходе выполнения программы, подставляя нужные "подстроки" (грубо - используя, например, Format(...)), то можно написать в программе
    Label1.Text := Format( AppTranslator.GetValue(_код_, _значение_по_умолчанию_), [_подставляемое_значение_]); где
    _код_ - это значение, которое будет считываться из INI-файла (например 100)
    _значение_по_умолчанию_ - значение строки по умолчанию, на тот случай, если данный текст отсутствует в INI-файле, или файла с таким переводом не существует (этот параметр не обязателен)
    _подставляемое_значение_ - в данном случае это просто пример, допустим - ход выполнения процесса (например 85%)
    А строка в INI-файле может быть такая:
    (файл lang.ru)
    100=Процесс выполнения %d%%
    (файл lang.en)
    100=The progress %d%%
    и также другие языки.
    Думаю тут, в примере, все элементарно и понятно.
    Все работает на любой платформе!
    Как вы будете подключать файлы к приложению - ваше дело. Можно скачивать с инета, можно встроить в качестве ресурсов, задеплоить в проект и т.д.
    Лично я встраиваю в качестве ресурсов (Win) и деплою (Mac и Android). У меня свои причины и аргументы.
    Файлы:
    Lang.ru
    Lang.en
    и другие, это INI-файлы соответствующих переводов где строки с переводами имеют одинаковые индексы
    LangList.ini - вспомогательный файл (разберетесь))
    language.rc - файл для создания ресурса (Win)
     
    С приложением SLLanguage все немного и сложнее и проще, одновременно...
    Не вижу смысла его описывать - оно просто позволяет редактировать описанные выше ресурсы (файлы языков).
    Часть его кода откуда-то позаимствовано (не помню уже).
     
    Для чего все это я отдельно решил написать, в отдельную тему?
    Предлагаю всем пользоваться данным кодом - кому как заблагорассудится! Исправлять, дополнять и делится мыслями и идеями.
    Возможно кто-то решит создать компонент.
    Ну вот вроде все, друзья!
    Если что - спрашивайте! Отвечу по мере возможности.
    P.S. К модераторам - поправьте, если что, - вдруг не в ту тему закинул.
    SLLanguage.zip
    Test_Translator.zip
    P.P.S. Забыл уточнить - дело-пример делал под XE10, а приложение для создания ресурсов под XE7. Не сложно поправить - кому под что нужно.
  21. Like
    AngryOwl получил реакцию от virus_forever в Одновременное воспроизведение звуков   
    Думаю, Вам в помощь библиотека BASS.
    Качестве примера использования самой библиотеки, рекомендую посмотреть пример, написанный ZuBy.
    "у меня на гитхабе лежит пример работы с BASS, она же используется в этом приложении" (c) ZuBy
  22. Like
    AngryOwl получил реакцию от Равиль Зарипов (ZuBy) в Одновременное воспроизведение звуков   
    Думаю, Вам в помощь библиотека BASS.
    Качестве примера использования самой библиотеки, рекомендую посмотреть пример, написанный ZuBy.
    "у меня на гитхабе лежит пример работы с BASS, она же используется в этом приложении" (c) ZuBy
  23. Like
    AngryOwl получил реакцию от Kitty в Одновременное воспроизведение звуков   
    Думаю, Вам в помощь библиотека BASS.
    Качестве примера использования самой библиотеки, рекомендую посмотреть пример, написанный ZuBy.
    "у меня на гитхабе лежит пример работы с BASS, она же используется в этом приложении" (c) ZuBy
  24. Like
    AngryOwl отреагировална Fedor K в TNotificationCenter. Можно ли изменить иконку?   
    Иконка изменится внутри приложения в рамах текущего контекста до ее завершения. С других приложений и в системе ничего не поменяется (см. прикрепление).
    Чтобы не влиять на другой функционал, достаточно сделать следующее:
    //запоминаем ид по умолчанию lDefaultId := TAndroidHelper.Context.getApplicationInfo.icon; //устанавливаем нашу кастомную иконку TAndroidHelper.Context.getApplicationInfo.icon := lId; //создаем локальное уведомление NotificationCenter.PresentNotification(lNotification); //возвращаем обратно TAndroidHelper.Context.getApplicationInfo.icon := lDefaultId; п.с. Если такой вариант не устраивает, всегда можно написать class helper for TBaseNotificationCenter и использовать классы JNotificationCompat_Builder, JNotificationManager, JNotification. Справка из developer.android.com.

  25. Like
    AngryOwl отреагировална krapotkin в С днем рождения!   
    Поздравляем Ярослава с Днем рождения!
    Благодарим за титанические усилия, которые он по собственной инициативе, не "благодаря", а скорее "вопреки", прилагает для развития нашего сообщества.
    Желаем не только профессионального благополучия, но и личного счастья!
    Ура, товарищи!

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