Поиск по сайту

Результаты поиска по тегам 'Android'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Категории и разделы

  • Общие вопросы
    • Анимация
    • Графика
    • Стили
    • Базы данных и REST
    • Компоненты
    • Положение, размеры, выравнивание
    • Работа с текстом
    • Приложение и формы
    • Отладка
    • Развертывание приложений
    • Вопросы по языку Object Pascal и RTL
    • Общая информация о TControl
    • События
    • Прочие вопросы
  • Вопросы по платформам
    • Android
    • iOS
    • OSX
    • Windows
    • Windows Phone
    • Linux
  • Вопросы по использованию RAD Studio
    • Лицензирование
    • Сборка проектов
    • Multi-Device Designer
    • Редактор кода
    • Вопросы
  • Обучение
    • Основная информация
    • Вопросы
    • Отзывы
  • Поиск специалистов по FireMonkey
    • Консультации
    • Ищу подрядчика
  • API интернет сервисов
    • ВКонтакте API
    • Google Maps API
    • Yandex деньги
  • Дополнительные ресурсы по FireMonkey
    • Сторонние компоненты
    • Приложения, написанные с использованием FireMonkey
    • Примеры
    • Руководства
    • Шаблоны
    • Статьи и заметки
    • Информация о версиях RAD Studio
    • Новости
  • Организация работы данного форума
    • Правила форума
    • Нарушения правил форума
    • Предложения об организации форума
    • Проблемы
    • Функции форума
  • Видеокурсы
    • Основная информация
    • Курсы
    • Предложения и голосования за новые курсы
    • Вопросы

Категории

  • Курсы



Фильтр по количеству...

Найдено 207 результатов

  1. Шаблон для проектов с покраской статус бара для мобильных платформ UPDATE: StatusBarColor.7z UPDATE2: StatusBarColor_update.zip
  2. Здравствуйте форумчане и профессионалы разработчики. Компилирую проект через C++Builder 10.2 под Android Появилась следующая проблема при использовании компонента TBitmapListAnimation Если приложение свернуть, а затем развернуть - то появляются жуткие глитчи в ввиде чёрных фонов вокруг компонентов, типа TImage, TButton. В Windows такая проблема - не наблюдается. Попытки вызвать Repaint или даже Invalidate для всей формы - положительного результата не дают. Пожалуйста, помогите решить эту проблему. //-------------------------------------------------------------------------------------------------------------------------------------------- ТЕМУ МОЖНО УДАЛЯТЬ Причина не в TBitmapListAnimation а в TAniIndicator, который работал совместно с TBitmapListAnimation. Приношу извинения за беспокойство. Проблема была в TAniIndicator. Буду разбираться почему он так себя безобразно ведёт. Тему можно удалять.
  3. Недавно компилил приложение на Delphi FMX Android при обращении к серверу https при выполнении Get запроса от компонента TIdHttp запросил библиотеку "Could not load SSL library" используется протокол sslvTLSv1_2 в windows все пашет в андроид нет , накопал что можно подключить библиотеки libssl.so и libcrypto.so через deployment .assets\internal , А вот как в коде дальше их использовать никто примерчик не выложил, хоть и обсуждали на интернет просторах 100 раз, те как прикрутить к IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile. Если есть у кого код выложите пожалуйста? или скинте по email bossalex@ya.ru IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method.sslvTLSv1_2; IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode.sslmUnassigned;
  4. В приложении: procedure TForm7.Button1Click(Sender: TObject); var AIntent: JIntent; AServiceName: string; begin AIntent := TJIntent.Create; AServiceName := 'com.embarcadero.services.Service'; AIntent.setClassName( TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString( AServiceName ) ); AIntent.putExtra( TAndroidHelper.StringToJString( 'Code' ), 0 ); AIntent.putExtra( TAndroidHelper.StringToJString( 'Data' ), TAndroidHelper.StringToJString( 'DataString' ) ); TAndroidHelper.Activity.startService( AIntent ); end; В сервисе: procedure TDM.AndroidIntentServiceCreate(Sender: TObject); begin Toast( 'Create' ); end; procedure TDM.AndroidIntentServiceHandleIntent(const Sender: TObject; const AnIntent: JIntent); begin Toast( 'HandleIntent' ); end; Сообщение 'Create' показывается, а 'HandleIntent' нет. OnCreate срабатывает, но onHandleIntent не вызывается что бы я не делал. Может я что-то не так делаю?
  5. Всем привет. Учусь работать с ini-файлами на Android. И сразу же возникла проблема, которую никак не могу решить. Хотел написать подобие приложение-тест с хранением данных в ini файле. В итоге все отлично работает на windows,а под Андроид при запуске висит только значок firemonkey секунд 10 и приложение вырубается так и не запустившись. В чем может быть проблема? Использую отладку по USB. TIniFile *Ini = new TIniFile(System::Ioutils::TPath::GetDocumentsPath() + PathDelim + "options.ini"); Юзаю эти библиотеки #include <System.IOUtils.hpp> #include <System.IniFiles.hpp>
  6. Доброго времени суток! Решаю следующую задачу, в приложении динамически формируются разные объекты, наследники от одного класса. При формировании объектов заполняется динамический массив этих элементов. Далее я хочу в отдельном потоке для каждого из элементов массива получить его состояние, то есть делаю запрос к серверу. Все это повешено на таймер, каждую секунду должен отрабатываться запрос. Все более менее работает в Windows, а на Андроиде со временем приложение валится. Вот код таймера, для читаемости я удалил куски с различными вариантами E. RootElements - это массив TEssense от которого есть наследники. Функции GetBoardCurrentValue, GetBoardMaxValue - по сути запросы к серверу. Подскажите, правильно ли я оформляю работу с потоками для работы на Андроиде? procedure TForm1.MasterTimerTimer(Sender: TObject); begin TTask.Run( procedure var l, d, a: byte; i,j:integer; E: TEssence; p: Pointer; VirtualNode: IXMLNode; VirtualElementNode: IXMLNode; id: byte; begin l := Length(Form1.RoomElements); for j := 0 to l - 1 do begin E := Form1.RoomElements[j]; // Реле if E is TRele then begin d := (E as TRele).Device_ID; a := (E as TRele).Device_Adress; if Form1.GetBoardCurrentValue(d, a) = true then begin TThread.Synchronize(nil, procedure begin (E as TRele).ReleSwitch.IsChecked := Form1.device[d].Board[a].CurrentValue.ToBoolean; end); end; // (E as TRele).ReleOnTimer(E) end // Диммер else if E is TDimmer then begin d := (E as TDimmer).Device_ID; a := (E as TDimmer).Device_Adress; if Form1.GetBoardMaxValue(d, a) = true then begin TThread.Synchronize(nil, procedure begin if (Form1.device[d].Board[a].Type_ID = TType.Светодиод) or (Form1.device[d].Board[a].Type_ID = TType.Диммер220) then begin (E as TDimmer).DimmerValue.Text := (Form1.device[d].Board[a].MaxValue).ToString; end; end); end; // (E as TDimmer).DimmerOnTimer(E) end // Таймер else if E is TSTimer then begin id := (E as TSTimer).STimerIndex; Form1.FillHTTPRequest(0, 0, HTTP_GET_TIMER_INFO, id); if Form1.AnswerIsComming = HTTP_GET_TIMER_INFO then begin TThread.Synchronize(nil, procedure begin if Form1.HTTPAnswer.Data1 = 0 then (E as TSTimer).Interval.Text := 'OFF' else (E as TSTimer).Interval.Text := 'ON' end); end; // (E as TSTimer).STimerOnTimer(E); end; end; end); end;
  7. Доброго времени суток. Есть android приложение, в нем есть диалоговое окно, которое предлагает перейти в google play и скачать другое приложение (pro версию), с 2 кнопками (да/нет). Как реализовать этот переход в Google play, чтобы в нем сразу было загружено нужное приложение. Использую Delphi XE7
  8. Наткнулся тут на изящную штуку для приложения с PUSH уведомлениями на Android и Ios. Один объект, все сам делает. Внедрил в одно боевое приложение с 100+ тысячами установок, полет нормальный. Описание тут https://delphiworlds.com/2017/04/firebase-cloud-messaging-android-ios/ Исходный код с примером на гитхабе https://github.com/DelphiWorlds/PushClient Использование максимально простое: uses DW.PushClient; .... private FPushClient: TPushClient; procedure PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); procedure PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); .... procedure TFormMain.InitPushService; begin FPushClient := TPushClient.Create; FPushClient.GCMAppID := ConstGCMAppID; FPushClient.ServerKey := ''; FPushClient.BundleID := ''; FPushClient.UseSandbox := Debug; // Change this to False for production use! FPushClient.OnChange := PushClientChangeHandler; FPushClient.OnReceiveNotification := PushClientReceiveNotificationHandler; try FPushClient.Active := True; except SendError('FPushClient.Active Exception'); end; end; procedure TFormMain.PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); begin if TPushService.TChange.DeviceToken in AChange then begin HDevicePushParams.DeviceID:=FPushClient.DeviceID; HDevicePushParams.DeviceToken:=FPushClient.DeviceToken; GetHTTP(CommandRegisterFCM); // Memo1.Lines.Add('DeviceID = ' + FPushClient.DeviceID); // Memo1.Lines.Add('DeviceToken = ' + FPushClient.DeviceToken); end; end; procedure TFormMain.PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); begin // ShowMessage(ANotification.DataObject.ToString... end; Правда руки не дошли разобраться для чего ему FPushClient.ServerKey := ''; FPushClient.BundleID := ''; Но и без этого работает.
  9. Добрый день, друзья. Начал заниматься вопросом описанным в шапке и столкнулся со множеством непонятных для меня проблем. Как примерно должно выглядеть на Рис. ниже. Знаю, что сам список барабан выполнен в TlistBox. Есть хорошая ссылка на блог Ярослава тут. Пошерстил файлы в FMX, и не нашел ключа для своего дела. Может кто занимался этим? Я изначально брал TScrollBox, кидал на него Tlayout и в него TLabel. Но думаю, видимо не то совсем.
  10. Добрый день. Кто знает, подскажите, можно ли средствами firemonkey менять иконку приложения в рантайм либо после закрытия и повторного открытия приложения? На win вроде бы можно, статьи на форуме находил, а для Андроида найти не удалось.
  11. Добрый день, друзья. Подскажите, есть ли возможность в firemonkey открыть форму как представлено на картинке ниже? Если да, то подскажите в какую сторону копать. Спасибо.
  12. Провел небольшое исследование поведения таймера Posix в сервисе. Результаты не очень. Таймер ведет себя так же как и в приложении, главное отличие - не умирает окончательно, но рассчитывать на него не стоит. Перед экспериментом было отключено энергосбережение, экономия трафика во сне (телефон работал через wifi), т.е. созданы все условия для долгой и стабильной работы. 2017-02-24 23:22:51 - телефон ушел в сон. Таймер начал работать эпизодически, с провалами до получаса. 2017-02-25 07:24:58 - я проснулся и разблокировал телефон. Таймер опять нормально заработал. В следующей серии попробую протестировать сервис с AlarmManager, что то у меня подозрения что результаты будут не лучше. 2017-02-25 07:27:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 108 2017-02-25 07:26:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 107 2017-02-25 07:25:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 106 2017-02-25 07:24:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 105 2017-02-25 07:21:05 Posix-таймер в сервисе. Запрос раз в 60 сек. № 104 2017-02-25 07:14:00 Posix-таймер в сервисе. Запрос раз в 60 сек. № 103 2017-02-25 07:01:59 Posix-таймер в сервисе. Запрос раз в 60 сек. № 102 2017-02-25 06:46:33 Posix-таймер в сервисе. Запрос раз в 60 сек. № 101 2017-02-25 06:24:50 Posix-таймер в сервисе. Запрос раз в 60 сек. № 100 2017-02-25 06:13:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 99 2017-02-25 05:51:32 Posix-таймер в сервисе. Запрос раз в 60 сек. № 98 2017-02-25 05:30:07 Posix-таймер в сервисе. Запрос раз в 60 сек. № 97 2017-02-25 05:16:28 Posix-таймер в сервисе. Запрос раз в 60 сек. № 96 2017-02-25 05:07:28 Posix-таймер в сервисе. Запрос раз в 60 сек. № 95 2017-02-25 05:00:41 Posix-таймер в сервисе. Запрос раз в 60 сек. № 94 2017-02-25 04:41:01 Posix-таймер в сервисе. Запрос раз в 60 сек. № 93 2017-02-25 04:21:19 Posix-таймер в сервисе. Запрос раз в 60 сек. № 92 2017-02-25 04:00:40 Posix-таймер в сервисе. Запрос раз в 60 сек. № 91 2017-02-25 03:41:33 Posix-таймер в сервисе. Запрос раз в 60 сек. № 90 2017-02-25 03:16:59 Posix-таймер в сервисе. Запрос раз в 60 сек. № 89 2017-02-25 03:02:01 Posix-таймер в сервисе. Запрос раз в 60 сек. № 88 2017-02-25 02:44:54 Posix-таймер в сервисе. Запрос раз в 60 сек. № 87 2017-02-25 02:23:49 Posix-таймер в сервисе. Запрос раз в 60 сек. № 86 2017-02-25 02:10:28 Posix-таймер в сервисе. Запрос раз в 60 сек. № 85 2017-02-25 01:52:11 Posix-таймер в сервисе. Запрос раз в 60 сек. № 84 2017-02-25 01:32:57 Posix-таймер в сервисе. Запрос раз в 60 сек. № 83 2017-02-25 01:28:26 Posix-таймер в сервисе. Запрос раз в 60 сек. № 82 2017-02-25 01:27:26 Posix-таймер в сервисе. Запрос раз в 60 сек. № 81 2017-02-25 01:26:26 Posix-таймер в сервисе. Запрос раз в 60 сек. № 80 2017-02-25 01:25:27 Posix-таймер в сервисе. Запрос раз в 60 сек. № 79 2017-02-25 01:10:59 Posix-таймер в сервисе. Запрос раз в 60 сек. № 78 2017-02-25 01:00:27 Posix-таймер в сервисе. Запрос раз в 60 сек. № 77 2017-02-25 00:38:59 Posix-таймер в сервисе. Запрос раз в 60 сек. № 76 2017-02-25 00:19:22 Posix-таймер в сервисе. Запрос раз в 60 сек. № 75 2017-02-25 00:01:27 Posix-таймер в сервисе. Запрос раз в 60 сек. № 74 2017-02-24 23:51:15 Posix-таймер в сервисе. Запрос раз в 60 сек. № 73 2017-02-24 23:30:37 Posix-таймер в сервисе. Запрос раз в 60 сек. № 72 2017-02-24 23:22:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 71 2017-02-24 23:21:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 70 2017-02-24 23:20:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 69 2017-02-24 23:19:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 68 2017-02-24 23:18:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 67 2017-02-24 23:17:52 Posix-таймер в сервисе. Запрос раз в 60 сек. № 66 2017-02-24 23:16:52 Posix-таймер в сервисе. Запрос раз в 60 сек. № 65
  13. Всем привет. Столкнулся со следующей проблемой после активации tedit при попытке создать любое намерение (для набора номера или открытия ссылки) программа наглухо зависает. И наоборот после создания и выполнения намерения, если перейти к tedit происходит глухое зависание. Тоже самое происходит и с memo. Проблема похожа на описанную в этой теме, но решение из нее не помогает Чем заменить tedit не знаю, пробовал все возможные варианты. Функции работы с намерениями рабочая и если не активировать tedit то все работает отлично. Пробовал на разных устройствах, результат тот же. Правда на всех устройствах был Android 5. Подскажите пожалуйста, возможно ли под android создать диалоговое окно с вводом текста? Или может быть есть еще какие-нибудь способы ввода текста?
  14. Здравствуйте, коллеги. При написании клиента под андроид для Datasnap сервера столкнулся с проблемой, что из телефона строки с русскими буквами уходят в нечитаемом виде на сервер. При запуске приложения под Windows проблемы нет. Даже тестовые методы, генерируемые мастером создания DataSnap сервера (EchoString, ReverseString) не работают с русским текстом при запуске клиента на андроиде. Прилагаю тестовые проекты сервера и клиента с вызовом одной только функции ReverseString - у меня все равно выходят кракозябры. Помогите разобраться, как правильно передавать строки с русскими буквами. DSTestStrAndroidServer.zip DSTestStrAndroidClient.zip
  15. Привет Всем! vkbdhelper.pas Давно пользовался vkbdhelper'ом, но он был только для андроида. руки добрались и до этого, теперь его можно использовать и на IOS изменения * почистил uses секцию * убрал зависимость от платформ (кросс-платформенный) * добавил глобальную переменную VKOffset VKOffset - расстояние между контролом и клавиатурой для тех случаев когда включены подсказки/автозамена и контрол оказывается под доп. панелькой Не все клавиатуры включают доп. панели в свой размер! Например для IOS нужно всегда прибавлять 30-32 пикселя, панель с кнопкой Done перекрывает контрол {$IFDEF IOS} VKOffset := 31; {$ELSE} VKOffset := 0; // на свой вкус // не знаю как определить размер доп. панельки // когда она не входит в размер клавиатуры // и определить есть ли панелька вообще... {$ENDIF} vkbdhelper.zip
  16. Когда мы на Андроид устройстве клавишей переходим в TaskManager (Менеджер запущенных приложений), мы видим наши Недавние или Запущенные приложения в виде прямоугольников/квадратов. А именно: квадратный "скриншот" вместимости приложения и над "скриншотом приложения" размещается TopBar, на котором отображается некоторая информация (ярлык, название приложения и цвет, читаемый с приложения, а именно colorPrimary приложения). {Android L} В моём приложении, независимо от colorPrimary/colorPrimaryDark, TopBar имеет черный цвет. Можно ли это как-то изменить? Embarcadero RAD 10.2 Tokyo, Delphi. (использую модуль, который окрашивает даже StatusBar) Ниже прикреплены изображения для ознакомления с терминами.
  17. Ссылка: http://delphifmandroid.blogspot.ru/2016/07/admob.html Автор: Андрей Ефимов Описание: Подробная инструкция по добавлению рекламного блока в приложение, разработанное в RAD Studio.
  18. How to print text from Android (IOS) device ? (C++ Rad Studio 10.2) With USB printer and other types printers (WiFi, Bluetooth ....)
  19. В этой ссылке показан пример работы в одной сети (написано курсивом). Не могу найти, чтобы PC работал по сети или по WiFi, а телефон по мобильным данным. Не подскажете?
  20. Приложение свернуто или закрыто. Отправляю один пуш, на телефоне в шторке появляется уведомление. Отправляю еще один, появляется второе уведомление и так далее. Сколько пушей, столько и уведомлений. Как сделать чтобы все уведомления собирались в одном уведомлении в шторке? (как делают telegram, whatsapp и т. п.)
  21. Добрый день. Знаю, что на форуме есть несколько тем о том, как удалять объекты под Android и счетчике ссылок, однако использование рекомендаций оттуда мне пока не помогло. Суть вопроса: создаю свой класс type TRext =class(TRectangle) Text: TText; procedure RextMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure RextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure RextMouseLeave(Sender: TObject); Constructor Create(AOwner: TComponent); override; Destructor Destroy; override; end; type TMyChoose = class Item1, Item2, Item3: TRext; Edits: TEdit; procedure ItemClick(Sender: TObject); procedure OnEditFocus(Sender: TObject; var ACanFocus: Boolean); Constructor Create(Form: TForm); Destructor Destroy; override; end; ..... constructor TRext.Create(AOwner: TComponent); begin inherited Create(AOwner); Text:=TText.Create(Self); Text.Parent:=Self; Text.Align:=TAlignLayOut.Client; Self.Text.OnMouseDown:=RextMouseDown; Self.Text.OnMouseUp:=RextMouseUp; Self.Text.OnMouseLeave:=RextMouseLeave; end; Destructor TRext.Destroy; begin Text.Release; Text:=nil; inherited; end; constructor TMyChoose.Create(Form: TForm); begin inherited Create; Item1:=TRextCreate(Form); Item1.Parent:=Form; Item1.Align:=tAlignLayout.MostLeft; Item2:=TRextCreate(Form); Item2.Parent:=Form; Item2.Align:=tAlignLayout.MostLeft; Item3:=TRextCreate(Form); Item3.Parent:=Form; Item3.Align:=tAlignLayout.MostLeft; Edits:=TEdit.Create(Form); Edits.Parent:=Form; Edits.Align:=tAlignLayout.MostLeft; ......... end; Destructor TMyChoose.Destroy; begin Item1.Release; Item1:=nil; Item2.Release; Item2:=nil; Item3.Release; Item3:=nil; Edits.Release; Edits:=nil; inherited; end; Под Windows все нормально работает и уничтожается. Под Android вызов Destroy у объекта типа TMyChoose не приводит ни к чему. Вместо Release и nil использовал также DisposeOf и Nil, а также FreeAndNil - результат аналогичный. Как правильно уничтожать составные объекты?
  22. Господа и товарищи, помогите тупому мне! Столкнулся с странным. Под windows все отлично работает, а под android не могу добиться загрузки картинок. Мозг уже сломал. Собрал тестовый проект - в ListView (DynamicAppearance) добавляем 4 ListViewItem, в ListViewUpdatingObjects все создаем и грузим картинки из инета (потоки и прочее убрал для упрощения). Картанка слева, текст (URL) справа, проще некуда. Прилагаю к сообщению архив проекта и код. unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base, FMX.ListView, System.Net.HTTPClient, FMX.Objects; type TFormMain = class(TForm) ListView: TListView; procedure ListViewUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } ListViewUpdate : Boolean; procedure MyListViewUpdateObjects(const AListView: TListView; const AItem: TListViewItem); procedure InitListView(AListView : TListView); function LoadImageFromURL(AURL : String) : TBitmap; end; var FormMain: TFormMain; implementation {$R *.fmx} procedure TFormMain.FormCreate(Sender: TObject); begin ListViewUpdate:=False; end; procedure TFormMain.FormShow(Sender: TObject); begin InitListView(ListView); end; procedure TFormMain.InitListView(AListView : TListView); Var AListViewItem : TListViewItem; AImageURL : String; begin AImageURL:='http://kayfolom.ru/images/test/'; ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + 'logo.png'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + '000487806d3a2ab98aeb2c47b810fc8b.jpg'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + '0012ef6cb42e95268a4cd1d832a2b93a.jpg'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + '0022454ccb4f81a701cb3a3c89d52d2f.jpg'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); end; procedure TFormMain.ListViewUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin if Not ListViewUpdate then begin MyListViewUpdateObjects(Sender as TListView, AItem); AHandled:=True; end; end; procedure TFormMain.MyListViewUpdateObjects(const AListView: TListView; const AItem: TListViewItem); Var AName : TListItemText; AImage : TListItemImage; AvailableWidth, ImageWidth, ImageHeight : single; function SetupTextObject(const AName, AText : String; AFontSize : Single; AFontStyles : TFontStyles; AWidth, AHeight, X , Y : Single; AAlign, AVertAlign: TListItemAlign; ATextAlign, ATextVertAlign: TTextAlign) : TListItemText; begin Result:=TListItemText(AItem.View.FindDrawable(AName)); if Result=Nil then Result:=TListItemText.Create(AItem); Result.Name:=AName; Result.Width:=AWidth; Result.WordWrap:=True; Result.Font.Size:=AFontSize; Result.Font.Style:=Result.Font.Style + AFontStyles; Result.Trimming:=TTextTrimming.None; Result.Text:=AText; Result.PlaceOffset.X:=X; Result.PlaceOffset.Y:=Y; Result.Align:=AAlign; Result.VertAlign:=AVertAlign; Result.TextAlign:=ATextAlign; Result.TextVertAlign:=ATextVertAlign; Result.Height:=AHeight; end; function SetupImageObject(const AName : String; AWidth, AHeight, X , Y : Single; AAlign, AVertAlign: TListItemAlign) : TListItemImage; Var AImageURL : String; begin Result:=TListItemImage(AItem.View.FindDrawable(AName)); if Result=Nil then begin Result:=TListItemImage.Create(AItem); AImageURL:=AItem.Data['ImageURL'].AsString; Result.Bitmap:=LoadImageFromURL(AImageURL); end; Result.Name:=AName; Result.Width:=AWidth; Result.Height:=AHeight; Result.PlaceOffset.X:=X; Result.PlaceOffset.Y:=Y; Result.Align:=AAlign; Result.VertAlign:=AVertAlign; Result.ScalingMode:=TImageScalingMode.StretchWithAspect; end; begin AvailableWidth:=AListView.Width - AListView.ItemSpaces.Left - AListView.ItemSpaces.Right; // Изображение размещаем слева ImageWidth:=AvailableWidth / 3; ImageHeight:=AvailableWidth / 3; AImage:=SetupImageObject('Image', ImageWidth, ImageHeight, 0, 0, TListItemAlign.Leading, TListItemAlign.Leading); // Текст справа AName:=SetupTextObject('Name', AItem.Data['ImageURL'].AsString, 14, [], AvailableWidth - ImageWidth, ImageHeight, ImageWidth, 0, TListItemAlign.Leading, TListItemAlign.Leading, TTextAlign.Center, TTextAlign.Center); AItem.Height:=Round(ImageHeight + AListView.ItemSpaces.Top + AListView.ItemSpaces.Bottom); end; function TFormMain.LoadImageFromURL(AURL : String) : TBitmap; Var AHTTPClient : THTTPClient; AStream : TMemoryStream; HTTPResponse : IHTTPResponse; begin Result:=Nil; AHTTPClient:=THTTPClient.Create; AStream:=TMemoryStream.Create; try HTTPResponse:=AHTTPClient.Get(AURL, AStream); finally if HTTPResponse.StatusCode=200 then Result:=TBitmap.CreateFromStream(AStream); end; end; end. test092 ListView with Image.7z
  23. На незначительном количестве устройств, менее 0,1%, получаю ошибку "Bitmap size too big" при AImage.Bitmap.LoadFromStream(AMemoryStream). Подозреваю что ошибка происходит на слабых устройствах. Картинка 250х250 png. Код выполняется в основном потоке (в интернетах были упоминания что глючит эта операция в отдельном потоке на каких то версиях Delphi). Как предотвратить подобное? Можно как то определить максимальный размер картинки для текущего устройства? Или может дело не в свободной памяти, а в чем то еще?
  24. Ссылка на статью. Автор: Александр Бирюков В статья я максимально подробно попытался описать работу с PHP скриптом для рассылки Push сообщений из любой программы вне зависимости от платформы. Затрагивается вопроса от экспорта скриптов до кода программы: отправка и получение Push, регистрация устройств. Надеюсь кому-нибудь пригодится. Буду рад комментариям, обоснованной критике и доработкам.
  25. Здравствуйте! У меня проблемы при создании Android программ. Когда компилирую проект и запускаю его из среды Delphi сразу на мобильник, то первый раз программа еще работает, а во второй-третий раз на мобильнике показывается только заставка с огнем, а потом черный экран, а в самой среде в самом низу (где Event log и где обычно показываются процессы) - ничего нет, пусто. Потом приходится перезапускать Delphi. У меня есть подозрения, что я неправильно настроил Delphi. Не могли бы гуру взглянуть на мои настройки и указать на мои ошибки? Скриншоты приложил, спасибо. P,S, Delphi 10.1