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

ruslan

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

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

  • Посещение

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

    15

Сообщения, опубликованные ruslan

  1. http://www.fmxexpress.com/ten-tips-for-migrating-from-c-and-net-to-multi-platform-object-pascal-and-delphi-firemonkey/

    поржал от души ))

    для опытного дельфиста не составит особого труда изучить .net. 

    Я для себя нашел столько полезного...

    Только нужно привыкнуть: 

    - условие операторе  if условие всегда заключается в скобки

    - {} вместо begin end

    - нету процедур. есть функции возвращающие void

    - тип возвращаемого значения метода указывается до имени метода, а не после

    - в паскале все классы обычно начинают с T, в шарпе такого нет, префиксы не указывают

    - имена классов, методов, переменных чувствительны к регистру

    - нету "объявлений" классов. все "по месту". т.е. interface и implementation объединены

    - область видимости указывается не для группы методов, а перед каждым методом

    - вместо class function идет static

    - хэлперов может быть сколько угодно, классы хэлперов взаимодополняют друг друга

    - наследование дженериков(да и вообще наследование) реализовано шикарно, не как в дельфях

     

    это только то, к чему нужно привыкнуть..

    а так... небо и земля... я вот даже преимущество дельфей не могу перечислить, хотя не один год писал...

    + visual studio community edition. все бесплатно.

    по поводу ксамарина.. полное покрытие всего апи,

    собирал демки: размер апк, объем занимаемой в оперативе памяти, как если бы собирал андроид студией.

    да, нужно изучать api каждой платформы( android\ios ), да gui рисуется отдельно для каждой платформы, но подумайте сколько времени Вы тратите на "рисование" гуи, а сколько на отлов багов\исправление "недо-фич", а сколько нервишек то сэкономиться...

    Может кто и не согласен, готов побеседовать..

    Это ведь так... мой скромный опыт

  2. AlexG, а вы случайно не связывались с разработчиками ПО, которые делали на RAD Studio клиент для просмотра видеопотоков с IP-камер? Я где-то видел ролик, в котором их решение довольно шустро отрабатывало выведение потока как с IP камеры, так и с другого мобильного устройства. 

    Я практически уверен, что это нереально. Вот попробуйте в AndroidStudio накидать простой пример(либо глянуть один из стандартных сэмплов) захвата кадров с камеры и последующим обработкой\сохранением\передачей\ваш_вариант. Работает идеально. Прокиньте свои java-классы\функции через абракадабровский wrapper(JNI). Работает очень медленно ! По-этому я для себя сделал такой вывод: дело не в TCameraComponent(гляньте его ведро-реализацию - все очень просто), все дело в JNI. На простых\однократных операциях это не заметно. Там где начинаются обработки фото\видео\звука - начинается кошмар. Называйте это "пингом" между fmx и android'ом, или как-то по-другому, но факт есть факт: JNI(или хз что там конкретно, какой-то "мост") работает очень медленно. По-этому если Вам нужны реально высокопроизводительные приложения под ведро\иос - смотрите в сторону инструментов, предлагаемых компаниями-разработчиками данных ОС, ну или Xamarin. Вот испульзуя эти инструменты, Вы получите реально "true native". А так.. все "это" годно только для простейших свисто-перделок, "блокнотов" и АРМов из 3-х таблицы(по типу Employee Directory).

     

    п.с. Сам я потихоньку "переезжаю" на VisualStudio, AndroidStudio

  3. Добрый день всем тем несчастным :) кто пишет на фаирманки.

    Если ваше приложение (под андроид) делает больше, чем приложения из папки Samples, если оно содержит не только ButtonClick и Memo, то, наверняка, вы постоянно наблюдаете мою "любимую" ошибку при закрытии приложения: Segmentation fault(11).

    Если Вам надоело править исходники из папки {XE7}\Source, если ваше приложение ну никак не хочет полностью выгружаться и висит в фоновых процессах, 

    покажу Вам свое решение данной, мягко говоря, проблемы.

     

    Подключаем к проекту приложенный .pas и в нужном месте кода(желательно на OnClose главной формы) юзаем процедуру KillMe.

    Теперь Ваше приложение всегда будет выгружаться из памяти, а также запускаться с 1-го раза.

     

     

    п.с. Если посмотреть исходники, то можно понять смысл названия топика.

     

    uVedroProcess.zip

  4. помню допиливал для себя.

    см. вложение.

     

    на DidFinishLoad делай

    // вытягиваем урл из компонента WebBrowser
      {$ifdef mswindows}
        newURL:= (FWebBrowser.GetWeb as IWebBrowserEx).GetLocation;
      {$else}
        newURL:= FWebBrowser.GetWeb.URL;
      {$endif}

    ( конечно, можно все ето в геттеры\сеттеры завернуть, но времени не было)

    везде не тестил. но под винду и ведро работает( я ловил редирект после авторизации в [прости господи] Вконтакте )

    TWebBrowserEx.zip

  5. а что должен делать компонент то ?

    тут без сервиса не обойтись. а сервис\ресивер - сугубо нативные ведро-фишки. как ты их "завернешь" в компонент, если это автономные сущности, которые в добавок еще и в манифестах  прописываются ? Плюс в ведре есть разные сервисы, разные ресиверы, которые по-разному "кодятся".

    было бы конечно шикарно, чтобы в дельфях можно было писать такие сервисы, по типу как в вин-приложениях.

    Но, по сути, лучше изучить сдк, и написать самому, потому как можно и не дождаться :)

  6. я бы посоветовал посмотреть как реализована работа с GCM push уведомлениями. декомпильте cloud-messaging.jar, который в {xe7}\lib\android\debug

    откройте в андроид студии например. работа с пушами построена, по сути, как это рекомендует делать Google( https://developer.android.com/google/gcm/client.html ).

    т.е. есть  WakefulBroadcastReceiver( com.embarcadero.gcm.notifications.GCMNotification ), который в манифесте подписывается на intent-filter com.google.android.c2dm.intent.RECEIVE.

    когда приходит пуш - ресивер его ловит. если имплементирован т.н. listener( в дельфях по указателю назначен обработчик ), то управление передается ему, т.е. дельфи-приложение(основной активити) принимает intent, который пришел от гугла, и обрабатывает пуш. если лисенер не назначен, то стартует IntentService ( https://developer.android.com/reference/android/app/IntentService.html ), который парсит пришедший интент и вызывает публикацию нотификейшена.

     

    короч, ковыряем исходники и изучаем Android SDK :)

  7. День добрый. Необходимо при получении push-сообщения определенного содержания, проводить определенные действия( например поднять активити из бэкграудна\стартануть активити ).

    В

    unit Androidapi.JNI.PlayServices.GCM 

    есть интерфейсы 

    JGCMIntentService = interface;//com.embarcadero.gcm.notifications.GCMIntentService
    JGCMNativeListener = interface;//com.embarcadero.gcm.notifications.GCMNativeListener
    JGCMNotification = interface;//com.embarcadero.gcm.notifications.GCMNotification

    проблема в том что это JNI на java-классы, которые лежат в скомпилированном jar-файле

    {XE7}\lib\android\debug\cloud-messaging.jar

     

    мне, как я понимаю, нужно править пакет com.embarcadero.gcm.notifications.GCMNotification. там как я понимаю реализован классический BroadcastReciever( extend GCMBroadcastReceiver ), а конкретно нужно поправить метод onReceive, который обрабатывает broadcast'ы от сервиса( GCMIntentService )

    вопрос( думаю к Embarcadero ): можно ли как-нибудь получить исходники ваших java-классов GCM-сервисов, дабы не заниматься написанием велосипедов ?

  8. Подскажите, знает ли кто как в FMX использовать свой шрифт не устанавливая его в в систему ?

    под vcl было что-то вроде:

    procedure LoadFont;
      var
        MyResStream: TResourceStream;
      begin
        MyResStream:= GetResStream('MyFont');
        MyResStream.SavetoFile('MyFont.ttf');
        AddFontResource(PChar('MyFont.ttf'));
        SendMessage(HWND_BROADCAST, WM_FONTCHANGE,0,0);
      end;
    
      procedure UnLoadFont;
      begin
        RemoveFontResource('MyFont.ttf') ;
        SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
      end;

    в фаирманках, что удивительно(сарказм),  этот не работает. 

    как я понимаю, шрифты подгружаются в момент запуска приложения, и рисуются средствами gdi...

     

    хотел поправить юнит FMX.FontGlyphs.Win по аналогии с http://delphifmandroid.blogspot.com/2015/01/true-type.html

    но TWinFontGlyphManager даже не создается( дебагер не попадает в конструктор ).

     

    вопрос: как решить эту маленькую проблему ?

     

     

  9. если в кратце: создаешь интент с ACTION_GET_CONTENT. стартуешь через startActivityForResult. ловишь результирующий интенет. получаешь оттуда uri. создаешь InputStream, передав в конструктор этот uri. потом этот стрим в массив байт. потом массив в дельфовый stream. и делаешь с ним что хочешь.

    ну или свой файлманагер

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