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

Лидеры

  1. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      8

    • Постов

      2 517


  2. ENERGY

    ENERGY

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


    • Баллы

      5

    • Постов

      568


  3. Brovin Yaroslav

    Brovin Yaroslav

    Администраторы


    • Баллы

      4

    • Постов

      2 124


  4. enatechno

    enatechno

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


    • Баллы

      4

    • Постов

      181


Популярный контент

Показан контент с высокой репутацией 13.03.2017 во всех областях

  1. Создал 2 тестовых проекта (один VCL, другой FMX). В обоих только форма с кнопкой. Компилировал из 10 Seattle и 10 Berlin (конфигурация Debug). Запускал на win 7 и 10. Задержки в 1-2 сек не наблюдал. На глаз оба проекта запускаются с одинаковой скоростью. Конфигурация компьютера аналогична Вашей. https://www.youtube.com/watch?v=5q8ZKiYEWko
    4 балла
  2. Это касается ARC компиляторов, Android, iOS и будущего Linux. Если контейнер владелец, содержит классы, которые используют анонимный метод для общения с ним (классом владельцем), то такая конструкция порождает утечку памяти из-за появления циклической ссылки. Т.к. при присваивании анонимного метода инкрементируется счетчик ссылок и не меняется. Причем это не указано в хелпе. А дело было так - при вызове MyCore.Free класс не уничтожался - не вызывался деструктор из за того, что после вызова Free, счетчик ссылок (reference Count) был равен 1. Приходилось пользоваться DisposeOf. Решил разобраться. Для этого перекрыл виртуальные методы TObject отвечающие за изменения счетчика объекта (см. также полный пример ниже). function __ObjAddRef: Integer; override; function __ObjRelease: Integer; override; Итак TCore содержит класс TTestClass - у которого есть событие OnMyEvent. Прототип описан как анонимная процедура - TAnonymProc = reference to procedure; При указании анонимной процедуры, т.е. : procedure TCore.SetEvent; begin fTest.OnMyEvent := procedure () begin fSetFlag := true; end; end; счетчик ссылок TCore увеличивается на 1 и не изменяется при выходе из SetEvent. Теперь при вызове Free TCore - не будет вызван деструктор, который должен уничтожит классы TCore и TTestClass и произойдет утечка памяти. Решение : 1. Использовать слабые ссылки - weak, в нашем примере добавить атрибут [weak]: TTestClass = class strict private [weak]fOnMyEvent:TAnonymProc; public property OnMyEvent: TAnonymProc read fOnMyEvent write fOnMyEvent; end; При присваивании объекта в переменную со слабой ссылкой не происходит увеличение счётчика ссылок объекта на единицу. Аналогично, при очистке слабой ссылки не происходит уменьшение счётчика объекта на единицу. 2. Не использовать анонимные методы, а использовать обычные указатели на метод: Вместо TAnonymProc = reference to procedure; используем классический TAnonymProc = procedure of object; Демо пример, где можно отследить утечку прикрепил. Полный код: AnonMethodsCycle.zip
    3 балла
  3. Думаю, стоит перед загрузкой битмапа из Stream добавить Stream.Position:=0
    2 балла
  4. Не уверен, что это возможно, так как сам ScrollBox настраивает скролл боксы по своему усмотрению. Но вы можете получить к ним доступ и попробовать изменить их программным путем: type TOpenScrollBox = class(TCustomScrollBox); procedure TForm2.Button1Click(Sender: TObject); begin TOpenScrollBox(ScrollBox1).VScrollBar.ViewportSize; TOpenScrollBox(ScrollBox1).HScrollBar.ViewportSize; end;
    2 балла
  5. RoschinSpb

    vkHardwareBack, vkHome, vkMenu (Android)

    Средствами Fire Monkey нельзя. И это относится не только к HardwareBack, Home, Menu но и вообще к любым клавишам на любой клавиатуре. Возможно можно как-то воспользоваться андроидными системными функциями, но например в Windows нету системных средств для определения наличия физических клавиш. Так что обработка горячих клавиш всегда должна дублироваться какими-то другими интерфейсными элементами, если конечно Вы не хотите намеренно скрыть что-то от обычных пользователей.
    2 балла
  6. В iOS нужно писать StartUp\Documents. В Android assets\internal. Посмотрите, что у вас представляет собой filename. Судя по вашему коду должно быть имя файла плюс расширение.
    2 балла
  7. var MyRect: TRectF; begin MyRect := RectF(10, 10, 30, 30); if Canvas.BeginScene then try Canvas.Fill.Color := TAlphaColorRec.Red; Canvas.Stroke.Color := TAlphaColorRec.Black; Canvas.FillEllipse(MyRect, 1); Canvas.DrawEllipse(MyRect, 1); finally Canvas.EndScene; end; end; FillEllipse - заливка DrawEllipse - обводка
    2 балла
  8. AliZairov

    Update 2 + iOS 10.2

    Привет. Hotfix PAServer XCode 8.2 30680
    2 балла
  9. Ссылка: http://yaroslavbrovin.ru/object_life_cycle_in_delphi_part_2_android_ios-ru/ Автор: Ярослав Бровин Продолжаем тему жизненного цикла объектов в мире Delphi, но в этой части рассматриваем эту тему в рамках мобильных платформ Android и iOS. Delphi вводит новый подход к управлению памятью в мобильных платформах. Появляется автоматический подсчет ссылок, который с одной стороны облегчает код разработчика и должен помочь ему, а с другой стороны раскладывает равномерно грабли на пути освоения новых платформ в мире Delphi.
    1 балл
  10. ENERGY

    Реестр в Андроиде и Delphi

    SharedPreference удаляются при деинсталяции программы.
    1 балл
  11. Мне кажется, у вас не указан scale для загружаемой картинки в MultiResBitmap. BI.Scale := 1;
    1 балл
  12. как понять список доступных кнопок? на счёт кнопки Home, все верно, так и должно быть
    1 балл
  13. Все оно верно даст Вы проверяли? У меня все отлично, стоит регион Казахстан, язык системы русский Результат кода - ru Не поленился и запустил симулятор, языки естественно менял на соответствующие
    1 балл
  14. ENERGY

    Реестр в Андроиде и Delphi

    В Unix нет реестра, там все на файлах. Android, MacOS и iOS - это Unix. В Android есть 2 варианта для сохранения данных, которые не будут удалены после деинсталяции - сохранять на SD карту, и сохранять удаленно в свою базу (через интернет). http://stackoverflow.com/questions/19683614/android-persist-data-after-uninstall Хотя можно попробовать записать что-то и во внутреннее хранилище, в папки Music, Ringtones итп почитайте здесь статью Saving files that can be shared with other apps
    1 балл
  15. "Пустая и чистая" форма - вовсе не "пустая". В FMX приложении есть ресурсы. Откройте приложение в редакторе ресурсов (например Restorator 2007 или любой другой) и вы увидите содержимое бинарника. Так-что "пустая/чистая форма" - это в VCL, в FMX иначе.
    1 балл
  16. Какой стиль используется в XE3 и в 6-10 ? Если свой не подгружаете, то, думаю, - по умолчанию. Какой объем бинарника получается при компиляции Release в XE3, и какой в 10? Думаю дело может быть в ресурсах, используемых приложением.
    1 балл
  17. Поправка: это самый верный способ для FMX, вне зависимости от платформы. Емнип, у TCircle нет наследников. Ну и - для использования Release не обязательно приводить тип к истинному классу объекта. Поэтому сей код можно записать так (не проверял в IDE, но если скомпилируется - значит всё нормально): for k:=Layout1.ChildrenCount-1 downto 0 do if Layout1.Children[k] is TCircle then Layout1.Children[k].Release;
    1 балл
  18. Вас не смущает что это локальная переменная?
    1 балл
  19. Получите от медицинского центра разрешение на использование их логотипа. Можно на русском языке. Текст произвольный - поручаем Kitty изготовление приложения и разрешаем использование логотипов, торговых марок, фирменных наименований и т.д. в приложениях. Подробнее здесь https://play.google.com/intl/ru/about/ip-deception-spam/impersonation-ip/ И отправьте скан (pdf к примеру) этого письма в гугл, подробности тут https://support.google.com/googleplay/android-developer/answer/6320428 Последнее время все сложнее публиковать приложения, правила уже балансируют на грани маразма. Одно моё приложение заблокировали по причине того что я "выдавал" себя за магазин линолиума в какой то немецкой деревушке - логотип приложения был немного искаженной зеркальной копией логотипа этого магазина, так же отличались цвета - у магазина желтый, у приложения оранжевый. Вот такие дела... Так же сильно зависит от места модерации - если повезет попасть в британский офис, то вам досконально объяснят причину блокировки, приведут примеры правильного и не правильного решения вашего вопроса. Вот пример из моей практики: Если не повезет попасть в подмосковье - то вы не получите комментариев, апелляция будет проигнорирована и относится к вам будут как к ничтожеству. Российская специфика - мальчик получивший работу в Великом Гугле, благодаря двоюродному дяде, сам становится Великим. И естественно он обязан быть гавном, так у него в должностной инструкции написано ;-)
    1 балл
  20. На мобильных это делается с помощью TAniCalculations, в ModernLV есть метод getAniCalc if ListView1.getAniCalc <> nil then ListView1.getAniCalc.Animation := false; в момент вызова этого кода скроллинг остановится
    1 балл
  21. Kitty,а вы попробуйте переустановить свое приложение.Удалить и заново поставить.Получите +1 к пушам. Было 3,станет 4.Больше переустановок,больше пушей. Когда работал с Kinvey была такая же история.В блогах на Embarcadero обсуждали даже.Если в кратце и по памяти,то при переустановке приложения,в Kinvey дублируется запись устройства на которое отправляется push.Что бы избежать этого,надо делать доп проверку на уже существующий токен для данного устройства.Повторюсь что это по памяти,но суть понятна.Можете поискать в блогах Sarina Dupont на Embarcadero. Собственно после этого я и перешел на нативные пуши. Потому как написал многоуважаемый ZuBy: Вот,нашел: https://community.embarcadero.com/blogs/entry/remote-push-notifications-on-android-with-rad-studio-xe6-795 Второй коммент. 15 раз установил,15 пушей.
    1 балл
  22. // uses FMX.Platform; var LocaleService: IFMXLocaleService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, IInterface(LocaleService)) then Result := LocaleService.GetCurrentLangID; end;
    1 балл
  23. Благодарю, все руки не доходили выложить исправленную версию
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...