Евгений Корепов
Пользователи-
Постов
738 -
Зарегистрирован
-
Посещение
-
Победитель дней
100
Весь контент Евгений Корепов
-
Погуглил по фразе "macos vmware amd", выдало кучу решений, вот к примеру https://hackintosher.com/guides/how-to-install-macos-sierra-on-a-ryzen-pc-virtual-machine-vmware/ . Откуда информация о несовместимости проца AMD?
-
Значит нужно: 1. Сертификат разработчика. С этим все ясно. 2. Любой телефон с 64 битной ОС. 3. Устройство с MacOS. Тут конечно вопросы есть. Машин с Интелом нет в принципе, железа куча, но везде AMD. Мне кажется проще будет купить Mac mini типа такого https://www.dns-shop.ru/product/9054c969697c3120/nettop-apple-mac-mini-mgem2rua/characteristics/ , потом продать как станет не нужен. Хватит такого комплекта на ближайшие 2-3 года? Не ожидается никаких хитрых изменений? А то Эппл новое правило выкатит и все это превратится в тыкву.
-
Присоединяюсь к вопросу. Тоже хочу окучить и яблочные устройства. Было бы замечательно получить советы и инструкции. Особенно в плане минимальных вложений.
-
Вот как то так: uses ......... Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText; ....... procedure TForm1.FormCreate(Sender: TObject); Var DownloadManager : JObject; begin DownloadManager:=SharedActivityContext.getSystemService(TJContext.JavaClass.DOWNLOAD_SERVICE); if DownloadManager <> nil then begin Используем... end; end; Вот как именно использовать - тут можно голову сломать, может кто и подскажет На java это делается вот так примерно: DownloadManager downloadmanager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); Uri uri = Uri.parse("http://www.example.com/myfile.mp3"); DownloadManager.Request request = new DownloadManager.Request(uri); request.setTitle("My File"); request.setDescription("Downloading"); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); request.setDestinationUri(Uri.parse("file://" + folderName + "/myfile.mp3")); downloadmanager.enqueue(request); Подозреваю что вам придется самостоятельно описать класс (интерфейс) DownloadService.
-
http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.QuotedStr Возможно : "Примечание. При работе с многобайтовыми системами символов ( MBCS) вместо этого используйте AnsiQuotedStr ." ?
-
Или в среде, меню Run, Parameters, поле Parameters - добавьте туда -cleaninstall, при запуске на устройстве будет производиться чистая установка.
-
Ну а в тему - если это винда, то можете попробовать открыть ссылку на файл с помощью ShellExecute, если андроид, то запустить активити как тут https://stackoverflow.com/questions/49200962/delphi-10-2-how-can-i-open-a-url-in-androids-web-browser-from-my-application (вместо TJIntent.JavaClass.ACTION_VIEW можете попробовать использовать другие экшены). В ios не подскажу...
-
Надо отвечать 42 ? https://ru.wikipedia.org/wiki/Ответ_на_главный_вопрос_жизни,_вселенной_и_всего_такого А автору топика совет - хотите получить ответ, задавайте вопросы правильно и подробно. Какая платформа? Что такое "стандартный загрузчик"? И так далее...
-
Сейчас только увидел в тексте " и для Android", сорри. Вы кусок кода отправки/получения покажите, может кто увидит в чем проблема.
-
Выдернул из рабочего проекта кусок, надеюсь вам поможет. Процедура SendCommand(Var ASendingData : TSendingData), в блокирующем режиме посылает текст на сервер и получает результат. unit UnitExcavatorWinTCPThread; interface uses classes, SysUtils, System.Types, System.Generics.Collections, System.Win.ScktComp, UnitExcavatorThread, UnitExcavatorTypes; type TExcavatorWinTCPThread = class(TExcavatorThread) protected FClientSocket : TClientSocket; CStream : TWinSocketStream; procedure CreateNetwork; override; procedure DestroyNetwork; override; procedure SendCommand(Var ASendingData : TSendingData); override; public end; implementation procedure TExcavatorWinTCPThread.CreateNetwork; begin FClientSocket:=TClientSocket.Create(Nil); FClientSocket.Host:=FExcavatorInstance.Host; FClientSocket.Port:=FExcavatorInstance.PortTCP; FClientSocket.ClientType:=TClientType.ctBlocking; CStream:=TWinSocketStream.Create(FClientSocket.Socket, FTimeouts.ConnectTimeout); end; procedure TExcavatorWinTCPThread.DestroyNetwork; begin if Assigned(CStream) then FreeAndNil(CStream); if Assigned(FClientSocket) then FreeAndNil(FClientSocket); end; procedure TExcavatorWinTCPThread.SendCommand(Var ASendingData : TSendingData); Var AReaded, ACount : integer; ABuffer : TBytes; ACommand, AStringBuffer : AnsiString; ACommandIdString : String; ADone : Boolean; begin ACommandIdString:='"id":' + ASendingData.CommandId.ToString; ASendingData.Error:=False; ACommand:=AnsiString(ASendingData.Value) + #10; ASendingData.Value:=''; if Not FClientSocket.Active then try FClientSocket.Open; except on E:Exception do begin ASendingData.Error:=True; ASendingData.Value:=E.Message; exit; end; end; if FClientSocket.Active then begin try // Считываем из буфера все что там есть. while CStream.WaitForData(CStream.TimeOut) do AStringBuffer:=FClientSocket.Socket.ReceiveText; except end; try FClientSocket.Socket.SendText(ACommand); except on E:Exception do begin ASendingData.Error:=True; ASendingData.Value:=E.Message; exit; end; end; try ADone:=False; ACount:=0; repeat if CStream.WaitForData(CStream.TimeOut) then ASendingData.Value:=ASendingData.Value + FClientSocket.Socket.ReceiveText; if ASendingData.Value.Contains('"id":1') then break; if ASendingData.Value.Contains(ACommandIdString) then break; Inc(ACount); if ACount > 2 then break; until ADone; except on E:Exception do begin ASendingData.Error:=True; ASendingData.Value:=E.Message; exit; end; end; end else begin ASendingData.Error:=True; ASendingData.Value:='Not connected'; end; end; end.
-
Посмотрите в идущих в комплекте примерах: Тут \Object Pascal\Multi-Device Samples\Device Sensors and Services\App Tethering\ : MediaPlayer PhotoWall И тут \Object Pascal\RTL\Tethering\ : BDShoppingList DesktopBeaconCast DesktopCast MediaPlayer PhotoWall А в общих чертах как то так: Вы получаете на "сервере" данные ни где нибудь, а в событии procedure TForm1.TetheringAppProfile1ResourceReceived(const Sender: TObject; const AResource: TRemoteResource); Переменная AResource - все что вам нужно. Там и полученные данные AResource.Value определенного типа AResource.Value.DataType. И профиль отправителя AResource.Profile позволяющий точно его идентифицировать.
-
Я уперся рогом и все таки смог найти решение для вас. Гугль любит разработчиков, и обычно оставляет им возможность пользоваться сервисами бесплатно. И в этот раз чутьё не подвело. Вот решение: 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.Controls.Presentation, FMX.ScrollBox, FMX.Memo, System.JSON, System.Net.HTTPClient, System.NetEncoding; type TForm1 = class(TForm) Memo1: TMemo; procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } function GoogleTranslate(const AValue : String) : String; end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormShow(Sender: TObject); Var S : String; begin S:=GoogleTranslate('Hello world!'); Memo1.Lines.Add(S); end; function TForm1.GoogleTranslate(const AValue : String) : String; const ConstSourceLang = 'en'; ConstTargetLang = 'ru'; var AResponce : IHTTPResponse; FHTTPClient : THTTPClient; AAPIUrl : String; begin AAPIUrl:='https://translate.googleapis.com/translate_a/single?client=gtx&sl=' + ConstSourceLang + '&tl=' + ConstTargetLang + '&dt=t&q=' + TNetEncoding.URL.Encode(AValue); FHTTPClient:=THTTPClient.Create; FHTTPClient.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 6.1; ru-RU) Gecko/20100625 Firefox/3.6.6'; Result:='Translate Error : '; AResponce:=FHTTPClient.Get(AAPIUrl); if Not Assigned(AResponce) then begin Result:=Result + 'unknow.'; Exit; end; if AResponce.StatusCode <> 200 then begin Result:=Result + AResponce.StatusText; end; try Result:=TJSONArray(TJSONArray(TJSONArray(TJSONObject.ParseJSONValue(AResponce.ContentAsString)).Items[0]).Items[0]).Items[0].Value; except Result:=Result + 'error parse JSON.'; Exit; end; end; end. Подправил код, сделал покрасивее и убрал deprecated encode.
-
Вот сделал аналог на THTTPClient: function TForm1.GoogleTranslate(const AValue : String) : String; const ConstGoogleUrl = 'http://translate.google.ru/translate_a/t'; var ASource: TStringList; AResponce : IHTTPResponse; FHTTPClient : THTTPClient; begin FHTTPClient:=THTTPClient.Create; FHTTPClient.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 6.1; ru-RU) Gecko/20100625 Firefox/3.6.6'; Result:='Translate Error : '; ASource:=TStringList.Create; ASource.Add('client=x'); ASource.Add('text=' + AValue); ASource.Add('hl=en'); ASource.Add('sl=en'); ASource.Add('tl=ru'); AResponce:=FHTTPClient.Post(ConstGoogleUrl, ASource); if Not Assigned(AResponce) then begin Result:=Result + 'unknow.'; Exit; end; if AResponce.StatusCode <> 200 then begin Result:=Result + AResponce.StatusText; end; Result:=AResponce.ContentAsString; end; Получаю вполне очевидный ответ: Конечно подбор HTTP Headers и других параметров может и обманет не надолго сервис, но на это надеяться не стоит. В Гугле работают отнюдь не дураки, и вряд ли они создавали свой сервис перевода (с отличным API кстати) просто так. Сервис платный (20 долларов США за 1 000 000 символов , но с пробным бесплатным периодом. Если вы хотите 100% работающее решение, то лучше воспользоваться им https://translate.google.com/intl/ru/about/forbusiness.html
-
В это операционке уже есть встроенный FTP сервер. Кривой, но работать будет. Включить его и настроить очень просто.
- 17 ответов
-
- сетевые ресурсы
- сетевая папка
- (и ещё 2 )
-
Вот, по моему мнению, самый просто и быстрый способ: Устанавливаете на сервере FTP сервер. К примеру SlimFTPd (http://www.whitsoftdev.com/slimftpd/), его можно запустить как сервис. Не забываете настроить папку, пользователя (с паролем) и остальное. Там все просто. В своем приложении отправка файла на FTP сервер займет у вас несколько строчек: IdFTP:=TIdFTP.Create; IdFTP.Host:=Host; IdFTP.Username:=ALogin; IdFTP.Password:=APassword; IdFTP.Passive:=True; IdFTP.TransferType:=ftBinary; IdFTP.ReadTimeout:=ConstFTPTimeout; IdFTP.TransferTimeout:=ConstFTPTimeout; try IdFTP.Connect; except on E : Exception do begin Error:=True; ErrorMessage:=E.Message; end; end; AFilePathLocal:='Путь к файлу который хотите отправить'; AFilePathRemote:='/Download/'; if TFile.Exists(AFilePathLocal) then try IdFTP.Put(AFilePathLocal, AFilePathRemote); except on E : Exception do begin Error:=True; ErrorMessage:=E.Message; end; end; IdFTP.Disconnect; IdFTP.Free; Вот как то так. P.S. Не верно написал путь для отправки. Исправил AFilePathRemote:='ftp://192.168.0.150/Download/'; на AFilePathRemote:='/Download/';
- 17 ответов
-
- сетевые ресурсы
- сетевая папка
- (и ещё 2 )
-
Давайте определимся что из себя представляет ваш "Серверный ПК". Операционная система? Если у вас к нему доступ? Можете ли вы управлять им по своему усмотрению?
- 17 ответов
-
- сетевые ресурсы
- сетевая папка
- (и ещё 2 )
-
Добавлю что есть десяток других, менее затратных способов выполнить вашу задачу. Начиная от загрузки по HTTP или FTP, заканчивая использованием облачных хранилищ.
- 17 ответов
-
- сетевые ресурсы
- сетевая папка
- (и ещё 2 )
-
В Андроид нет встроенных средств работы по протоколу NetBIOS/NetBEUI. Вам придется реализовать его самостоятельно с нуля.
- 17 ответов
-
- сетевые ресурсы
- сетевая папка
- (и ещё 2 )
-
Я думаю тут вы самый опытный по вопросу UWP-приложений ? Так что маловероятно кто то поможет. Может стоит задать этот вопрос на англоязычном форуме Эмбаркадеро? Мне эта тема тоже очень интересна, даже купил у Микрософта сертификат разработчика, но руки не доходят заняться. Очень бы хотелось от вас увидеть статью по размещению приложений в Microsoft Store. С пошаговыми инструкциями и скриншотами. Заранее благодарю!
-
Вот может кто из гуру сделает дельфи обертку для кода https://developer.android.com/reference/android/app/Activity#dispatchKeyEvent(android.view.KeyEvent) У меня ума не хватает.
-
Создатели FMX решили что таких кнопок не бывает. Поэтому перехватить их не просто. Я когда то начинал разбираться, но плюнул. Попробуйте запустить отладку на устройстве и пошагово может найдете где эти кнопки режутся в недрах FMX. А еще можно читать поступающие данные непосредственно с устройства ввода, нужно только найти нужное, они в папке /dev/*
-
Тогда посмотрите какие разрешения вы устанавливаете приложению (Your app uses hardware features (such as a touchscreen or camera) that are not available on TV) . Может вы требуете что то, что нет физически на приставке.
-
unit SharedGlobals; interface const ConstMyConstant = 30; type TMyType = record AValue : String; end; var MyVariable: Boolean=False; function MyFunction(AValue : String) : String; implementation function MyFunction(AValue : String) : String; begin end; end. И использование этого: unit Unit1; interface uses SharedGlobals, System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } АMyType : TMyType; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin АMyType.AValue:=ConstMyConstant; MyFunction(АMyType.AValue); end; end.