Лидеры
Популярный контент
Показан контент с высокой репутацией 13.03.2017 во всех областях
-
Создал 2 тестовых проекта (один VCL, другой FMX). В обоих только форма с кнопкой. Компилировал из 10 Seattle и 10 Berlin (конфигурация Debug). Запускал на win 7 и 10. Задержки в 1-2 сек не наблюдал. На глаз оба проекта запускаются с одинаковой скоростью. Конфигурация компьютера аналогична Вашей. https://www.youtube.com/watch?v=5q8ZKiYEWko4 балла
-
Это касается 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.zip3 балла
-
Думаю, стоит перед загрузкой битмапа из Stream добавить Stream.Position:=02 балла
-
[TScrollBox] Можно ли изменить Increment у ScrollBar?
Евгений Корепов и ещё один отреагировал Brovin Yaroslav за вопрос
Не уверен, что это возможно, так как сам ScrollBox настраивает скролл боксы по своему усмотрению. Но вы можете получить к ним доступ и попробовать изменить их программным путем: type TOpenScrollBox = class(TCustomScrollBox); procedure TForm2.Button1Click(Sender: TObject); begin TOpenScrollBox(ScrollBox1).VScrollBar.ViewportSize; TOpenScrollBox(ScrollBox1).HScrollBar.ViewportSize; end;2 балла -
vkHardwareBack, vkHome, vkMenu (Android)
Major и ещё один отреагировал RoschinSpb за вопрос
Средствами Fire Monkey нельзя. И это относится не только к HardwareBack, Home, Menu но и вообще к любым клавишам на любой клавиатуре. Возможно можно как-то воспользоваться андроидными системными функциями, но например в Windows нету системных средств для определения наличия физических клавиш. Так что обработка горячих клавиш всегда должна дублироваться какими-то другими интерфейсными элементами, если конечно Вы не хотите намеренно скрыть что-то от обычных пользователей.2 балла -
файл не находится
Равиль Зарипов (ZuBy) и ещё один отреагировал Alex7wrt за вопрос
В iOS нужно писать StartUp\Documents. В Android assets\internal. Посмотрите, что у вас представляет собой filename. Судя по вашему коду должно быть имя файла плюс расширение.2 балла -
Как заполнить эллипс?
Rusland и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
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 балла -
Привет. Hotfix PAServer XCode 8.2 306802 балла
-
Ссылка: http://yaroslavbrovin.ru/object_life_cycle_in_delphi_part_2_android_ios-ru/ Автор: Ярослав Бровин Продолжаем тему жизненного цикла объектов в мире Delphi, но в этой части рассматриваем эту тему в рамках мобильных платформ Android и iOS. Delphi вводит новый подход к управлению памятью в мобильных платформах. Появляется автоматический подсчет ссылок, который с одной стороны облегчает код разработчика и должен помочь ему, а с другой стороны раскладывает равномерно грабли на пути освоения новых платформ в мире Delphi.1 балл
-
SharedPreference удаляются при деинсталяции программы.1 балл
-
Загрузка произвольной картинки в TImageList динамически
Kitty отреагировал Brovin Yaroslav за вопрос
Мне кажется, у вас не указан scale для загружаемой картинки в MultiResBitmap. BI.Scale := 1;1 балл -
vkHardwareBack, vkHome, vkMenu (Android)
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
как понять список доступных кнопок? на счёт кнопки Home, все верно, так и должно быть1 балл -
Кодировки языков в APPLE
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
Все оно верно даст Вы проверяли? У меня все отлично, стоит регион Казахстан, язык системы русский Результат кода - ru Не поленился и запустил симулятор, языки естественно менял на соответствующие1 балл -
В 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 apps1 балл
-
"Пустая и чистая" форма - вовсе не "пустая". В FMX приложении есть ресурсы. Откройте приложение в редакторе ресурсов (например Restorator 2007 или любой другой) и вы увидите содержимое бинарника. Так-что "пустая/чистая форма" - это в VCL, в FMX иначе.1 балл
-
Какой стиль используется в XE3 и в 6-10 ? Если свой не подгружаете, то, думаю, - по умолчанию. Какой объем бинарника получается при компиляции Release в XE3, и какой в 10? Думаю дело может быть в ресурсах, используемых приложением.1 балл
-
Поправка: это самый верный способ для FMX, вне зависимости от платформы. Емнип, у TCircle нет наследников. Ну и - для использования Release не обязательно приводить тип к истинному классу объекта. Поэтому сей код можно записать так (не проверял в IDE, но если скомпилируется - значит всё нормально): for k:=Layout1.ChildrenCount-1 downto 0 do if Layout1.Children[k] is TCircle then Layout1.Children[k].Release;1 балл
-
Рисование маршрута на MapView, Delphi, Android
Rusland отреагировал Равиль Зарипов (ZuBy) за вопрос
Вас не смущает что это локальная переменная?1 балл -
Одинаковые логотипы и картинки
Rusland отреагировал Евгений Корепов за вопрос
Получите от медицинского центра разрешение на использование их логотипа. Можно на русском языке. Текст произвольный - поручаем Kitty изготовление приложения и разрешаем использование логотипов, торговых марок, фирменных наименований и т.д. в приложениях. Подробнее здесь https://play.google.com/intl/ru/about/ip-deception-spam/impersonation-ip/ И отправьте скан (pdf к примеру) этого письма в гугл, подробности тут https://support.google.com/googleplay/android-developer/answer/6320428 Последнее время все сложнее публиковать приложения, правила уже балансируют на грани маразма. Одно моё приложение заблокировали по причине того что я "выдавал" себя за магазин линолиума в какой то немецкой деревушке - логотип приложения был немного искаженной зеркальной копией логотипа этого магазина, так же отличались цвета - у магазина желтый, у приложения оранжевый. Вот такие дела... Так же сильно зависит от места модерации - если повезет попасть в британский офис, то вам досконально объяснят причину блокировки, приведут примеры правильного и не правильного решения вашего вопроса. Вот пример из моей практики: Если не повезет попасть в подмосковье - то вы не получите комментариев, апелляция будет проигнорирована и относится к вам будут как к ничтожеству. Российская специфика - мальчик получивший работу в Великом Гугле, благодаря двоюродному дяде, сам становится Великим. И естественно он обязан быть гавном, так у него в должностной инструкции написано ;-)1 балл -
Принудительная остановка прокрутки ListView
Rusland отреагировал Равиль Зарипов (ZuBy) за вопрос
На мобильных это делается с помощью TAniCalculations, в ModernLV есть метод getAniCalc if ListView1.getAniCalc <> nil then ListView1.getAniCalc.Animation := false; в момент вызова этого кода скроллинг остановится1 балл -
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 балл
-
Кодировки языков в APPLE
Евгений Корепов отреагировал Равиль Зарипов (ZuBy) за вопрос
// uses FMX.Platform; var LocaleService: IFMXLocaleService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, IInterface(LocaleService)) then Result := LocaleService.GetCurrentLangID; end;1 балл -
TMapsEngine
Alisson R Oliveira отреагировал Равиль Зарипов (ZuBy) за тема
Благодарю, все руки не доходили выложить исправленную версию1 балл