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

Лидеры

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

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

    Модераторы


    • Баллы

      6

    • Постов

      2 517


  2. Евгений Корепов

    Евгений Корепов

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


    • Баллы

      4

    • Постов

      738


  3. Pax Beach

    Pax Beach

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


    • Баллы

      3

    • Постов

      414


  4. alxsev

    alxsev

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


    • Баллы

      2

    • Постов

      32


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

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

  1. Все правильно получаете, кодировка тут не при чем. Согласно спецификации "DNS Packet Structure", вы получаете не строку, а пакет который нужно разобрать. К примеру если запрос будет "nslookup www.google.ru 127.0.0.1", то там где вы получаете имя хоста будет строка "''#3'www'#6'google'#2'ru'#0#0#1#0#1". Парсинг простейший: #3 - означает что далее идут 3 символа хоста 'www' - вот ожидаемые 3 символа #6 - далее идут еще 6 символов хоста 'google' - ага, вот они #2 - ну и еще 2 символа 'ru' - ура, они здесь #0 - конец имени хоста, складываем в кучу, перемежая точками и получаем www.google.ru #0 - дальше у нас служебная информация... #1 #0 #1 Вот как то так. P.S. А зачем вам на таком низком уровне работать? Может использовать IdDNSServer : TIdDNSServer ? P.P.S. Правильно Memo1.Lines.Add(BytesToString(AData,12)); //(12, а не 13)
    3 балла
  2. Я реализовал пример работы с микрофоном и таймером в Android сервисе, как указано в теме вопроса. Каждый раз, когда вы отправляете в сервис StartCommand или сервис перезапускается, включается запись с микрофона, и сохраняется в каталог с музыков в файл "myrecord.3gp". Надеюсь, мой пример поможет вам создать новые полезные решения. В этом случае пожалуйста делитесь ими с участниками нашего сообщества. Для отладки своих программ на Android используйте запись в LOGI и чтение при помощи monitor.bat (PlatformSDKs\android-sdk-windows\tools). uses ... AndroidApi.JNI.Media, // JMediaRecorder AndroidApi.Timer, // Timer ...; Const TimerInterval = 1000; TimerCounterSecLimit = 10; type TDM = class(TAndroidService) ... private FTimerHandle: Integer; FRecording: Boolean; procedure StartRecord; procedure StopRecord; procedure StartTimer; procedure StopTimer; public FAudioRec: JMediaRecorder; end; procedure Log(const Fmt: string; const Params: array of const); overload; var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end; procedure Log(const Source: string); overload; var M: TMarshaller; begin LOGI(M.AsUtf8(Source).ToPointer); end; procedure TDM.AndroidServiceCreate(Sender: TObject); begin FTimerHandle := 0; FTimerCounter := 0; FRecording := false; end; procedure TDM.AndroidServiceDestroy(Sender: TObject); begin StopTimer; StopRecord; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin StopTimer; StopRecord; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service Log('- service stoped', []); end else begin if not FRecording then begin Log('... sound record to be started', []); StartRecord; StartTimer; end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops Log('+ Service started', []); end; end; procedure TDM.StartRecord; begin StopRecord; FAudioRec := TJMediaRecorder.Create; FAudioRec.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC); FAudioRec.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP); FAudioRec.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB); FAudioRec.setOutputFile(StringToJString(TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp'))); try FAudioRec.Prepare(); FAudioRec.start; FRecording := True; Log('+ Start record to %s', [TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp')]); except on E: Exception do Log('- Error in mic recording: %s', [E.Message]); end; end; procedure TDM.StopRecord; begin if Assigned(FAudioRec) then begin if FRecording then begin FRecording := false; try FAudioRec.stop(); FAudioRec.release(); Log('- Mic recording is stoped'); except on E: Exception do Log('- Error in mic stop recording: %s', [E.Message]); end; end; end else begin FRecording := false; end; end; procedure TDM.WaitComplete(TimerId: Integer); begin if FTimerCounter < TimerCounterSecLimit then begin Log('+++ Timer is triggered %d time.', [FTimerCounter]); inc(FTimerCounter); end else StopTimer; end; procedure TDM.StartTimer; begin FTimerCounter := 0; if FTimerHandle = 0 then begin FTimerHandle := AndroidTimerCreate; AndroidTimerSetInterval(FTimerHandle, TimerInterval); end; AndroidTimerSetHandler(WaitComplete); Log('+ Timer started', []); end; procedure TDM.StopTimer; begin if FTimerHandle > 0 then begin Log('... MIC recording to be stopped'); StopRecord; AndroidTimerSetHandler(nil); Log('- Timer stoped', []); end; end; end.
    2 балла
  3. Название: Гороскоп на каждый день Жанр: Гороскопы, мистика Платформа: Android Тип устройства: смартфон, планшет Разрешение экрана: любое Описание: Простой, удобный и красочный гороскоп. В приложении вы найдете гороскопы для всех знаков зодиака (Овен, Телец, Близнецы, Рак, Лев, Дева, Весы, Скорпион, Стрелец, Козерог, Водолей, Рыбы) - Ежедневные обновления - Простой и понятный интерфейс - На русском языке - Предоставляется бесплатно Доступные гороскопы: - Гороскоп на сегодня - Гороскоп на вчера - Гороскоп на завтра - Гороскоп на неделю - Гороскоп на месяц - Гороскоп на год - Гороскоп онлайн Ссылка на Google Play: Ссылка Изображения:
    2 балла
  4. кидаешь TImage без Align'инов и на ресайзе выставляешь позицию кнопке
    2 балла
  5. Возможно. Дополнительный файл .so отличается от Вашего тем, что пробел заменен на _. Хотел проверить, но Delphi не дает мне создать проект с пробелом в имени.
    2 балла
  6. Мой опыт создания приложения для андроида в С++ Builder Берлин. Приложение предназначено для контроля прихода-ухода персонала на работу. Знакомый руководитель стоматологического центра попросил. Использовался этот маячок beacon: Bytereal-iBeacon Обязанности сотрудника при приходе и уходе с работы: - сотрудник запускаем мобильное приложение - далее подносит телефон к маячку Мобильное приложение фиксирует отметку в базу данных SQL lite. Уведомляет пользователя в интерфейсе программы и дополнительным push уведомлением. Отметки можно посмотреть на самом телефоне или выслать руководителю по почте. Телефон превращается во что-то вроде магнитной карты учета прихода-ухода с хранением данных. Интерфейс на прилагаемом рисунке. Что положительного: - Задача решена быстро на с++ и не надо тратить время на изучение чего-то другого. Для корпоративного решения то, что нужно. - Студия упала во время разработки только два раза. В С++ Builder XE6-7 при наличии достаточного кол-ва кода в проекте для андроида студия падала каждые две минуты. - Учитывая стоимость маячков это перспективная линия для всякого рода приложений связанных с биконами. Положительный опыт. Что отрицательного: - При попытке активировать TFDQuery в инспекторе объектов, возникает ошибка LiveBindings и уже нельзя сохранить проект. Только закрытие без сохранения и повторное открытие студии. - Не удалось показать картинку на вкладке История. В дизайнере она есть, на устройстве странным образом исчезает. Не победила. - Попытка удалить StyleBook и затем настроить новый, привела к тому, что в дизайнере все отлично, а на устройстве стилизация полностью исчезает. Не победила. Спасла резервная копия приложения. - Были мысли расширить приложение, но в текущей версии C++ Builder невозможно создавать сервисы для андроида. Наличие сервиса позволило бы дополнительный не гласный контроль. Например, если человек отлучился уже в течение рабочего дня. Судя по дорожной карте и в следующей версии С++ Builder 10.2 в пролете создания сервисов для андроида. Выводы: Больше всего времени я тратила не на программирование, а на пункты из отрицательного. Пытаясь понять, что происходит, но безуспешно. Поскольку задача все же решена то, в общем, все хорошо, но без полного ощущения счастья. Просьба: Может что-то посоветуете еще по функционалу или интерфейсу для приложения такого типа? Может, есть что-то полезное, что можно добавить в такой тип мобильного приложения? Спасибо.
    1 балл
  7. Как это не зависит? ScrollBar1.ViewportSize := 50; ScrollBar1.Max := 200; В итоге ползунок по ширине равен 1/4 ширины скроллбара.
    1 балл
  8. Нет. Это все-таки косячок. Я с таким сталкивался, когда пытался выставлять размеры TListView автоматически относительно количества текста. ПС: так и не победил автоподгон высоты при большом тексте... Кто-то с этим справился?!
    1 балл
  9. Эти свойства были (в Seattle точно) BitmapMargins - это отступы отрисовки битмапа на холсте MarginsWrapMode - Это используется при изменении BitmapMargins и указывает что делать с этими отступами как-то так, поэксперементируйте. иногда очень весело выглядит
    1 балл
  10. Данная задача реализуется при помощи Android Services и Broadcast Recievers. Искать можно по ключевым словам "android service audio Recorder" здесь, например вот. Пожалуйста поделитесь полученным решением с нашим сообществом. P.S.: здесь я опубликовал свое решения для записи звука микрофона с таймером при запуске сервиса.
    1 балл
  11. в конце заполнения ListView нужно сделать <TListView>.Resize;
    1 балл
  12. zairkz

    [Android] Как свернуть приложение?

    TAndroidHelper.Activity.moveTaskToBack(true); отправляет приложение в фон, где оно продолжает работать. и при повторном открытие открывается программа так как будто она и не закрывалась.
    1 балл
  13. Я бы логику работы приложения сделал по другому - не хранил ничего на телефоне пользователя, ибо люди врут и оставлять данные учета им на откуп не очень хорошо. Удалить все, пользователь может просто очистив данные приложения в настройках и обвинить в этом разработчика. И самое обидно вы не докажете обратное. Проще и надежнее было бы отправлять на сервер запрос по http с хешем логина/пароля/id маячка(есть такое у них?). Приложение сильно бы упростилось - человек подошел к маячку, запустил приложение, приложение идентифицирует маячек, замешивает хеш и отправляет на сервер, сервер отвечает подтверждением приема данных и приложение демонстрирует подтверждение пользователю. Привязка приложения к работнику, как я понял, не осуществляется? Т.е. только по письму полученному от работника? Кто ему мешает отослать поддельное письмо с компьютера? Благо исходящие письма с примерами он может посмотреть в яндексе. Привязку приложения удобно осуществить с помощью однократного считывания QR кода, с экрана компьютера отдела кадров. В коде зашифровать необходимую для идентификации информацию, в том числе информацию о адресе API сервера конкретного предприятия, дабы не привязывать приложение к одному. Отсутствие сервера конечно резко снижает эффективность приложение. А так можно было бы натолкать маяков в туалеты, курилки, близлежащие пабы и контролировать рабов сотрудников на полную катушку ;-)
    1 балл
  14. Равиль Зарипов (ZuBy)

    Проиграть аудио

    вот хорошая документация по андроид апи для создания полноценного плеера. показано как использовать кастомные звуки. а для чего нужны стандартные звуки?
    1 балл
  15. У меня поставщик данных - это прибор. Получается, что он - сервер. Однако этот сервер не пришлет мне данные, пока я не отправлю ему запрос. Из всего этого я делаю вывод, что для решения моей задачи необходимо использовать только один компонент: TNetHTTPClient. Я правильно понимаю?
    1 балл
  16. так и нужно делать, а тело таймера должно содержать код MediaPlayer->Position = 0; // так в билдере? а интервал таймера должен быть равен длине трека
    1 балл
  17. Я предлагаю создать свой собственный класс для таких целей. Обработаем свойство Resize и всё, никаких проблем не будет. http://fire-monkey.ru/topic/2280-sobstvennyi-tlistboxitem-na-c/ тут я описал как создать собственный класс для ListBoxItem там же есть ссылка и для Delphi. Ниже приведен класс который я создал, только на C++. Посмотрите там обработчик события ApplyStyleLookup() и Resize(). И еще предлагаю вместо TLabel использовать TText. Если всё таки хотите своим путём тогда вычислите высоты с помощью TTextLayout, это делается так: var L : TTextLayout; begin L := TTextLayoutManager.DefaultTextLayout.Create; L.BeginUpdate; L.Text := FtextType.Text; {Вместо FTextType будет ваш Label} L.MaxSize := TPointF(FtextType.Width, 1000); L.Font := FTextType.Font; {} L.WordWrap := FTextType.WordWrap; L.HorizontalAlign := FTextType.HorzTextAlign; L.VerticalAlign := FTextType.VertTextAlign; L.EndUpdate; height := L.Height; end; Я не силён в Delphi, но думаю вы поймете. ListBoxItem.zip
    1 балл
  18. Вот так: uses Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers; procedure TForm2.Button1Click(Sender: TObject); var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_MAIN); Intent.addCategory(TJIntent.JavaClass.CATEGORY_HOME); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); SharedActivity.startActivity(Intent); end; но на 4.4 поведение немного другое... (Выскакивает табличка с выбором лаунчера). Хотя не известно на всех устройствах так или только у меня... В справке написано, что должен открываться домашний экран, по всей видимости, тем, у кого стоит несколько Лаунчеров даётся выбор.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...