Лидеры
Популярный контент
Показан контент с высокой репутацией 20.06.2017 во всех областях
-
TPushClient - нашёл чудесную вещь
AngryOwl отреагировал Евгений Корепов за вопрос
Наткнулся тут на изящную штуку для приложения с 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 := ''; Но и без этого работает.1 балл -
Размер Формы
Равиль Зарипов (ZuBy) отреагировал krapotkin за вопрос
еще TLayout для группировки компонентов и на других платформах тоже всегда так делайте1 балл -
Отправка PUSH сообщений через IdHTTP.Post
Равиль Зарипов (ZuBy) отреагировал Andrey Efimov за вопрос
Уже давно замечены проблемы Indy с SSL на Android, вроде как, даже сама Idera рекомендовала (пруф не дам, т.к. не помню где видел это) использовать новые TNetHTTPClient и TNetHTTPRequest. Попробуйте использовать эти компоненты, с SSL работать умеют и асинхронные запросы умеют (т.е. не придётся создавать отдельный поток, достаточно изменить свойство компонента), и ещё куча всего. Основная справка с примерами тут: Using an HTTP Client1 балл -
Embarcadero Delphi - где искать apk после компиляции проекта?
Rusland отреагировал Andrey Efimov за вопрос
Опять же, пользуйтесь поиском! Ответ тут: Можно ли собрать APK без смартфона ? Справка: Deploying Your Unsigned Android Application Deploying Your Signed Android Application1 балл -
не (Shared)DocumentsPath, a PublicPath если заливаете файлы в assets\internal, то ищем файлы с помощью GetDocumentsPath, при этом они никому не видны если заливаем файлы в assets\, то ищем с помощью GetPublicPath и файлы видны всем мной вышеуказаный код работает1 балл
-
Можно без показа экрана набора номера: procedure TForm1.Button1Click(Sender: TObject); // Uses FMX.Dialogs, FMX.PhoneDialer, FMX.Platform var PhoneDialerService: IFMXPhoneDialerService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService)) then PhoneDialerService.Call('+71234567890') Else ShowMessage ('Вызовы не поддерживаются'); end;1 балл
-
Android без дополнительных разрешений и с показом экрана набора номера: //uses Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText; var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setData(StrToJURI('tel:' + somePhoneNumber)); SharedActivity.startActivity(Intent); end; А для прямого осуществления вызова (с разрешениями) есть пример стандратный в папке: c:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\Mobile Snippets\PhoneDialer\1 балл
-
Поток в Firemonkey Android для скачивания TXT
Ingalime отреагировал Равиль Зарипов (ZuBy) за вопрос
во первых: синхронизация сделана не правильно во вторых: в примерах студии есть демка с отображением индикатора загрузки в третьих: создание TIdHTTP (лучше заменить на THTTPClient) нужно делать в потоке код на коленке, без TThread // uses System.Threading TTask.Run( procedure var aHTPP: THTTPClient; aStream: TStringStream; aResult: String; begin aResult := ''; aHTPP := THTTPClient.Create; aStream := TStringStream.Create('', TEncoding.UTF8); try aHTTP.Get('урл://', aStream); aResult := aStream.DataString; finally FreeAndNil(aHTPP); FreeAndNil(aStream); end; TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Text := aResult; end) end)1 балл -
Узнать размер видеопамяти
Rusland отреагировал Vladimir PRO за вопрос
Это я этот пример выложил более года назад. Пример проверяет вашу конфигурацию на наличие разл. GPU (выдаёт их списком), инициализирует всё что необходимо на видео-акселераторе, создаёт массивы памяти на GPU, закачивает в них исходные данные из памяти CPU. Главное не забудьте, что рядом с файлом *.exe должны лежать текстовые файлы *.cpp (они при запуске передаются видеодрайверу на компиляцию). Если в них - в коде для GPU (Kernel, текстовом файле) на языке C99 есть ошибки - они будут показаны в "чёрном" окне. Потом выполняются в цикле несложные, но длительные операции. Причём это делается и на GPU (с контролем времени), и на CPU: чтобы убедиться в корректности вычислений. Папка со словом Slow в названии - это пример использования Atomic-функций (например, если надо найти среднее по большому массиву данных). В своих научных программах Atomic-функции стараюсь избегать: замедляют расчёты, "фирменные" atomic работают только с целыми. Использую вместо них barrier. Месяца 3 назад NVIDIA наконец-то начала переход со стандарта OpenCL1.2 на 2.0. Жаль, что такие интересные возможности OpenCL 2.0, как Pipes (трубы для обмена данными между модулями) NVIDIA (как и их любимая CUDA) пока не поддерживают... Только AMD даёт полноценную поддержку OpenCL 2.0 (только при размере видеопамяти более 2Gb!), а NVIDIA полностью совместима только с версией 1.2. В общем, будут вопросы - пишите: работаю только в связке Delphi/OpenCL уже давно. Кстати, в среде RAD Studio очень удобно редактировать одновременно и код Delphi-pascal, и C-код для OpenCL. ===== Дополню (конец декабря 2017). Внутри той же ссылки для скачивания добавил папку: OpenCL_Demo2017 Barrier and Local_Memory REDUCT В ней новый пример под Delphi XE8 64bit (работает и при компиляции в Delphi под Win32, но с ограничениями, о которых будет сказано ниже). Отличия: Добавлен пример простейшей редукции с использованием barrier и LocalMemory с обилием комментариев внутри Kernel-файла ProgramGPU1.cpp Показано, как внутри Kernel создать а-ля динамический массив (стандарт языка OpenCL 1.2 этого не позволяет). Главное. На форме добавлены Gauge-компоненты, показывающие: общую загрузку CPU ; загрузку CPU данной задачей ; загрузку GPU (общую); загрузку контроллера памяти GPU ; проценты использованной памяти GPU ; температуру GPU (в текстовом виде). Для определения загрузки GPU используется nvml.dll (мануал 2017), так что последние 4 параметра определяются только для карт NVIDIA, и при компиляции в Delphi под 64bit. Эта динамич. библиотека для каждой карты NVIDIA - своя, обычно при установке драйвера карты она попадает в папку C:\Program Files\NVIDIA Corporation\NVSMI\nvml.dll (этот путь прямо прописан в прилагаемом примере по ссылке). Всё что связано с определением загрузки CPU-GPU находится в отдельном модуле ProcessorUsage.pas, который может быть применён и для других программ (без OpenCL). Если есть желание попробовать OpenCL не только на видеокартах, но и на процессорах INTEL, надо поставить драйвер Ещё раз напоминаю, что при запуске *.exe рядом с ним должны лежать два текстовых файла *.cpp - они будут отправлены на компиляцию драйверу видеокарты! Буду весьма признателен, если кто-то подскажет способ измерения загрузки памяти GPU от AMD (загрузку GPU, его температуру, скорость FAN и т.д. уже знаю, как программно определить и для AMD тоже: использую atiadlxx.dll . Есть похожая DLL или иной способ определения свободной/использованной памяти именно для AMD? Всех с наступающим Новым годом!!1 балл -
TPushClient - нашёл чудесную вещь
AngryOwl отреагировал Равиль Зарипов (ZuBy) за вопрос
у меня есть заготовка, но не помню на чем остановился. надо будет посмотреть и выложить1 балл -
ZeroPlayer for DelphiDX Android
Евгений Корепов отреагировал AliZairov за тема
Добрый день. Я написал ZeroPlayer небольшой DelphiDX. ZeroPlayer поддерживает прямая и m3u видео ссылку. https://www.dropbox.com/s/7r2kxs9jazzqo3x/ZeroPlayerDelphi.zip?dl=01 балл