Лидеры
Популярный контент
Показан контент с высокой репутацией 02.06.2016 во всех областях
-
холивар начинается, это ни есть хорошо. хотелось бы узнать ответ разработчиков по существу вопроса… Add и Multiply - дело вкуса, а лично мне по вкусу перегрузить операторы, чем городить функции. сахар сомнительный, ибо тогда на плюсы будет смахивать а так можно далеко зайти. я бы, например, не отказался от тернарного оператора a = (b > c) ? 1 : 2 но это все лирика, топик о перезагрузке операторов, давайте не отклоняться от темы!3 балла
-
Таймер в сервисе
Pax Beach и 2 других отреагировал Brovin Yaroslav за вопрос
Посмотрите на реализацию системных таймеров в Androidapi.Timer.pas. Они подходят для сервисов.3 балла -
Как программно проверить что устройство имеет touchscrren?
Rusland и 2 других отреагировал Brovin Yaroslav за вопрос
uses FMX.Platform; var Service: IFMXDeviceService; begin Result := TPlatformServices.Current.SupportsPlatformService(IFMXDeviceService, Service) and (TDeviceFeature.HasTouchScreen in Service.GetFeatures);3 балла -
Таймер в сервисе
dnekrasov и ещё один отреагировал Brovin Yaroslav за вопрос
function AndroidTimerCreate: Integer; Создает таймер и возвращает его идентификатор procedure AndroidTimerSetInterval(TimerHandle: Integer; Interval: Integer); Задает для созданного таймера по его ID интервал срабатывания. Эта реализация работает с одним обработчиком OnTimer для всех таймеров. Чтобы задать такой общий обработчик используется процедура: procedure AndroidTimerSetHandler(OnTimer: TAndroidTimerNotify); В параметре OnTimer приходит ваш идентификатор таймера. procedure AndroidTimerDestroy(TimerHandle: Integer); Этот метод уничтожает созданный вами таймер по ID Этот юнит - это оболочка над posix-таймерами2 балла -
Перезагрузка операторов для классов
Равиль Зарипов (ZuBy) и ещё один отреагировал krapotkin за вопрос
у записи нет конструктора, который выделяет память, так что ничего и не надо освобождать конструктор записи - чисто номинальный аналог события OnCreate2 балла -
JSON
Равиль Зарипов (ZuBy) и ещё один отреагировал Евгений Корепов за вопрос
Вот пример кода для вашего случая Var Source : String; JSON : TJSONObject; JSONValue : TJSONValue; JSONArray : TJSONArray; I : Integer; begin Source:='{"data":["val1", "val2", "val3"]}'; JSON:=TJSONObject(TJSONObject.ParseJSONValue(Source)); if Not Assigned(JSON) then Exit; if JSON.TryGetValue('data',JSONValue) then if TJSONObject(JSONValue).ClassName.Equals('TJSONArray') then begin JSONArray:=TJSONArray(JSONValue); if Assigned(JSONArray) then for I := 0 to JSONArray.Count-1 do Memo.Lines.Add(JSONArray.Items[I].Value); end; end; Для проверок неудачного парсинга есть такие инструменты как "if Assigned(JSON) then" и "JSON.TryGetValue('data',JSONValue)"2 балла -
Проблемы с отрисовкой
Равиль Зарипов (ZuBy) отреагировал Евгений Корепов за вопрос
Эта фраза здесь звучала много раз, но повторюсь "Никогда, ни в коем случае, ни при каких обстоятельствах, не работайте с объектами основной формы (основного потока) из другого потока", для этого умные люди специально создали потокобезопасные способы - синхронизация, очереди, события и т.д. Даже если вам кажется что ваш код работает, то это случайность, на пятый или сотый запуск все у вас упадет, или упадет сразу на другой версии андроида или другом производителе железа. Такое ощущение что вы не слышите, или не читаете ответы на заданные вами вопросы, и каждое новое сообщение от вас звучит примерно так "А вот если я на эти грабли не наступлю, а с разбега прыгну, что будет?" ;-) Надеюсь я не слишком эмоционально высказался? Не хотел никого обидеть.1 балл -
Да ладно вам. У меня для всех классов почти на автомате уже есть функции Equals и Assign Так что и Add и Multiply добавлю, ничего А сахар лучше вон a+=5; пусть добавят ))1 балл
-
Перезагрузка операторов для классов
Равиль Зарипов (ZuBy) отреагировал estra за вопрос
век живи, век учись1 балл -
Перезагрузка операторов для классов
Равиль Зарипов (ZuBy) отреагировал krapotkin за вопрос
http://stackoverflow.com/questions/22541928/why-can-i-not-use-operator-overloading-for-classes1 балл -
[Android] Почему не работает лог в сервисе?
Pax Beach отреагировал Brovin Yaroslav за вопрос
Версия Log из FMX работать не будет, так как она построена на FMX сервисах (TPlatformServices), которые в андроид сервисах не работают. Поэтому пользуйтесь версией андроида LOGI, LOGW, LOGE.1 балл -
Я не проверял, но попробуйте следующее FMX.Types.VKAutoShowMode := TVKAutoShowMode.Never;1 балл
-
ObjectiveC class CTCallCenter could not be found
Равиль Зарипов (ZuBy) отреагировал Brovin Yaroslav за вопрос
Поскольку ios библиотеки с апи подкгружаются динамически. Эта ошибка может означать, что реально на момент обращения фреймворк "CoreTelephony.framework" не был загружен. Загрузка обычно делается в каждом rtl iosapi юните так: const libAddressBook = '/System/Library/Frameworks/AddressBook.framework/AddressBook'; {$IF defined(IOS) and NOT defined(CPUARM)} initialization AddressBookModule := dlopen(MarshaledAString(libAddressBook), RTLD_LAZY); finalization dlclose(AddressBookModule); {$ENDIF IOS} end. Я действительно не вижу в iOSapi.CoreTelephony.pas кода по загрузке библиотеки. Поэтому вы можете добавить код выше в свой проект для форсирования загрузки, изменив libAddressBook на: const CoreTelephonyFwk: string = '/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony';1 балл -
Что выбрать VCL или FMX?
Равиль Зарипов (ZuBy) отреагировал krapotkin за вопрос
http://www.fmxexpress.com/mix-vcl-and-firemonkey-forms-in-delphi-xe5-firemonkey-on-windows/ и видео1 балл -
[Android] Как скрыть/показать системный Status Bar?
Pax Beach отреагировал Andrey Efimov за вопрос
XE7 хорошо! Вот написал на скорую руку статейку для XE6. эм... или это не то?1 балл -
Не работает! В режиме DesignTime (в IDE) при изменении свойтва формы BorderStyle = TFmxFormBorderStyle.bsNone StatusBar пропадает. Но он остается при запуске приложения на смарте. В "Project / Options / Uses Permissions" установлены свойства: Expand status bar = True Advanced / Status bar = True (пробовал и другие варианты) При запуске приложения Status bar не пропадает. Но вопрос стоял иначе - "скрыть/показать Status Bar в процессе работы"1 балл