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

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

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

  • Посещение

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

    45

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

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

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

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

    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.
  3. Евгений Корепов

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

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

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

    AndroidTV

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

    AndroidTV

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

    AndroidTV

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

    AndroidTV

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

    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, рожденный в недрах безумия Эмбы, преподнесет вам не мало неприятных сюрпризов.
  17. Евгений Корепов

    idtcpclient и текст

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

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

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

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

    Да, и следующим кодом idTCPserver1.Bindings.Add.Port:=5000; idTCPserver1.Bindings.Add.IP:='0.0.0.0'; вы создаете серверу два интерфейса для прослушки, один с портом 5000 и не определенным адресом, второй с адресом 0.0.0.0 и не определенным портом.
  20. Евгений Корепов

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

    Попробуйте проверять запустился ли сервер. К примеру так function TForm.CreateTCPServer(Var ATCPPort : Word) : Boolean; begin Result:=False; FIdTCPServer:=TIdTCPServer.Create; FIdTCPServer.OnExecute:=IdTCPServerExecute; FIdTCPServer.OnConnect:=IdTCPServerConnect; FIdTCPServer.Bindings.Clear; with FIdTCPServer.Bindings.Add do begin IP:='0.0.0.0'; Port:=ATCPPort; end; try FIdTCPServer.Active:=True; except Result:=False; end; if FIdTCPServer.Active then Result:=True; end;
  21. Евгений Корепов

    версия

    http://fire-monkey.ru/forum/177-fgx/
  22. Евгений Корепов

    OnMouseLeave для заполненного ListBox, Windows

    Этот подход прямее некуда. Думаете как контролы генерируют событие OnMouseLeave (Enter)? Точно не посредством колдовства.
  23. Евгений Корепов

    OnMouseLeave для заполненного ListBox, Windows

    Проверяйте не в событии, а в таймере. Координаты в глобальной переменной Screen.MousePos
  24. Евгений Корепов

    OnMouseLeave для заполненного ListBox, Windows

    Таймер, эдак милисекунд на 200. И в нем проверять координаты мыши, дальше уже арифметика.
  25. Аудитория никак не изменится. Ведь minSdkVersion="14" все равно перекроет и все старые устройства.