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

Pax Beach

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

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

  • Посещение

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

    12

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

  1. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Как изменить версию АПИ для компиляции проекта   
    в SDK Manager'e можно посмотреть
  2. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Как управлять питанием устройства   
    так я тут покапался чуток
    uses FMX.Helpers.Android, AndroidApi.Helpers, AndroidApi.JNI.JavaTypes, AndroidApi.JNIBridge, AndroidApi.JNI.GraphicsContentViewText, Android.os.PowerManager; function HasPermission(const Permission: string): Boolean; begin Result := TAndroidHelper.Context.checkSelfPermission(StringToJString(Permission)) = TJPackageManager.JavaClass.PERMISSION_GRANTED; end; var PowerObj: JObject; PowerManager: JPowerManager; begin if HasPermission('android.permission.WAKE_LOCK') then // доступ есть begin if HasPermission('android.permission.REBOOT') then // доступа НЕТ begin PowerObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.POWER_SERVICE); PowerManager := TJPowerManager.Wrap((PowerObj as ILocalObject).GetObjectID); PowerManager.reboot(nil); end else Log.d('android.permission.REBOOT == DENIED'); end else Log.d('android.permission.WAKE_LOCK == DENIED'); если убираем проверку разрешения REBOOT
    https://developer.android.com/reference/android/Manifest.permission.html#REBOOT
     
    этот способ только для системы, извне его не вызвать.
    Есть еще два способа
    1) через SuperUser (Только этот способ остается)
    2) через Intent (отменяется)
     
  3. Like
    Pax Beach получил реакцию от Rusland в PowerOff - пример приложения с гибким интерфейсом(flexible interface)   
    А в Android работает? ;-) Это очень актуально.
     
  4. Like
    Pax Beach отреагировална Brovin Yaroslav в TBeacon. CASE: Использование маячков для контроля расхода электроэнергии   
    Здорово.
    Приятно было почитать статью! Особенно, сделанное нашими :-) Придумал, набросал прототип, получил наглядный результат  
    Молодцы!
  5. Like
    Pax Beach получил реакцию от Andrey Efimov в Методы шифрования delphi   
    Для каких задач нужно шифрование?
    Если нужно шифровать текст для передачи по сети, то с этим справятся DataSnap и Indy.
    А если файлы шифровать, и чтобы работало на всех платформах, возьмите открытый код стандартных методов шифрования AES, RSA, DES и т.п. Например, здесь, и используйте в своем проекте.
    Конечно, давно пора это дело причесать под XE и Berlin и выложить для сообщества. Только не забываете про различие UNIX и Windows нумерации символов в String.
     
  6. Like
    Pax Beach отреагировална Error в PowerOff - пример приложения с гибким интерфейсом(flexible interface)   
    PowerOff - максимально упрощенное приложение для автоотключения компьютера.
    Приложение и исходный код можно загрузить здесь: https://github.com/errorcalc/PowerOff
    Полезно если вы перед сном любите включать ролики на YouTube/музыку/сериалы/фильмы, но засыпаете и они продолжают играть всю ночь, вызывая на утро головную боль...
    По большому счету утилита была написана и с целью проверить пригодность технологии FireMonkey для разработки - в целом - да, на данный момент, под Windows (и для имитирования UWP интерфейса), это вполне работоспособная технология.
  7. Like
    Pax Beach отреагировална enatechno в Как изменить версию АПИ для компиляции проекта   
    Хочу возразить.
    Был у меня такой случай. Проект, который успешно компилировался под android на Berlin 10.1 (без upd1) с ndk из коробки (r9c), в один "прекрасный" день при создании lib[ИмяПроекта].so выдал ошибку:
    lib[ИмяПроекта].so: mmap: failed to allocate ........... bytes for output file: Not enough space
    Так как со свободным местом было все норм, я стал гуглить подобную ошибку и узнал что она встречается в разных версиях RAD (начиная с XE7). Как решение, предлагалось обновить NDK на более позднюю. Что я и сделал, установив ndk r12b. И это решило мою проблему: с новым ndk проект был успешно откомпилирован и запущен на разных версиях android. 
  8. Like
    Pax Beach получил реакцию от Rusland в Как управлять питанием устройства   
    Просьба выложить для всех пример кода решения для перезагрузки телефона.
    Были грабли с использованием? Какие пермишены потребовались?
     
  9. Like
    Pax Beach отреагировална RoschinSpb в Особенности TGrid в Delphi 10.1 Berlin (XE10)   
    1. У колонки можно менять свойство Padding.
    2. Grid теперь может быть и стилевым и нативным. В нативном этого события быть не может. Чтобы работать со стилями см. стилевое представление грида TStyledGrid в модуле FMX.Grid.Style.pas. 
    3. По моему мнению проколом было наличие этих свойств в публичной секции. Grid это составной компонент, он неким образом самостоятельно реагирует на события мыши, если Вы будете делать что-то своё, то ваши действия могут войти в противоречие со стандартным поведением этого компонента и непредсказуемым последствиям. Поскольку грид переписан чуть менее чем полностью я посчитал, что это хороший повод убрать потенциальную уязвимость, здесь указаны все упраздненные события. В этом обсуждении я пытался объяснить что можно сделать.
    4. По этому поводу трудно что-то сказать навскидку, пишите в QC, не забудьте приложить простой воспроизводимый пример.
    5. Да, дело в совместимости. Фон может содержать картинку, поэтому по умолчанию все ячейки прозрачные. Но, если добавить AlternatingRowBackground в Options, то событие будет вызываться. Также оно вызывается при появлении редактора. Вообще сильно рекомендую посмотреть демку GridDemo, там можно в run-time менять настройки и смотреть в логе все приходящие события.

    Еще здесь я что-то писал.
  10. Like
    Pax Beach отреагировална Brovin Yaroslav в TNotificationCenter   
    нет. iOS не предоставляет такой функциональности. Более того, приложение может быть и не запущено в принципе. И в этом случае некому об этом сообщать.
  11. Like
    Pax Beach получил реакцию от AngryOwl в Контролировать приход SMS   
    У в Берлине АПД1 в исходниках, Androidapi.JNI.Provider.pas
    есть такой метод.
    UPD:
    А... обратил внимание, что метод появился с API-19.
  12. Like
    Pax Beach получил реакцию от zairkz в Контролировать приход SMS   
    У в Берлине АПД1 в исходниках, Androidapi.JNI.Provider.pas
    есть такой метод.
    UPD:
    А... обратил внимание, что метод появился с API-19.
  13. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Контролировать приход SMS   
    const SMS_RECEIVED = 'android.provider.Telephony.SMS_RECEIVED'; procedure SMSReceiver(aIntent: JIntent); //uses // Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony, Androidapi.JNI.Provider, Androidapi.JNIBridge, // Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers; var aSmss: TJavaObjectArray<JSmsMessage>; aSms: JSmsMessage; aFrom: string; aBody: string; I: Integer; begin if aIntent = nil then exit; if (aIntent.getAction <> nil) and (aIntent.getAction.compareToIgnoreCase(StringToJString(SMS_RECEIVED)) = 0) then begin aSmss := TJavaObjectArray<JSmsMessage>.Create; aSmss := TJSms_Intents.JavaClass.getMessagesFromIntent(aIntent); aFrom := JStringToString(aSmss[0].getDisplayOriginatingAddress); aBody := ''; for I := 0 to aSmss.Length - 1 do begin aSms := aSmss[I]; aBody := aBody + JStringToString(aSms.getDisplayMessageBody); end; end; end; не проверял, но по коду так, только как нить вернуть нужно aFrom, aBody
    сделать как функцию и тд..
  14. Like
    Pax Beach получил реакцию от Rusland в Контролировать приход SMS   
    У в Берлине АПД1 в исходниках, Androidapi.JNI.Provider.pas
    есть такой метод.
    UPD:
    А... обратил внимание, что метод появился с API-19.
  15. Like
    Pax Beach получил реакцию от Равиль Зарипов (ZuBy) в Контролировать приход SMS   
    Ну была проблема при отправке определенных ACTION в broadcast.
    Видимо, твоего примера это не касается.
     
    На чем ты споткнулся при переводе JAVA примера в Delphi?
    Выглядит, вроде, все понятно. Получил сообщение broadcast — значит имеешь контекст и намерение (Intent). Из него получаешь методом getMessagesFromIntent класса TJSms_Intents нужное тебе сообщение.
  16. Like
    Pax Beach получил реакцию от Равиль Зарипов (ZuBy) в Контролировать приход SMS   
    У в Берлине АПД1 в исходниках, Androidapi.JNI.Provider.pas
    есть такой метод.
    UPD:
    А... обратил внимание, что метод появился с API-19.
  17. Like
    Pax Beach получил реакцию от Rusland в Наклеить одно изображение на другое   
    Как ты ищешь? )
    Вот решение люди предлагают.
     
  18. Like
    Pax Beach получил реакцию от Равиль Зарипов (ZuBy) в Белый splash   
    Сделать 9.PNG
  19. Like
    Pax Beach отреагировална master webs в Белый splash   
    http://g.zeos.in/?q=9.png delphi
  20. Like
    Pax Beach получил реакцию от Kitty в Белый splash   
    Сделать 9.PNG
  21. Like
    Pax Beach получил реакцию от Равиль Зарипов (ZuBy) в Проверка валидности символов   
    Так ставьте галочку решения вопроса, он же Ваш.
     
  22. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Проверка валидности символов   
    function TForm11.isEditCorrect(Sender: TEdit): Boolean; var   text: String;   i: Integer;   aCharArr: TCharArray; begin   text := TEdit(Sender).text;   aCharArr := text.ToCharArray;   Result := True;   for i := Low(aCharArr) to High(aCharArr) do   begin     if not(aCharArr[i] in charters) then       Result := False;   end;   if text.CountChar('-') > 1 then     Result := False; end; вот так правильно
  23. Like
    Pax Beach отреагировална Brovin Yaroslav в [iOS] [iOS10] Приложение падает при использовании камеры в iOS 10 64 bit   
    Так, проблему изучил. Решение очень простое. Начиная с iOS10 приложение, если хочет использовать камеру, библиотеку и другие сторонние сервисы, должно добавлять в манифест специальные ключи. Для камеры и библиотеки эти ключи изображены ниже:

    Добавьте эти ключи и все будет ок.
    Подробнее про ключи можно прочитать тут: Cocoa Keys
  24. Like
    Pax Beach отреагировална Brovin Yaroslav в Как сделать автоматическое изменение высоты TListBoxItem под содержимое текста?   
    Ответ косвенно был дан в теме Автоматический переход на вторую строку TLabel
     
    Поэтому на базе этого ответа его легко модифицировать для этой задачи. Идея простая в момент загрузки стиля и изменения размеров TListBoxItem, вычислять высоту занимаемого текста и на основании этих данных переопределять высоту итема.
     
    Практика
    1. Для определения размеров текст используем TTextLayout. Лучше создавать объект этого класса один раз. Поскольку в нашем случае он будет использоваться часто.
    procedure TForm1.FormCreate(Sender: TObject); begin // FTextLyout: TTextLayout - поле формы FTextLyout := TTextLayoutManager.DefaultTextLayout.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin FreeAndNil(FTextLyout); end;  2. Пишем свой обработчик, который мы будем вызывать по достижению двух событий:
    Изменение размера TListBoxItem. В этом случае нужно перевычислить высоту итема. При загрузки нового стиля итема, нам нужно заново вычислить высоту итема. Поскольку стиль может содержать новые настройки отображения текста (шрифт, размер и тд.) Я назвал это событие CalculateItemHeght:
    procedure TForm1.CalculateItemHeight(Sender: TObject); var ListItem: TListBoxItem; begin if Sender is TListBoxItem then begin ListItem := Sender as TListBoxItem; FTextLyout.BeginUpdate; try // Инициализируем текстовый слой для корректного вычисления // размеров отображаемого текста FTextLyout.Text := ListItem.Text; FTextLyout.MaxSize := TPointF.Create(ListItem.Width, 1000); FTextLyout.WordWrap := ListItem.WordWrap; FTextLyout.Font := ListItem.Font; FTextLyout.HorizontalAlign := ListItem.TextAlign; FTextLyout.VerticalAlign := ListItem.VertTextAlign; finally FTextLyout.EndUpdate; end; // Получаем высоту текста при текущих настройках итема ListItem.Height := FTextLyout.Height; end; end; Обратите внимание, что этот код работает для горизонтальной ориентации TListBoxItem и обычного TListBoxItem итема без картинок. Поэтому я для упрощения понимания кода, принимаю за ширину текста ширину самого итема. Но как вы понимаете, текст в итеме имеет еще свои отступы и может располагаться, например, справа от изображения. В этом случае этот в этот код нужно будет добавить определение текущих размеров стилевого объекта текста, отвечающего за вывод текста в TListBoxItem.
     
    Но в вашем примере этого не нужно.
     
    3. Вешаем наш обработчик на два события каждого итема TListBoxItem.OnResize и TListBoxItem.OnApplyStyleLookup.
     
    Результат

     
  25. Like
    Pax Beach получил реакцию от Brovin Yaroslav в Simple BLE Beacon telemetry — работа с TBeacon   
    Возникла задача обработки телеметрии BLE маячков для построения пространственной карты.
    За пару дней собрал приложение для «ловли» маячков.
    Производится сбор всей телеметрии с маячков, которую обрабатывает компонент TBeacon. Данные можно передать в виде текста в другое приложение или отправить вложением по почте.
     
    Сейчас приложение Можно скачать в Google Play.
    Для платформ Windows качать здесь (SimpleBeaconTelemetry.exe.zip).
     
    Просьба протестировать у себя на устройствах.
    Код элементарный, если кому-то нужен, могу выложить сюда (SimpleBeaconTelemetry.zip).
     
×
×
  • Создать...