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

XXXXXX

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

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

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

    2

Весь контент XXXXXX

  1. XXXXXX

    Gif File

    Здравствуйте. Есть один вариант с использованием TBitmapListAnimation: Кидаем обычный TImage на форму. Под TImage создаём TBitmapListAnimation. Структура должна выглядеть так: В свойствах TBitmapListAnimation: AnimationBitmap - загружаем ленту картинок. Например: Для коротких Gif -ок можно использовать онлайн конверторы: http://ezgif.com/split - разделение Gif на отдельные фреймы (картинки) http://www.photojoiner.net/merge-photos/editor/# - соединение нескольких картинок в одну (соединяет до 8 штук) AnimationCount - сколько раздельных картинок в нашей объеденённой по горизонтали (в нашем слечае 8) AnimationRowCount - сколько рядов в нашей картинке (в нашем случае 1) Enabled = True Duration - указываем промежуток времени, которое должна занимать гифка (в секундах). PropertyName - прописываем Bitmap
  2. Отличные изменения. Ещё было бы неплохо увидеть закреплённую верхнюю панель при скролле вниз, ну или плавающую кнопку которая будет скролить вверх
  3. var Notification: TNotification; begin Notification := NotificationCenter1.CreateNotification; Notification.Name := 'Notification1'; Notification.AlertBody := 'Message'; Notification.FireDate := Now; NotificationCenter1.ScheduleNotification(Notification); есть такой код, он выкидывает локальное уведомление. можно ли получить кол-во "Неотменённых" уведомлений, т.е. активных?
  4. Код: function TfMain.CheckMobileInternetSpeed: String; var mTelephonyManagerObj: JObject; mTelephonyManager: JTelephonyManager; mNetworkType: Integer; ReturnValue: string; begin mTelephonyManagerObj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); mTelephonyManager := TJTelephonyManager.Wrap((mTelephonyManagerObj as ILocalObject).GetObjectID); mNetworkType := mTelephonyManager.getNetworkType(); with TJTelephonyManager.JavaClass do begin if mNetworkType = NETWORK_TYPE_UMTS then ReturnValue := 'GPRS' else if mNetworkType = NETWORK_TYPE_UMTS then ReturnValue := 'EDGE' else if mNetworkType = NETWORK_TYPE_UMTS then ReturnValue := 'CDMA' else if mNetworkType = NETWORK_TYPE_UMTS then ReturnValue := '1xRTT' else if mNetworkType = NETWORK_TYPE_UMTS then ReturnValue := 'IDEN' else if mNetworkType = NETWORK_TYPE_UMTS then ReturnValue := 'UMTS' else if mNetworkType = NETWORK_TYPE_EVDO_0 then ReturnValue := 'EVDO_0' else if mNetworkType = NETWORK_TYPE_EVDO_A then ReturnValue := 'EVDO_A' else if mNetworkType = NETWORK_TYPE_HSDPA then ReturnValue := 'HSDPA' else if mNetworkType = NETWORK_TYPE_HSUPA then ReturnValue := 'HSUPA' else if mNetworkType = NETWORK_TYPE_HSPA then ReturnValue := 'HSPA' else if mNetworkType = NETWORK_TYPE_EVDO_B then ReturnValue := 'EVDO_B' else if mNetworkType = NETWORK_TYPE_EHRPD then ReturnValue := 'EHRPD' else if mNetworkType = NETWORK_TYPE_HSPAP then ReturnValue := 'HSPAP' else if mNetworkType = NETWORK_TYPE_LTE then ReturnValue := 'LTE'; end; Result := ReturnValue; end; Советую почитать, насчёт того, какие буквы используются чтоб отобразить уровень сигнала на андроиде (G, E, H, H+ и т.д.) П.с. учтите, что это уровень сигнала а не скорость подключения.
  5. У меня тоже была проблема на устройствах: Samsung S6 , ОС: Lolipop 5.1.1 Samsung s4 , ОС: Lolipop 5.0 при активации Edit, программа просто закрывалась с сообщением "Project1 Stopped working.". Однако при создании нового проекта такого не происходило. Так и не смог разобраться.
  6. Попробуйте использовать этот модуль. При помощи него можете выполнять действие в отдельном потоке. Использование: procedure StartAsyncThread; begin Run(TAsyncTask, procedure(ATask: IAsyncTask) begin //что делать end, procedure(ATask: IAsyncTask) begin //Что делать после завершения end); end; AsyncTask.zip
  7. Странно, нет у меня ничего подобного, всё устанавливается/ запускается, помимо самого сервиса
  8. я тоже пытался выполнить задачу этим компонентом, но ничего не вышло, стрим просто не хочет запускаться, хотя в VLC плеере проигрывается отлично
  9. Спасибо большое, действительно помогли посты, к сожалению для стрима у меня вот такая ссылка, ​rtmp://92.51.103.10/live/tiflistv2 я с самого начала неправильно написал, извините, наверное это уже для новой темы вопрос, если можно тут задам, кто-нибудь сталкивался с ​rtmp? как обычную ссылку не могу проиграть, насколько я понял там другая структура потока.
  10. XXXXXX

    Проиграть видео с Url

    Есть ли возможность проиграть видео на андроиде находящееся по определённой ссылке? Допустим: https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4 Желательно запустить видео в самой программе, без интентов. После поисков в интернете наткнулся на ссылку http://code.tutsplus.com/tutorials/streaming-video-in-android-apps--cms-19888 Тут объясняется как сделать это в андроид студие (при помощи VideoView). К сожалению на fm не нашёл нигде рабочего примера.
  11. а запуск звонока и смс работают? нет, но можете вызывать любую процедуру в окончании ивентов
  12. Если кому-нибудь понадобится Listbox такой-же как и в списке сообщений в андроиде. ListboxInteractions.zip
  13. Я думаю можно изменять размер ползунка в стиле динамически, но вот как это реализовать не уверен.
  14. Кстати на скролбаре что ползунок, его никак не увеличить? Из-за того что он меньше чем ползунок listview, образуется "слепая зона", в которой двигаешь ползунок а список остаётся на месте
  15. Если посадить на ListView1ScrollViewChange, то будет вечный конфликт ) Изменение Scrollbar1.Value влечет вызов ScrollBar1Change где происходит скроллирование LV. Следовательно будет вызван ListView1ScrollViewChange... получится бесконечный цикл ) ну тогда можно взять переменную, и переключать её когда меняется из ListView ListView1ScrollViewChange: ScrollBarChange := True; ScrollBar1.Value := ListView1.getFirstVisibleItemIndex; ScrollBarChange := False; ​ ScrollBar1Change: if not ScrollBarChange then ListView1.ScrollTo(Round(ScrollBar1.Value));
  16. да вроди если в ListView1ScrollViewChange ScrollBar1.Value:=ListView1.getFirstVisibleItemIndex; посадить, всё нормально, зачем таймер?
  17. как вариант, можно извратиться и посчитать высоту экрана, разделить на 26 (либо сколько букв/символов/цифр вам надо) и установить высоту каждого айтема в листбоксе отдельно, чтобы не надо было прокручивать алфавитный скролер
  18. Не совсем понял "перемещение алфавита должно быть в обратную сторону" в моём примере, я связал с основным, но возможно есть и более оптимальный способ. При LBMouseMove я обхожу весь основной листбокс и ищу первую запись, которая начинается на выбранную букву, скорее всего при большом количестве записей будет подвисать PS. Если уменьшить размер лист айтема в алфавитном листбоксе, будет почти тоже самое что и в списке контактов) ListBoxAtoZ.zip
  19. Alexander616, сейчас посмотрю Судя по видео я тоже неправильно понял вопрос, извиняюсь
  20. Насколько я понял нужна такая штука В "LBMouseUP" скрольте до того места, куда вам надо попасть ListBoxAtoZ.zip
  21. Может ещё один листбокс с алфавитом/цифрами справа?
  22. Собрал сервис по туториалу Но к сожалению не работает, может ктонибудь посдказать в чём проблема? стандартно запускается программа, но после её закрытия в запущенных апликациях сервиса не видать. По туториалу: В ивенте сервиса AndroidServiceStartCommand пишу : Result := TJService.JavaClass.START_STICKY; При создании формы основной программы: FService := TLocalServiceConnection.Create; FService.StartService('RADService'); Сервис регистрирую в основной программе как показано в туториале.
  23. Видимо ссл конфликтовал с tcp. Очень странно, раньше не было такой проблемы. Большое спасибо за помощь
  24. Добрый день. У меня появилась проблема в проекте после добавления Push сообщений. Задача состоит в следующем: нужно сделать так, чтобы можно было с одного телефона послать запрос на сервер с текстом уведомления и сервер отправил бы уведомление с этим текстом второму телефону. На оба телефона ставлю одну и туже версию тестовой программы, подключаюсь сначала одним телефоном, отправляю запрос на уведомление, всё отлично, на второй телефон оно приходит моментально. Со второго на первый также всё доходит. Проблема появляется когда к серверу подсоединяются 2 (больше не пробовал) клиента одновременно. первое сообщение доходит через несколько секунд, НО, после него сколько бы не тыкал на отправку всё молчком и через некоторое время клиент отсоединяется от сервера и выдаёт ошибку "Not connected", также на сервере заходит в обработку ивента "Disconnect". Для связи Client/Server использую IndyTcp. Систему Push сообщений собираю (в основном) по туториалу: Компоненту IdSSLIOHandlerSocketOpenSSL1 порт прописываю 9090 IdTCPServer1 - 8989 З.ы. для первого пробовал без порта, та же самая проблема. Код отправки уведомления с сервера. На данный момент после получения команды на отправку уведомления сервер посылает всем клиентам. procedure TForm1.SendNotification(Txt: string); var AJson: TJSONObject; AJsonData: TJSONObject; ARegisterIds:TJSONArray; AData, AResponseContent:TSTringStream; I:Integer; const DevTokens :array[1..2] of string = ('DeviceToken1', 'DeviceToken2'); begin ARegisterIds := TJSONArray.Create; AJson := TJSONObject.Create; try for I := Low(DevTokens) to High(DevTokens) do begin ARegisterIds.Add(DevTokens[I]); end; AJsonData := TJSONObject.Create; AJsonData.AddPair('id', ID.ToString()); ID := ID + 1; AJsonData.AddPair('message', Txt); AJson.AddPair('registration_ids', ARegisterIds); AJson.AddPair('data', AJsonData); IdHTTP1.Request.ContentType := 'application/json'; IdHTTP1.Request.CustomHeaders.AddValue('Authorization', 'key=AIzaSyDGHrZIQSx8execZvc6E-YYKFsGBvSoSGs'); AData := TStringStream.Create(AJson.ToString, TEncoding.UTF8); AData.Position := 0; AResponseContent := TStringStream.Create('', TEncoding.UTF8); IdHTTP1.Post('https://android.googleapis.com/gcm/send', AData, AResponseContent); AResponseContent.Position := 0; mmo1.Lines.Add(AResponseContent.DataString); finally end; end;
  25. Ещё раз спасибо! Проверил на версии андроида - всё заработало!
×
×
  • Создать...