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

Пользователи
  • Публикаций

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

  • Посещение

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

    47

Весь контент Евгений Корепов

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

    Не работает OverWrite в Deployment

    Или в среде, меню Run, Parameters, поле Parameters - добавьте туда -cleaninstall, при запуске на устройстве будет производиться чистая установка.
  2. Евгений Корепов

    скачать файл

    Ну а в тему - если это винда, то можете попробовать открыть ссылку на файл с помощью 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 не подскажу...
  3. Евгений Корепов

    скачать файл

    Надо отвечать 42 😉 https://ru.wikipedia.org/wiki/Ответ_на_главный_вопрос_жизни,_вселенной_и_всего_такого А автору топика совет - хотите получить ответ, задавайте вопросы правильно и подробно. Какая платформа? Что такое "стандартный загрузчик"? И так далее...
  4. Евгений Корепов

    System.Net.Socket.TSocket

    Сейчас только увидел в тексте " и для Android", сорри. Вы кусок кода отправки/получения покажите, может кто увидит в чем проблема.
  5. Евгений Корепов

    System.Net.Socket.TSocket

    Выдернул из рабочего проекта кусок, надеюсь вам поможет. Процедура 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.
  6. Евгений Корепов

    SendCommandWithResponse

    Посмотрите в идущих в комплекте примерах: Тут \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 позволяющий точно его идентифицировать.
  7. Евгений Корепов

    Регулярное выражение для сайта...

    Может стоит забить на парсинг html, а использовать специально созданный для таких целей rss интерфейс https://zadolba.li/rss ? Там вам все отдается в xml и чудесно раскладывается по полочкам штатными средствами
  8. Евгений Корепов

    NetHttpClient vs idHttp

    Я уперся рогом и все таки смог найти решение для вас. Гугль любит разработчиков, и обычно оставляет им возможность пользоваться сервисами бесплатно. И в этот раз чутьё не подвело. Вот решение: 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.
  9. Евгений Корепов

    NetHttpClient vs idHttp

    Вот сделал аналог на 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
  10. В это операционке уже есть встроенный FTP сервер. Кривой, но работать будет. Включить его и настроить очень просто.
  11. Вот, по моему мнению, самый просто и быстрый способ: Устанавливаете на сервере 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/';
  12. Давайте определимся что из себя представляет ваш "Серверный ПК". Операционная система? Если у вас к нему доступ? Можете ли вы управлять им по своему усмотрению?
  13. Добавлю что есть десяток других, менее затратных способов выполнить вашу задачу. Начиная от загрузки по HTTP или FTP, заканчивая использованием облачных хранилищ.
  14. В Андроид нет встроенных средств работы по протоколу NetBIOS/NetBEUI. Вам придется реализовать его самостоятельно с нуля.
  15. Я думаю тут вы самый опытный по вопросу UWP-приложений 🙂 Так что маловероятно кто то поможет. Может стоит задать этот вопрос на англоязычном форуме Эмбаркадеро? Мне эта тема тоже очень интересна, даже купил у Микрософта сертификат разработчика, но руки не доходят заняться. Очень бы хотелось от вас увидеть статью по размещению приложений в Microsoft Store. С пошаговыми инструкциями и скриншотами. Заранее благодарю!
  16. Евгений Корепов

    почему компилятор ругаетс

    Заметил что у подсветки особенно активно съезжает крыша если в листинге есть вызовы анонимных процедур. Там вообще все в гирлянду превращается. А компилятор при этом говорит что все хорошо.
  17. Евгений Корепов

    AndroidTV

    Вот может кто из гуру сделает дельфи обертку для кода https://developer.android.com/reference/android/app/Activity#dispatchKeyEvent(android.view.KeyEvent) У меня ума не хватает.
  18. Евгений Корепов

    AndroidTV

    Создатели FMX решили что таких кнопок не бывает. Поэтому перехватить их не просто. Я когда то начинал разбираться, но плюнул. Попробуйте запустить отладку на устройстве и пошагово может найдете где эти кнопки режутся в недрах FMX. А еще можно читать поступающие данные непосредственно с устройства ввода, нужно только найти нужное, они в папке /dev/*
  19. Евгений Корепов

    AndroidTV

    Тогда посмотрите какие разрешения вы устанавливаете приложению (Your app uses hardware features (such as a touchscreen or camera) that are not available on TV) . Может вы требуете что то, что нет физически на приставке.
  20. 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.
  21. Евгений Корепов

    AndroidTV

    Добавлю. Есть ТВ-приставки просто с андроидом, а есть приставки с AndroidTV. В первом случае никаких проблем не возникает. Во втором случае - Андрей Ефимов уже подсказал. Если решите публиковать приложение для андроид тв, то вот ответ гугля мне:
  22. Евгений Корепов

    RESTRequest отправка данных со спец. символами

    '%3D' вместо "=", '%26' вместо "&" - это стандартная методика отправки данных, называется url encoding. Принимающая сторона производит обратный процесс url decoding. Это нормальный процесс экранирования спецсимволов для HTTP протокола. Если вы не хотите использовать encoding (хотя в ContentType := 'application/x-www-form-urlencoded' вы утверждаете обратное), по используйте опцию poDoNotEncode в опциях параметра (http://docwiki.embarcadero.com/Libraries/Tokyo/en/REST.Types.TRESTRequestParameterOption) А лучше используйте штатный THTTPClient (System.Net.HTTPClient) и будет счастье, потому как TRest, рожденный в недрах безумия Эмбы, преподнесет вам не мало неприятных сюрпризов.
  23. Евгений Корепов

    idtcpclient и текст

    Если вы хотите передавать данные не тронутыми, то используйте бинарную передачу. А вообще \t это общепринятый символ экранирования табуляции (символа с кодом 9) - вы его как раз и передаете. Можете на выходе делать замену \n на chr(9)
  24. Евгений Корепов

    не создается открытый порт на TCP

    Ну значит точно в биндинге дело, делайте вот так: FIdTCPServer.Bindings.Clear; with FIdTCPServer.Bindings.Add do begin IP:='0.0.0.0'; Port:=ATCPPort; end;