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

ruslan

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

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

  • Посещение

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

    15

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

  1. Like
    ruslan получил реакцию от PowerOwl в Друзья, дайте совет как быть   
    купите лицензию на абракадабру !))
  2. Like
    ruslan получил реакцию от Ingalime в Сортировка TListViewItems   
    TListView(Sender).Items.ActiveItems.Sort(       TComparer<TListViewItem>.Construct(         function(const Left, Right: TListViewItem): Integer         var .......   TListView(Sender).Items.Changed;     p.s. ActiveItems и Changed - это хелперы к соотв-им полям\методам strict private   p.s. метод Sort - я вообще не понимаю {censored} он тут нужен. он сортирует свои внутренние объекты стиля
  3. Like
    ruslan получил реакцию от Maka в Решение Segmentation fault(11). Или "Axe beats in the balls"   
    Добрый день всем тем несчастным кто пишет на фаирманки.
    Если ваше приложение (под андроид) делает больше, чем приложения из папки Samples, если оно содержит не только ButtonClick и Memo, то, наверняка, вы постоянно наблюдаете мою "любимую" ошибку при закрытии приложения: Segmentation fault(11).
    Если Вам надоело править исходники из папки {XE7}\Source, если ваше приложение ну никак не хочет полностью выгружаться и висит в фоновых процессах, 
    покажу Вам свое решение данной, мягко говоря, проблемы.
     
    Подключаем к проекту приложенный .pas и в нужном месте кода(желательно на OnClose главной формы) юзаем процедуру KillMe.
    Теперь Ваше приложение всегда будет выгружаться из памяти, а также запускаться с 1-го раза.
     
     
    п.с. Если посмотреть исходники, то можно понять смысл названия топика.
     
    uVedroProcess.zip
  4. Like
    ruslan получил реакцию от Евгений Корепов в Push в Android   
    1) Спасибо за отклик.
    2) Мне не нужен "свой провайдер". Я могу отправить пуш прямо на device_token. Вопрос в том, как мне "подписаться" на прием пушей. 
    3) в FMX.PushNotification.Android  и так есть необходимый сервис для работы с GCM - TGCMPushService
    и в принципе, сделав
    gcm:= TGCMPushService.create;
    gcm.Register('мой app_id');
    можно вытащить DeviceToken и это работает и я это знаю
    4) Касается не только пушей
    Ну вот объясните мне: ЗАЧЕМ описывать типы в implementation ?? ну ЗАЧЕМ ? Из-за этого нельзя унаследоваться от типа, нельзя устранять "баги", потому что эти "баги" задействуют private\protected члены, к которым не получить доступ ни через class-хелперы, ни как по другому.
    Приходится тупо копи-пастить в новый юнит и там править баги, наследоваться и т.п.
     
    Тот же самый баг с камерой, кот. не исправляется еще с XE<хз_какой_старой> , исправляется ОДНОЙ строкой кода.
    Но нет же, нужно все "прятать" в implementation, что б пытливые программеры не лезли куда не нужно и не трогали "наши баги".
     
    Может я чего-то конечно не понимаю, но вот какой вообще смысл объявлять типы в implementation, а не как все белые люди ?
    Че-то меня опять понесло...
     
    А если по теме, то идеально конечно было бы пригласить в топик человека, который писал "систему" push-уведомлений. Думаю он смог бы многое пояснить.
    Мне кажется очень многих разработчиков волнует вопрос приема\отправки push'ей, т.к. это единственный(поправьте если не прав) способ гарантированно уведомить юзера 
    о каких-то событиях\обновлениях даже если андроид убил приложение. Не в смысле спамить всякую ересь, а реально если логика приложения сильно завязана на работу с БД, взаимодействие юзеров, таски там всякие, обмен сообщениями, и сложную корпоративную бизнес-логику.
    Опять понесло...
     
    Тема очень актуальная уже для нескольких разрабов, которые рискнули начать фаирманчить под десктоп\иос\андроид.
     
    Поправьте если что не так пишу\понимаю\делаю
    Заранее спасибо за помощь
  5. Like
    ruslan получил реакцию от Anatoliy в Освобождение памяти TListViewItem   
    при Add тебе возвращается указатель(!) на новый итем. 
    смотри TListViewItems.AddItem(Index: Integer) в FMX.ListView
     
    в TListViewItems.Delete(Index: Integer) вызывается FreeAndNil итема
     
    а вот в TListViewItems.Clear просто чистится TList<TListViewItem>.
    как известно TList это просто список указателей. так что сама память при ListView.Items.Clear как я понимаю не освободится.
    как альтернатива:
     
    while ListView.Items.Count > 0 do
    ListView.Items.Delete(0); 
  6. Like
    ruslan получил реакцию от GASCHE в Универсальный способ хранения настроек   
    юзай Rest.Json.
     
    пишешь свой класс настроек, например:
    TSettings = class   private      fname: string;     fpass : string;   public     property name: string read fname write fname;     property pass: string read fass write fpass; end; // вытягиваешь json-строку из файла Settings:= TJson.JsonToObject<TSettings >( 'строка с json, которая из файла' ); // что-то поменял s:= TJson.ObjectToJsonString( Settings ); // сохранил json-строку в файл
  7. Like
    ruslan получил реакцию от Rusland в Решение Segmentation fault(11). Или "Axe beats in the balls"   
    Добрый день всем тем несчастным кто пишет на фаирманки.
    Если ваше приложение (под андроид) делает больше, чем приложения из папки Samples, если оно содержит не только ButtonClick и Memo, то, наверняка, вы постоянно наблюдаете мою "любимую" ошибку при закрытии приложения: Segmentation fault(11).
    Если Вам надоело править исходники из папки {XE7}\Source, если ваше приложение ну никак не хочет полностью выгружаться и висит в фоновых процессах, 
    покажу Вам свое решение данной, мягко говоря, проблемы.
     
    Подключаем к проекту приложенный .pas и в нужном месте кода(желательно на OnClose главной формы) юзаем процедуру KillMe.
    Теперь Ваше приложение всегда будет выгружаться из памяти, а также запускаться с 1-го раза.
     
     
    п.с. Если посмотреть исходники, то можно понять смысл названия топика.
     
    uVedroProcess.zip
  8. Like
    ruslan получил реакцию от Ra72 в Универсальный способ хранения настроек   
    юзай Rest.Json.
     
    пишешь свой класс настроек, например:
    TSettings = class   private      fname: string;     fpass : string;   public     property name: string read fname write fname;     property pass: string read fass write fpass; end; // вытягиваешь json-строку из файла Settings:= TJson.JsonToObject<TSettings >( 'строка с json, которая из файла' ); // что-то поменял s:= TJson.ObjectToJsonString( Settings ); // сохранил json-строку в файл
  9. Like
    ruslan получил реакцию от AngryOwl в [Android] Как узнать мой IP адрес?   
    можно куда проще 
    ip:= IdHttp.get('http://icanhazip.com/');
  10. Like
    ruslan получил реакцию от Rusland в [TVideoCaptureDevice] Как оптимизировать скорость считывания данных с камеры?TVideoCaptureDevice   
    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 рисуется отдельно для каждой платформы, но подумайте сколько времени Вы тратите на "рисование" гуи, а сколько на отлов багов\исправление "недо-фич", а сколько нервишек то сэкономиться...
    Может кто и не согласен, готов побеседовать..
    Это ведь так... мой скромный опыт
  11. Like
    ruslan получил реакцию от Rusland в Освобождение памяти TListViewItem   
    при Add тебе возвращается указатель(!) на новый итем. 
    смотри TListViewItems.AddItem(Index: Integer) в FMX.ListView
     
    в TListViewItems.Delete(Index: Integer) вызывается FreeAndNil итема
     
    а вот в TListViewItems.Clear просто чистится TList<TListViewItem>.
    как известно TList это просто список указателей. так что сама память при ListView.Items.Clear как я понимаю не освободится.
    как альтернатива:
     
    while ListView.Items.Count > 0 do
    ListView.Items.Delete(0); 
  12. Like
    ruslan получил реакцию от rareMax в Кому нужны программисты Fire Monkey?   
    Ответ очевиден: никому.
    И никто меня не переубедит
  13. Like
    ruslan получил реакцию от zairkz в Какие компоненты использовать в клиент-сервере   
    Не должен клиент напрямую коннектиться к базе. Должна быть прослойка. Пофигу: тонкая или толстая. Если бизнес логика предполагает миграцию на другую бд - толстая, есои нет - бизнес в пакетах\процедурах. Нельзя с клиента напрямую к бд идти. Должен быть rest-сервис. Пофигу - tcp\http, на дельфях он или на джаве, на питоне, на асп.нете... Клиент должен идти через прослойку. Имхо
  14. Like
    ruslan получил реакцию от AngryOwl в Запустить приложение из сервиса или показать форму   
    йомайо, сколько крику то столько не заходил - а тут во какой срач разбираете classes.dex(гуглим), ложите все в отдельное место, берете отдельно fmx.jar, декомпилируете, собираете проект в андроид студии,  открываете com\embarcadero\firemonkey\notifications\FMXNotificationPublisher.java переписываете метод PublishGCM, которые обрабатывает пуши(можете туда хоть открытие приложения вставить, хоть отправку ваших гет запросов) билдите из проекта вытаскиваете \fmx\build\intermediates\classes\debug\com\embarcadero\firemonkey\notifications\FMXNotificationPublisher.class кладете его назад в fmx.jar пересобираете classes.dex (есть спец. утилитки) у себя в деплое меняете classes.dex на ваш новый.  Всё. дальше сами.   п.с. и не надо никаких лишних сервисов писать. уже абракадаброй добавлен пушевский сервис, который наверняка понадобиться п.с. фаирманки - зло
  15. Like
    ruslan получил реакцию от zairkz в Друзья, дайте совет как быть   
    купите лицензию на абракадабру !))
  16. Like
    ruslan получил реакцию от Евгений Корепов в Можно ли программно передать фокус на SearchBox и очистить строку?   
    проще
     
      TCustomListView_helper = class helper for TCustomListView     function SearchEdit: TSearchBox;   end; { TCustomListView_helper } function TCustomListView_helper.SearchEdit: TSearchBox; begin   Result:= Self.FSearchEdit; end;
  17. Like
    ruslan получил реакцию от Евгений Корепов в [Android] [XE7] Потоки   
    посмотри. может что интересное найдешь )
    стр. 129  
    Delphi Cookbook.pdf
  18. Like
    ruslan получил реакцию от AngryOwl в Чат со смайлами   
    уверяю Вас - стало только хуже )
  19. Like
    ruslan получил реакцию от sviat9440 в Друзья, дайте совет как быть   
    купите лицензию на абракадабру !))
  20. Like
    ruslan получил реакцию от Евгений Корепов в Решение Segmentation fault(11). Или "Axe beats in the balls"   
    Добрый день всем тем несчастным кто пишет на фаирманки.
    Если ваше приложение (под андроид) делает больше, чем приложения из папки Samples, если оно содержит не только ButtonClick и Memo, то, наверняка, вы постоянно наблюдаете мою "любимую" ошибку при закрытии приложения: Segmentation fault(11).
    Если Вам надоело править исходники из папки {XE7}\Source, если ваше приложение ну никак не хочет полностью выгружаться и висит в фоновых процессах, 
    покажу Вам свое решение данной, мягко говоря, проблемы.
     
    Подключаем к проекту приложенный .pas и в нужном месте кода(желательно на OnClose главной формы) юзаем процедуру KillMe.
    Теперь Ваше приложение всегда будет выгружаться из памяти, а также запускаться с 1-го раза.
     
     
    п.с. Если посмотреть исходники, то можно понять смысл названия топика.
     
    uVedroProcess.zip
  21. Like
    ruslan получил реакцию от Евгений Корепов в Универсальный способ хранения настроек   
    юзай Rest.Json.
     
    пишешь свой класс настроек, например:
    TSettings = class   private      fname: string;     fpass : string;   public     property name: string read fname write fname;     property pass: string read fass write fpass; end; // вытягиваешь json-строку из файла Settings:= TJson.JsonToObject<TSettings >( 'строка с json, которая из файла' ); // что-то поменял s:= TJson.ObjectToJsonString( Settings ); // сохранил json-строку в файл
  22. Like
    ruslan получил реакцию от Belov.V. в Универсальный способ хранения настроек   
    юзай Rest.Json.
     
    пишешь свой класс настроек, например:
    TSettings = class   private      fname: string;     fpass : string;   public     property name: string read fname write fname;     property pass: string read fass write fpass; end; // вытягиваешь json-строку из файла Settings:= TJson.JsonToObject<TSettings >( 'строка с json, которая из файла' ); // что-то поменял s:= TJson.ObjectToJsonString( Settings ); // сохранил json-строку в файл
  23. Like
    ruslan получил реакцию от Streletz в Решение Segmentation fault(11). Или "Axe beats in the balls"   
    Добрый день всем тем несчастным кто пишет на фаирманки.
    Если ваше приложение (под андроид) делает больше, чем приложения из папки Samples, если оно содержит не только ButtonClick и Memo, то, наверняка, вы постоянно наблюдаете мою "любимую" ошибку при закрытии приложения: Segmentation fault(11).
    Если Вам надоело править исходники из папки {XE7}\Source, если ваше приложение ну никак не хочет полностью выгружаться и висит в фоновых процессах, 
    покажу Вам свое решение данной, мягко говоря, проблемы.
     
    Подключаем к проекту приложенный .pas и в нужном месте кода(желательно на OnClose главной формы) юзаем процедуру KillMe.
    Теперь Ваше приложение всегда будет выгружаться из памяти, а также запускаться с 1-го раза.
     
     
    п.с. Если посмотреть исходники, то можно понять смысл названия топика.
     
    uVedroProcess.zip
  24. Like
    ruslan получил реакцию от Gingercat в Решение Segmentation fault(11). Или "Axe beats in the balls"   
    Добрый день всем тем несчастным кто пишет на фаирманки.
    Если ваше приложение (под андроид) делает больше, чем приложения из папки Samples, если оно содержит не только ButtonClick и Memo, то, наверняка, вы постоянно наблюдаете мою "любимую" ошибку при закрытии приложения: Segmentation fault(11).
    Если Вам надоело править исходники из папки {XE7}\Source, если ваше приложение ну никак не хочет полностью выгружаться и висит в фоновых процессах, 
    покажу Вам свое решение данной, мягко говоря, проблемы.
     
    Подключаем к проекту приложенный .pas и в нужном месте кода(желательно на OnClose главной формы) юзаем процедуру KillMe.
    Теперь Ваше приложение всегда будет выгружаться из памяти, а также запускаться с 1-го раза.
     
     
    п.с. Если посмотреть исходники, то можно понять смысл названия топика.
     
    uVedroProcess.zip
  25. Like
    ruslan получил реакцию от estra в Решение Segmentation fault(11). Или "Axe beats in the balls"   
    Добрый день всем тем несчастным кто пишет на фаирманки.
    Если ваше приложение (под андроид) делает больше, чем приложения из папки Samples, если оно содержит не только ButtonClick и Memo, то, наверняка, вы постоянно наблюдаете мою "любимую" ошибку при закрытии приложения: Segmentation fault(11).
    Если Вам надоело править исходники из папки {XE7}\Source, если ваше приложение ну никак не хочет полностью выгружаться и висит в фоновых процессах, 
    покажу Вам свое решение данной, мягко говоря, проблемы.
     
    Подключаем к проекту приложенный .pas и в нужном месте кода(желательно на OnClose главной формы) юзаем процедуру KillMe.
    Теперь Ваше приложение всегда будет выгружаться из памяти, а также запускаться с 1-го раза.
     
     
    п.с. Если посмотреть исходники, то можно понять смысл названия топика.
     
    uVedroProcess.zip
×
×
  • Создать...