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

MrAnderson

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

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

  • Посещение

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

  1. Like
    MrAnderson отреагировална Alex7wrt в Что невозможно сделать на Delphi для Android?   
    Первый раз слышу о проблемах с TThread.Synchronize.
     
  2. Like
    MrAnderson отреагировална Martifan в Получить голос из микрофона потоками   
    Доброго времени сутки
    недавно для себя открыл что можно из микрофона получить данные потоками:
    Uses    ..., Androidapi.JNI.Media;   procedure TForm1.Button1Click(Sender: TObject); var bufferSize: integer;     buffer: TJavaArray<Byte>;     M: TMemoryStream;   begin   audioRecord := TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.MIC,                                               44100,                                               TJAudioFormat.JavaClass.CHANNEL_IN_MONO,                                               TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,                                               44100 * 2); (audioRecord as JAudioRecord).startRecording;   buffer := TJavaArray<Byte>.Create(8820); (audioRecord as JAudioRecord).read(buffer, 0, 8820);   (audioRecord as JAudioRecord).stop;   audioRecord.release;   buffer заполняется данными я проверил все работает (можно код прописать чтобы этот buffer проигрывал)
    audioRecord := TJAudioRecord.JavaClass.init(TJMediaRecorder_AudioSource.JavaClass.MIC,                                               44100,                                               TJAudioFormat.JavaClass.CHANNEL_IN_MONO,                                               TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,                                               44100 * 2); <--- как мне кажется здесь видно что это формат Wave 
     
     
    я пытаюсь передать это все серверу:
    IdUDPClient1.SendBuffer(IdUDPClient1.Host, IdUDPClient1.Port, RawToBytes(buffer, buffer.Length)); сервер запущен на Windows но не получается я слышу только пикание
     
    Вопрос:
    как мне передать этот поток серверу (среды Windows) и как его проигрывать на сервере, может у кого есть опыт работы с этом сфере или какой нибудь документация имеется или какой нибудь предложение есть как все это сделать все совете и предложении очень важен 
     
    Заранее спасибо согласитесь интересно использовать микрофон так и не дожидая пока он создаст файл
    всем удачи
  3. Like
    MrAnderson отреагировална Brovin Yaroslav в Средства логирования в FireMonkey   
    RAD Studio XE5 предоставляет несколько способов логирования под платформы Андроид и iOS. Давайте их рассмотрим:
    Встроенный в FIreMonkey механизм логирования (кроссплатформенный). Использование системных функция каждой платформы для логирования Использование файлов для вывода логов. Использование сети для передачи сообщений лога 1. Встроенный механизм логирования
    FireMonkey содержит специальный класс FMX.Types.Log для осуществления логирования на всех платформах.
    Этот класс использует на каждой платформе системные средства вывода лога.
    Log = class abstract public class procedure d(const Msg: String); overload; class procedure d(const Fmt: String; const Args: array of const); overload; class procedure d(const Tag: String; const Instance : TObject; const Msg : String); overload; class procedure d(const Tag: String; const Instance : TObject; const Method : String; const Msg : String); overload; class procedure TimeStamp(const Msg: String); overload; class function ObjToString(const Instance : TObject) : String; class function ArrayToString(const AArray : TEnumerable<TFmxObject>) : String; overload; class function ArrayToString(const AArray : TEnumerable<TFmxObject>; MakeStr : ToStringFunc) : String; overload; class procedure DumpFmxObject(const O: TFmxObject; Nest: Integer = 0); end; Он предоставляет довольно много методов по вывода лога. 
    Чтобы его использовать достаточно вызвать любой нужный классовый метод. Например в моем приложении по нажатию на кнопку я буду выводить сообщение: "Log message from FireMonkey application"
    procedure TFormPhone.Button1Click(Sender: TObject); begin Log.d('Log message from FireMonkey application'); end; Далее нужно понять, куда будет выведено это сообщение.
     
    1.1. Андроид
    Под андроид это сообщение попадает в системный журнал. Прочитать его можно в утилите Андроида LogCat - это специальная утилита для просмотра системного лога. Ее можно запустить двумя способами:
    C GUI оболочкой Из командной оболочки (консольный вариант). Первый способ (с GUI). В Eclipse с Android SDK открыть Window->ShowView->LogCat. Откроется окно с GUI интерфейсом, в котором вы сможете увидеть все сообщения, которые отправляют все приложения на телефоне. Стоит отметить, что это вариант LogCat в эклипсе содержит ряд полезных функций по фильтрации лога и его управлению. Поэтому я предпочитаю этот способ, нежели использовать консольный вариант этой же утилиты. Сразу же перед использования советую полностью очистить текущий журнал логов телефона, так как он вначале будет содержать огромное количество сообщений. Для очистки нажмите кнопку очистки лога в окне (кнопка с листком и красным крестиком).

     
    Второй способ (консольный режим). Второй вариант запуска утилиты LogCat заключается в вызове утилиты из командной строки. Утилита просмотра журналов логов входит в общую утилиту ADB.exe. Чтобы запустить лог изз командой строки воспользуйтесь следующей командой:
    .\sdk\platform-tools\adb.exe logcat Утилита лежит в папке platform-tools Android SDK. В вашем случае вы должны указать свой путь к этому файлу. Ключ logcat запускает просмотр журнала логирования.
    Так же как и в первом варианте я советую предварительно очистить лог вызвав logcat с ключом -c:
    .\sdk\platform-tools\adb.exe logcat -с Описание всех ключей утилиты logcat: logcat
    После того, как мы открыли Logcat любым из предложенных способов, запускаем нашу программу и смотрим сообщение в логе:

     
    1.2 Йос
    В йос лог попадает в два журнала в зависимости от того, где вы запускаете свою программу (Симулятор или устройство).
     
    iOS Симулятор. Открываем журнал лога в меню симулятора Отладка->Открыть системный журнал...
     
     
    iOS устройство. Открываем XCode Органайзер и выбираем вкладку Console у вашего устройства.

     
    2. Использование системных функций логирования
    Для тех, кто по каким-то причинам не хочет использовать FireMonkey для этих целей может использовать на каждой платформе системные функции логирования.
     
    2.1 Андроид
    Для андроида в Delphi предусмотрены системные функции из Androidapi.Log:
    { Helper functions } function LOGI(Text: MarshaledAString): Integer; function LOGW(Text: MarshaledAString): Integer; function LOGE(Text: MarshaledAString): Integer; function LOGF(Text: MarshaledAString): Integer;  Каждая из которых выводит сообщение с указанным типом (I - информационное сообщение, W - предупреждение, E - ошибка, F - фатальная ошибка)
     
    2.2 iOS
    В IOS вы можете использовать системную функцию iOSapi.Foundation.NSLog.
    procedure NSLog(format: PNSString); cdecl; varargs; external libFoundation name _PU + 'NSLog'; 3. Логирование в файл
    Является самым стандартным средством. Для его использования вы можете использовать стандартные способы работы с текстовыми файлами, которые полностью работают на всех платформах.
     
    4. Логирование по сети
    Этот способ так же имеет место быть и заключается в создании простого TCP клиента на стороне вашего приложения и FTP сервера на Windows. С приложения вы просто шлете на указанный адрес сервера сообщения, а на стороне сервера просто отображаете. Для этих целей можно использовать стандартные Indy компоненты. 
  4. Like
    MrAnderson отреагировална kami в argument out of range Listview(Баг ?)   
    точно не правильно.
    1. Создавать TNetHTTPClient нужно в execute потока, а не использовать лежащий на форме.
    2. Работать с визуальными объектами нельзя из execute, об этом 100500 раз предупреждали.
    Посему, правильно с технической точки зрения (упустим пока архитектуру) будет:
    1. в execute создать сетевой компонент и выполнить запрос.
    2. Распарсить запрос
    3. Передать результаты в основной поток и уже в нем работать с ListView.
    Полезно для правильного написания вынести код потока в отдельный модуль. Который НИЧЕГО не должен знать о модуле формы. Поток должен иметь событие, через которое он передает результаты своей работы куда надо. Само собой - вызывать это событие нужно в основном потоке, используя средства синхронизации. Форма при создании потока назначает ему обработчик события и выполняет в нем необходимые действия.
  5. Like
    MrAnderson отреагировална Равиль Зарипов (ZuBy) в Работа с ListView   
    procedure TForm3.Button1Click(Sender: TObject); begin with ListView1.Items.Add do begin Text := '...'; Data['STATUS'] := 'Signal'; end; with ListView1.Items.Add do begin Text := '...'; Data['STATUS'] := 'Normal'; end; ListView1.Resize; end; procedure TForm3.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); var TextObject: TListItemText; begin TextObject := AItem.Objects.FindDrawable('STATUS') As TListItemText; if TextObject = nil then begin TextObject := TListItemText.Create(AItem); TextObject.Name := 'STATUS'; end; if TextObject.Text = 'Signal' Then TextObject.TextColor := TAlphaColorRec.Red else TextObject.TextColor := TAlphaColorRec.Black; end; остальное сами настроете
  6. Like
    MrAnderson отреагировална krapotkin в Насколько хорош FMX для iOS?   
    у человека приложение сертифицированное для авиакомпаний
    достаточно серьезное? деловое, промышленного назначения. именно в стиле делфи.
    а вот про "несерьезные" вопрос есть...
  7. Like
    MrAnderson отреагировална Andrey Yakovlev в Запуск приложения в iOS Simulator   
    Здравствуйте. Такая проблема:
    В наличии есть Windows 10 с RAD Studio 10.2.3 Tokio и RAD Studio 10.3 Rio (на выбор), MAC с установленными xCode 9.2, 9.4, 10.0 и 10.1, PAServer 19/20
    При попытке запустить тестовое приложение из Delphi в iOS Simulator 11.2 сам симулятор на MAC как-будто бы запускается, Delphi через некоторое время рапортует о том, что "все запущено - сходи на свой MAC и посмотри на результат", но по факту ничего не происходит. Приложение не появляется в симуляторе. Более того, симулятор после своего запуска не показывает окно с телефоном выбранной модели. Пробовал уже кажется все мыслимые сочетания Delphi, PAServer, CommandLineTools и т.п. Ничего не помогает.
    Кто-нибудь может помочь разобраться? Какая дополнительная информация нужна для анализа ситуации? Готов предоставить.
    Спасибо.
  8. Like
    MrAnderson отреагировална rustam_d в Серия статей, как настроить Android, OS X, iOS Simulator, iOS с RAD Studio (Delphi, C++ Builder)   
    Давно хотел обсудить качественно про установку...
    Все что вы выложили(без обид) годиться судентам..да и то у них нифига не получиться ).
     
    Опишу что действительно надо пиплам:
    Ведро.
    1. Установка делфи БЕЗ галочек дроида (профи все так делают). СДК и НДК надо качать отдельно по уму...
    2. Описать каждое поле в настройках начиная от zipalign и ВСЕ и ИМЕННО ВСЕ строчки что они значат!!! Такого нигде нет...и многие
    как котята слепые разрабатывают на авось.
     
    Ну ведро куда нишло...а вот ИОС
    ИОС.
    1. Как ставить через вируалку (не фиг людям впаривать маки). У меня на виртуалке...
    2. Как импортировать сертификаты через сайт, т.е. сначала там сгенерить...
    и т.п.
     
    вот это будет действ полезно.
  9. Like
    MrAnderson отреагировална alexbirukov в [Статья] PHP сервер для рассылки Push на Android и iOS   
    Ссылка на статью. Автор: Александр Бирюков В статья я максимально подробно попытался описать работу с PHP скриптом для рассылки Push сообщений из любой программы вне зависимости от платформы. Затрагивается вопроса от экспорта скриптов до кода программы: отправка и получение Push, регистрация устройств.
     
    Надеюсь кому-нибудь пригодится. Буду рад комментариям, обоснованной критике и доработкам.
     
  10. Like
    MrAnderson отреагировална mazayhin в Перестало работать приложение. Splash screen и дальше падает.   
    Потому что API-Level 26 он будет стоять автоматически. Как впрочем и практически все остальные, запрошенные в манифесте. Так же, не плохо было бы добавить в манифест
    <uses-feature android:name="android.hardware.camera" /> Начиная с 26 необходимо разрешения, помимо указания в манифесте, должны явно запрашиваться у пользователя.
    Почитайте https://developer.android.com/guide/topics/permissions/overview
    Ну а для Delphi подключайте KastiFree https://github.com/DelphiWorlds/KastriFree
    Там есть пример использования https://github.com/DelphiWorlds/KastriFree/tree/master/Demos/AndroidDangerousPermissions
    и в добавок https://github.com/DelphiWorlds/KastriFree/tree/master/Demos/AndroidAPI26 тут как раз работа с камерой
  11. Like
    MrAnderson отреагировална Alex7wrt в Вопрос "События OnClick в MyClass"   
    В первом примере, когда создаете наследника какого-либо класса (в вашем случае TObject), не забывайте наследовать параметры от родительского класса и переопределять базовые методы
    Constructor Create(NewId:integer;NewNGP:string); overload;  
    constructor MyType.Create(NewId:integer;NewNGP:string); Var RectForButt:TRectangle; begin inherited Create; ......  
  12. Like
    MrAnderson отреагировална rareMax в [TScrollBox] Возврат toolbar'a при лёгкой прокрутке вверх   
    Source code e APK Link: Codice sorgente Delphi XE7
    Link: Demo APK (da installare sul vostro dispositivo Android)
  13. Haha
    MrAnderson отреагировална rustam_d в Ошибки и косяки Delphi XE10 Seattle и xCode 7   
    можно ли по подробнее? загрузки чего? версии самой программы ipa или нажатия Submit ?
     
    p.s.: надо было назвать тему "что можно сделать за время попыток публикации проекта в AppStore":
    - построить 2 этажный дом и заселиться
    - написать андроид проект с нуля - опубликовать и получить прибыль
    - съездить в таиланд, в турцию и в испанию, но уже забыть о чем был проект
    - уволиться с работы, начать новый проект на другой работе и снова уволиться
    - потерять не менее 3-х заказчиков...
    - получить инфаркт от унижений...
    - и т.п.
  14. Like
    MrAnderson получил реакцию от Anatoliy в TScrollBox или TPresentedScrollBox поворот на 180   
    К сожалению да. После экспериментов выяснил что внутренний контент вылезает за рамки.
    Попробовал Studio\19.0\Samples\Object Pascal\Mobile Snippets\ HorizontalScroll перевернуть на 180 увидел тоже самое
×
×
  • Создать...