<?xml version="1.0"?>
<rss version="2.0"><channel><title>RTL &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x43E;&#x432;</title><link>https://fire-monkey.ru/forum/281-rtl/</link><description>RTL &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x43E;&#x432;</description><language>ru</language><item><title>THTTPClient &#x44D;&#x43C;&#x443;&#x43B;&#x44F;&#x446;&#x438;&#x44F; &#x441;&#x438;&#x43D;&#x445;&#x440;&#x43E;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x438;</title><link>https://fire-monkey.ru/topic/7749-thttpclient-%D1%8D%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8/</link><description><![CDATA[<p>
	Добрый день, вопрос от newbie<br /><br />
	В процессе портирования приложения с винды планирую эмулировать синхронность вызовов THTTPClient примерно таким образом - см. под спойлер ... (использовать события пока не хочу)<br />
	Под виндой код работает без ошибок, под андроидом на вызове <em>LAsyncResult.AsyncWaitEvent.WaitFor</em> получаю ошибку <strong>Activity not found, maybe you are in a service.</strong><br />
	Подскажите, пожалуйста, что я делаю не так ?
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Спойлер</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode prettyprint lang-c prettyprinted"><span class="pln">fClient </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">THTTPClient</span><span class="pun">.</span><span class="typ">Create</span><span class="pun">;</span><span class="pln">
fClient</span><span class="pun">.</span><span class="typ">AllowCookies</span><span class="pln"> </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">;</span><span class="pln">
fClient</span><span class="pun">.</span><span class="typ">HandleRedirects</span><span class="pln"> </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">True</span><span class="pun">;</span><span class="pln">
fClient</span><span class="pun">.</span><span class="typ">Accept</span><span class="pln"> </span><span class="pun">:=</span><span class="pln"> </span><span class="str">'application/json'</span><span class="pun">;</span><span class="pln">
fClient</span><span class="pun">.</span><span class="typ">ContentType</span><span class="pln"> </span><span class="pun">:=</span><span class="pln"> </span><span class="str">'application/json'</span><span class="pun">;</span><span class="pln">
fClient</span><span class="pun">.</span><span class="typ">AcceptEncoding</span><span class="pln"> </span><span class="pun">:=</span><span class="pln"> </span><span class="str">'*/*'</span><span class="pun">;</span><span class="pln">
fClient</span><span class="pun">.</span><span class="typ">AcceptCharSet</span><span class="pln"> </span><span class="pun">:=</span><span class="pln"> </span><span class="str">'utf-8'</span><span class="pun">;</span><span class="pln">
</span><span class="pun">...</span><span class="pln">
</span><span class="typ">LAsyncResult</span><span class="pln"> </span><span class="pun">:=</span><span class="pln"> fClient</span><span class="pun">.</span><span class="typ">BeginPost</span><span class="pun">(</span><span class="typ">LUrl</span><span class="pun">,</span><span class="pln"> </span><span class="typ">LRequest</span><span class="pun">);</span><span class="pln"> </span><span class="com">// LAsyncResult: IAsyncResult;</span><span class="pln">

</span><span class="typ">LAsyncResult</span><span class="pun">.</span><span class="typ">AsyncWaitEvent</span><span class="pun">.</span><span class="typ">WaitFor</span><span class="pun">(</span><span class="pln"> fCallTimeOut </span><span class="pun">);</span><span class="pln"> </span><span class="com">// !!! error</span><span class="pln">

</span><span class="typ">LResponse</span><span class="pln"> </span><span class="pun">:=</span><span class="pln"> </span><span class="typ">THTTPClient</span><span class="pun">.</span><span class="typ">EndAsyncHTTP</span><span class="pun">(</span><span class="pln"> </span><span class="typ">LAsyncResult</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
</span><span class="com">// далее - работа с респонсом</span></pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	Embarcadero® RAD Studio 10.4 Version 27.0.40680.4203
</p>

<p>
	Xiaomi Redme Note 4x, Pixel Experience, Android 10
</p>
]]></description><guid isPermaLink="false">7749</guid><pubDate>Sat, 25 Dec 2021 17:26:03 +0000</pubDate></item><item><title>NetHTTPClient Compression?</title><link>https://fire-monkey.ru/topic/6480-nethttpclient-compression/</link><description><![CDATA[
<p>
	Здравствуйте.
</p>

<p>
	Как скачивать с сжатый трафик через GZip по средством NetHTTPClient я знаю. А как отправить данные на сервер в жатом GZip ввиде с помощью NetHTTPClient?
</p>
]]></description><guid isPermaLink="false">6480</guid><pubDate>Wed, 19 Feb 2020 15:37:00 +0000</pubDate></item><item><title>THTTPClient - &#x41E;&#x448;&#x438;&#x431;&#x43A;&#x430; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x430;</title><link>https://fire-monkey.ru/topic/5357-thttpclient-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0/</link><description><![CDATA[<p>
	Всем привет!
</p>

<p>
	Delphi XE8, отправляю обычный Get-запрос, используя THTTPClient
</p>

<pre class="ipsCode">
try
  	http:= THTTPClient.Create;
  	with http do begin
		AllowCookies:= true;
		Accept:= 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8';
		AcceptLanguage:= 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,de;q=0.6';
		UserAgent:= 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 OPR/56.0.3051.36';
  	end;
  	Stream:= TStringStream.Create('', TEncoding.UTF8);
  	http.Get('https://mysite.net', Stream);
  	Memo.Text:= Stream.DataString;
except on e:exception do
	Memo.Lines.Add(e.Message);
end;</pre>

<p>
	 
</p>

<p>
	В итоге получаю ошибку
</p>

<p>
	<strong>No mapping for the Unicode character exists in the target multi-byte code page</strong>
</p>

<p>
	Смотрел в Fiddler'е, страница в UTF-8, Content-Type: text/html; charset=UTF-8
</p>

<p>
	А самое странное то, что в фиддлере этот запрос из программы отмечается как отменённый... Вообще не понимаю, в чём дело, может кто сталкивался?
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="4247" src="https://fire-monkey.ru/applications/core/interface/js/spacer.png" alt="1.jpg.10fd1a3684b957dd33c619522dae14c9.jpg" data-src="https://fire-monkey.ru/uploads/monthly_2018_11/1.jpg.10fd1a3684b957dd33c619522dae14c9.jpg" width="322" data-ratio="48,45"></p>]]></description><guid isPermaLink="false">5357</guid><pubDate>Sun, 18 Nov 2018 14:40:59 +0000</pubDate></item><item><title>&#x412;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x430; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430; &#x441; &#x43F;&#x430;&#x440;&#x43E;&#x43B;&#x435;&#x43C; &#x432; Tzipfile?</title><link>https://fire-monkey.ru/topic/3058-vozmozhna-rabota-s-parolem-v-tzipfile/</link><description><![CDATA[<p>
	Коллеги, как то был задан вопрос в теме: 
</p>
<iframe data-embedcontent="" frameborder="0" src="https://fire-monkey.ru/applications/core/interface/index.html" data-embed-src="https://fire-monkey.ru/topic/2398-tzipfile/?do=embed&amp;embedComment=13535&amp;embedDo=findComment#comment-13535"></iframe>

<p>
	Так вот, вроде Берлин обещал работать с заправленными архивами zip. Поискал в доках, нашел только это упоминание про работу с разархивированием запароленных. <a href="http://docwiki.embarcadero.com/Libraries/Berlin/en/System.Zip.TZipFile.Extract#Extracting_Password-protected_Files" rel="external nofollow">тут</a>
</p>

<p>
	Но не слова про создание запароленных архивов. Есть ли инфа по этому поводу? Поисковые сервера не помогли(((
</p>]]></description><guid isPermaLink="false">3058</guid><pubDate>Wed, 03 Aug 2016 09:04:08 +0000</pubDate></item><item><title>Berlin HTTPClient: &#x441;&#x43B;&#x43E;&#x43C;&#x430;&#x43D;&#x44B; Cookies - &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x430; &#x432; &#x438;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x43E;&#x43C; &#x43A;&#x43E;&#x434;&#x435;</title><link>https://fire-monkey.ru/topic/3126-berlin-httpclient-slomany-cookies-oshibka-v-ishodnom-kode/</link><description><![CDATA[
<p>
	Начал переносить проекты из XE8 в Berlin, столкнулся с странным затыком в простеньком коде - делаем запрос на сайт, получаем куки, делаем post авторизацию, получаем редирект, если все хорошо, то октрываем страницу из header Location. Выяснилось что не смотря на HTTPClient.AllowCookies:=True, в HTTPResponse.Cookies всегда пустота. Пришлось копать исходники. Вот что обнаружилось в source\rtl\net\System.Net.HttpClient.pas:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">procedure THTTPClient.ExecuteHTTPInternal(const ARequest: IHTTPRequest; const AContentStream: TStream; const AResponse: IHTTPResponse);
var
  LRequest: THTTPRequest;
  LResponse: THTTPResponse;
  State: THTTPState;
  LExecResult: TExecutionResult;
  LClientCertificateList: TCertificateList;
  OrigSourceStreamPosition: Int64;
  OrigContentStreamPosition: Int64;
  OrigContentStreamSize: Int64;
  Status: Integer;
  LCookieHeader: string;
begin
  LResponse := AResponse as THTTPResponse;
  LRequest := ARequest as THTTPRequest;
  OrigSourceStreamPosition := 0;
  if LRequest.FSourceStream &lt;&gt; nil then
    OrigSourceStreamPosition := LRequest.FSourceStream.Position;

  if AContentStream &lt;&gt; nil then
  begin
    OrigContentStreamPosition := AContentStream.Position;
    OrigContentStreamSize := AContentStream.Size;
  end
  else
  begin
    OrigContentStreamPosition := 0;
    OrigContentStreamSize := 0;
  end;

  State := Default(THTTPState);
  LClientCertificateList := TCertificateList.Create;
  try
    while True do
    begin
      LRequest.DoPrepare;

      // Add Cookies
      if FCookieManager &lt;&gt; nil then
      begin
        LCookieHeader := FCookieManager.CookieHeaders(LRequest.FURL);
        if LCookieHeader &lt;&gt; '' then
          LRequest.AddHeader('Cookie', LCookieHeader);  // do not localize
      end;

      if not SetServerCredential(LRequest, LResponse, State) then
        Break;
      if not SetProxyCredential(LRequest, LResponse, State) then
        Break;

      if LRequest.FSourceStream &lt;&gt; nil then
        LRequest.FSourceStream.Position := OrigSourceStreamPosition;

      if LResponse &lt;&gt; nil then
      begin
        LResponse.FStream.Position := OrigContentStreamPosition;
        LResponse.FStream.Size := OrigContentStreamSize;
      end;

      LExecResult := DoExecuteRequest(LRequest, LResponse, AContentStream);
      case LExecResult of
        TExecutionResult.Success:
          begin
            if not SameText(LRequest.FMethodString, sHTTPMethodHead) then
              LResponse.DoReadData(LResponse.FStream);
            Status := LResponse.GetStatusCode;
            case Status of
              200:
                begin
                  Break;  // Если запрос удачен, то выходим из цикла
                end;
              401:
                begin
                  State.Status := InternalState.ServerAuthRequired;
                end;
              407:
                begin
                  State.Status := InternalState.ProxyAuthRequired;
                end;
              else
                begin
                  case Status of
                    301..304, 307:
                      if FHandleRedirects and (LRequest.FMethodString &lt;&gt; sHTTPMethodHead) then
                      begin
                        Inc(State.Redirections);
                        if State.Redirections &gt; FMaxRedirects then
                          raise ENetHTTPRequestException.CreateResFmt(@SNetHttpMaxRedirections, [FMaxRedirects]);
                      end
                      else
                        Break;
                  else
                  end;
                  State.Status := InternalState.Other;
                  if DoProcessStatus(LRequest, LResponse) then
                    Break;
                end;
            end;
          end;
        TExecutionResult.ServerCertificateInvalid:
          begin
            DoValidateServerCertificate(LRequest);
          end;
        TExecutionResult.ClientCertificateNeeded:
          begin
            DoNeedClientCertificate(LRequest, LClientCertificateList);
          end
        else
          raise ENetHTTPClientException.CreateRes(@SNetHttpClientUnknownError);
      end;

      if AllowCookies then  
        UpdateCookiesFromResponse(LResponse); // Вот эта, критически важная процедура, при Status=200 никогда не выполняется
    end;
 // После выхода из цикла попадаем сюда
    if LRequest.FSourceStream &lt;&gt; nil then
      LRequest.FSourceStream.Seek(0, TSeekOrigin.soEnd);
    LResponse.FStream.Position := OrigContentStreamPosition;
  finally
    LClientCertificateList.Free;
  end;
end;</span></pre>

<p>
	Т.е. разработчики исключили выполнение UpdateCookiesFromResponse(LResponse), которая помещает куки из ответа в HTTPClient.
</p>

<p>
	А вот код из XE8 который нормально работает с Cookies:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">function THTTPClient.ExecuteHTTPInternal(const ARequest: IHTTPRequest; const AContentStream: TStream): IHTTPResponse;
var
  LRequest: THTTPRequest;
  LResponse: THTTPResponse;
  State: THTTPState;
  LExecResult: TExecutionResult;
  LClientCertificateList: TCertificateList;
  OrigSourceStreamPosition: Int64;
  OrigContentStreamPosition: Int64;
  OrigContentStreamSize: Int64;
  Status: Integer;
  LCookieHeader: string;
begin
  Result := nil;
  LResponse := nil;
  LRequest := ARequest as THTTPRequest;
  OrigSourceStreamPosition := 0;
  if LRequest.FSourceStream &lt;&gt; nil then
    OrigSourceStreamPosition := LRequest.FSourceStream.Position;

  if AContentStream &lt;&gt; nil then
  begin
    OrigContentStreamPosition := AContentStream.Position;
    OrigContentStreamSize := AContentStream.Size;
  end
  else
  begin
    OrigContentStreamPosition := 0;
    OrigContentStreamSize := 0;
  end;

  State := Default(THTTPState);
  LClientCertificateList := TCertificateList.Create;
  try
    while True do
    begin
      LRequest.DoPrepare;

      // Add Cookies
      if FCookieManager &lt;&gt; nil then
      begin
        LCookieHeader := FCookieManager.CookieHeaders(LRequest.FURL);
        if LCookieHeader &lt;&gt; '' then
          LRequest.AddHeader('Cookie', LCookieHeader);  // do not localize
      end;

      if not SetServerCredential(LRequest, LResponse, State) then
        Break;
      if not SetProxyCredential(LRequest, LResponse, State) then
        Break;

      if LRequest.FSourceStream &lt;&gt; nil then
        LRequest.FSourceStream.Position := OrigSourceStreamPosition;

      if LResponse &lt;&gt; nil then
      begin
        LResponse.FStream.Position := OrigContentStreamPosition;
        LResponse.FStream.Size := OrigContentStreamSize;
      end;

      LExecResult := DoExecuteRequest(LRequest, LResponse, AContentStream);
      case LExecResult of
        TExecutionResult.Success:
          begin
            if not SameText(LRequest.FMethodString, sHTTPMethodHead) then
              LResponse.DoReadData(LResponse.FStream);
            Status := LResponse.GetStatusCode;
            case Status of
              200:
                begin
                  Break;
                end;
              401:
                begin
                  State.Status := InternalState.ServerAuthRequired;
                end;
              407:
                begin
                  State.Status := InternalState.ProxyAuthRequired;
                end;
              else
                begin
                  case Status of
                    301..304, 307:
                      if FHandleRedirects and (LRequest.FMethodString &lt;&gt; sHTTPMethodHead) then
                      begin
                        Inc(State.Redirections);
                        if State.Redirections &gt; FMaxRedirects then
                          raise ENetHTTPRequestException.CreateResFmt(@SNetHttpMaxRedirections, [FMaxRedirects]);
                      end
                      else
                        Break;
                  else
                  end;
                  State.Status := InternalState.Other;
                  if DoProcessStatus(LRequest, LResponse) then
                    Break;
                end;
            end;
          end;
        TExecutionResult.ServerCertificateInvalid:
          begin
            DoValidateServerCertificate(LRequest);
          end;
        TExecutionResult.ClientCertificateNeeded:
          begin
            DoNeedClientCertificate(LRequest, LClientCertificateList);
          end
        else
          raise ENetHTTPClientException.CreateRes(@SNetHttpClientUnknownError);
      end;

    end;
    if LRequest.FSourceStream &lt;&gt; nil then
      LRequest.FSourceStream.Seek(0, TSeekOrigin.soEnd);
    if AllowCookies then
      UpdateCookiesFromResponse(LResponse);  // Здесь все верно, процедура за пределами цикла и выполняется всегда когда нужно.
  finally
    LClientCertificateList.Free;
    Result := IHTTPResponse(LResponse);
  end;
end;</span></pre>

<p>
	А теперь вопрос: ну как так то? В продукте за 54 тысячи рублей сильно обидно исправлять такие косяки. Такое ощущение что разраб подрабатывал на стороне в проектах на php и забыл переключится на другой язык, там break прерывает работу аналога case и код работал бы правильно.
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">3126</guid><pubDate>Sat, 27 Aug 2016 09:20:28 +0000</pubDate></item><item><title>[THttpClient] &#x41A;&#x430;&#x43A; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x441; Cookie &#x432; HTTPClient?</title><link>https://fire-monkey.ru/topic/4674-thttpclient-%D0%BA%D0%B0%D0%BA-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C-%D1%81-cookie-%D0%B2-httpclient/</link><description><![CDATA[
<p>
	Подскажите как сохранить ,а потом загрузить куки в THTTPClient , как понимаю нужно работать с TCookieManager
</p>

<p>
	Сохранять пытаюсь так :
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">  cookies := aResponse.cookies.AsJSON(false);</span></pre>

<p>
	В cookies получаю 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">{\"Capacity\":4,\"Count\":3,\"List\":[{\"Name\":\"csrftoken\",\"Value\":\"Jljq2Sx5n9lXek4u4rri9L1zGBIExSzT\",\"Expires\":\"2019-01-06T18:41:36.854\",\"Domain\":\".i.instagram.com\",\"Path\":\"/\",\"Secure\":true,\"HttpOnly\":false},{\"Name\":\"rur\",\"Value\":\"PRN\",\"Expires\":\"1899-12-30T00:00:00.000\",\"Domain\":\".i.instagram.com\",\"Path\":\"/\",\"Secure\":false,\"HttpOnly\":false},{\"Name\":\"mid\",\"Value\":\"WlIjkQABAAF-JTqtAx_AdVdFxepj\",\"Expires\":\"2038-01-02T18:41:36.854\",\"Domain\":\".i.instagram.com\",\"Path\":\"/\",\"Secure\":false,\"HttpOnly\":false},{\"Name\":\"\",\"Value\":\"\",\"Expires\":\"1899-12-30T00:00:00.000\",\"Domain\":\"\",\"Path\":\"\",\"Secure\":false,\"HttpOnly\":false}],\"OnNotify\":null}</span></pre>

<p>
	Но как потом загрузить это обратно?
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">4674</guid><pubDate>Sun, 07 Jan 2018 15:19:58 +0000</pubDate></item><item><title>&#x427;&#x435;&#x440;&#x435;&#x437; NetHTTPClient &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x442;&#x44C; &#x444;&#x43E;&#x442;&#x43E;&#x433;&#x440;&#x430;&#x444;&#x438;&#x44E; &#x43D;&#x430; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;</title><link>https://fire-monkey.ru/topic/2992-cherez-nethttpclient-peredat-fotografiyu-na-server/</link><description><![CDATA[
<p>
	Вроде видел где-то пример передачи через NetHTTPClient файла (*.png или *.jpg) на сервер, но не могу вспомнить где.
</p>

<p>
	Помогите с кодом отправки файла.
</p>

<p>
	 
</p>

<p>
	PS. Инди компоненты не интересуют, не хочется их инспользовать
</p>
]]></description><guid isPermaLink="false">2992</guid><pubDate>Mon, 11 Jul 2016 13:39:51 +0000</pubDate></item><item><title>&#x421;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x43A;&#x443;&#x440;&#x441; &#x432;&#x430;&#x43B;&#x44E;&#x442; &#x447;&#x435;&#x440;&#x435;&#x437; THTTPClient</title><link>https://fire-monkey.ru/topic/2583-%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C-%D0%BA%D1%83%D1%80%D1%81-%D0%B2%D0%B0%D0%BB%D1%8E%D1%82-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-thttpclient/</link><description><![CDATA[
<p>
	Пытаюсь скачать XML с курсами валют с cbr.ru. Получаю ошибку Project raised exception class EEncodingError with message 'No mapping for the Unicode character exists in the target multi-byte code page'. Как исправить?
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">//aUrl = http://www.cbr.ru/scripts/XML_daily.asp

function GetXML(aURL: string): String;
var
  Http: THTTPClient;
  Ss: TStringStream;
begin
  Result:='';
  Http:=THTTPClient.Create;
  try
    Ss:=TStringStream.Create('', TEncoding.UTF8);
    Http.Get(aURL,ss);
    Result:=Ss.DataString; // тут ошибка
  except    
  end;
  Http.Free;
end;</span></pre>
]]></description><guid isPermaLink="false">2583</guid><pubDate>Fri, 08 Apr 2016 08:08:50 +0000</pubDate></item><item><title>NetHTTPClient &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x447;&#x430; &#x444;&#x430;&#x439;&#x43B;&#x430; &#x438; OnReceiveData</title><link>https://fire-monkey.ru/topic/3838-nethttpclient-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0-%D0%B8-onreceivedata/</link><description><![CDATA[
<p>
	Доброго времени суток всем.
</p>

<p>
	Хочу замерять скорость загрузки файла на сервер, но OnReceiveData отказывается вызываться. Код простенький
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create('Файл', fmOpenRead);

  NetHttpClient.Put('Ссылка', Stream);
end;</span></pre>

<p>
	При скачивании файла с сервера на компьютер через Get, коллбек OnReceiveData работает корректно, а вот с Put почему-то нет. Он вызывается только раз, перед окончанием загрузки и вызовом OnRequestCompleted.
</p>

<p>
	Он вообще должен вызываться или это нормальное поведение? По идее, если верить документации - должен: <a href="http://docwiki.embarcadero.com/Libraries/Berlin/en/System.Net.HttpClientComponent.TNetHTTPClient.Put" rel="external nofollow">http://docwiki.embarcadero.com/Libraries/Berlin/en/System.Net.HttpClientComponent.TNetHTTPClient.Put</a>
</p>

<p>
	Кто-нибудь пробовал у себя, работает этот коллбек при передачи файла, а то может быть я что-то не так делаю?
</p>
]]></description><guid isPermaLink="false">3838</guid><pubDate>Thu, 23 Feb 2017 14:41:45 +0000</pubDate></item><item><title>&#x41A;&#x442;&#x43E; &#x432;&#x44B;&#x437;&#x432;&#x430;&#x43B; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x434;&#x443;&#x440;&#x443;</title><link>https://fire-monkey.ru/topic/3957-%D0%BA%D1%82%D0%BE-%D0%B2%D1%8B%D0%B7%D0%B2%D0%B0%D0%BB-%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80%D1%83/</link><description><![CDATA[<p>
	Вопрос к знатокам Delphi<br />
	Можно ли, находясь в процедуре, узнать какая другая процедура ее вызвала.<br />
	Если ДА, то как?<br />
	Спасибо.
</p>]]></description><guid isPermaLink="false">3957</guid><pubDate>Thu, 23 Mar 2017 13:09:28 +0000</pubDate></item><item><title>TZipFile &#x43D;&#x430; MACOS - &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x43D;&#x44B;&#x439; unzip, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x43B;&#x43E;&#x441;&#x44C;</title><link>https://fire-monkey.ru/topic/3610-tzipfile-%D0%BD%D0%B0-macos-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D0%B9-unzip-%D1%87%D1%82%D0%BE%D0%B1%D1%8B-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0%D0%BB%D0%BE%D1%81%D1%8C/</link><description><![CDATA[
<p>
	Собственно зазипованый файл качается, разархивируется и все файлы помещаются в папку.
</p>

<p>
	Ну а дальше приложение не запускается, хотя:
</p>

<p>
	 - Настройки безопасности настроены на установку из любых мест<br />
	 - Встроенный архиватор разархивирует в папку и "из-под" него приложение запускается (до настроек безопасности просто выдавало ошибку "неизвестный автор" и "у вас настроено только на аппстор или известных авторов").<br />
	 - Разумеется при деплое приложения работают. Если их просто скопировать на флешку и потом закопировать обратно - тоже работают.
</p>

<p>
	Следовательно <strong>проблема при разархивировании программно</strong>. Что-то нужно добавить. Есть понимание что именно? 
</p>

<p>
	Сам нетривиальный код:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">var z: TZipFile;
begin
  try
    {$IFDEF MSWINDOWS}
     RenameFile(ParamStr(0),ExtractFileName(ParamStr(0)) + '.old');
     Application.ProcessMessages;
    {$ENDIF}
    SetLength(Result, 1);
    Result[0] := '';
    z := TZipFile.Create;
    z.Open(ZipFile, zmRead);
    z.ExtractAll(ExtractTo);
    Result := z.FileNames;
  finally
    z.Close;
    z.Free;
  end;
end;</span></pre>

<p>
	В архив кладу:
</p>

<p>
	 - .app взятый с мака (а по другому никак)<br />
	 - .entitlements<br />
	 - .DS_Store 
</p>

<p>
	В надобности последнего я сильно сомневаюсь.
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">3610</guid><pubDate>Sun, 25 Dec 2016 14:30:47 +0000</pubDate></item><item><title>&#x414;&#x432;&#x43E;&#x439;&#x43D;&#x43E;&#x439; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441; NetHTTPClient</title><link>https://fire-monkey.ru/topic/2747-%D0%B4%D0%B2%D0%BE%D0%B9%D0%BD%D0%BE%D0%B9-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81-nethttpclient/</link><description><![CDATA[
<p>
	Пытаюсь авторизоваться на локальном сервере:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">type
  TResponser = record
    Response: string;
    Code: integer;
  end;
...

procedure TFrmLogin.OnAuthEvent(const Sender: TObject;
  AnAuthTarget: TAuthTargetType; const ARealm, AURL: string; var AUserName,
  APassword: string; var AbortAuth: Boolean;
  var Persistence: TAuthPersistenceType);
var
  MyCredential: TCredentialsStorage.TCredential;
begin
  MyCredential := TNetHTTPClient(Sender).CredentialsStorage.FindAccurateCredential(AnAuthTarget, '');
  AUserName := MyCredential.UserName;
  APassword := MyCredential.Password;
end;

procedure TFrmLogin.OnValidateServerCertificate(
  const Sender: TObject; const ARequest: TURLRequest;
  const Certificate: TCertificate; var Accepted: Boolean);
begin
  Accepted:=true;
end;


function TFormLogin.LoginToServer(login,pass:String):TResponser;
var
  aResponse: IHTTPResponse;
  aResponser: TResponser;
  sStream: TStringStream;
  aHttpClient: TNetHTTPClient;
begin
  try
    aHTTPClient := TNetHTTPClient.Create(nil);
    aHTTPClient.OnAuthEvent:=OnAuthEvent;
    aHTTPClient.OnValidateServerCertificate:=OnValidateServerCertificate;
    aHTTPClient.CredentialsStorage.AddCredential
      (TCredentialsStorage.TCredential.Create(TAuthTargetType.Server,'',
      sURL, login, pass));
    aHTTPClient.AllowCookies  :=true;
    aHTTPClient.AcceptLanguage:='ru-RU;q=0.8,en-US;q=0.5,en;q=0.3';
    aHTTPClient.ContentType   :='text/json';
    aHTTPClient.AcceptCharset :='utf-8';
    aHTTPClient.Accept        :='text/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';

    try
      sStream := TStringStream.Create();
      try
        aResponse := aHttpClient.Get(sURL, sStream); 
        aResponser.Response:=sStream.DataString;
        aResponser.Code:=aResponse.StatusCode; // тут получаю код 200
        Result:=aResponser;
      except end;
    finally
      sStream.Free;
    end;
  finally
    aHttpClient.Free;
  end;
end;</span></pre>

<p>
	 
</p>

<p>
	После get cразу получаю код 200 (от ответного кода я решаю авторизован я или нет). Однако на сервер реально приходит 2 запроса: первый без basic authorization (и на него дается в ответ код 401), второй с basic authorization (на него уже в ответ код 200).
</p>

<p>
	Почему проходит два запроса, когда в программе я вижу только один? 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">2747</guid><pubDate>Wed, 18 May 2016 06:47:03 +0000</pubDate></item><item><title>&#x41E;&#x448;&#x438;&#x431;&#x43A;&#x430; &#x432; THTTPClient: Error querying headers: (87) &#x41F;&#x430;&#x440;&#x430;&#x43C;&#x435;&#x442;&#x440; &#x437;&#x430;&#x434;&#x430;&#x43D; &#x43D;&#x435;&#x432;&#x435;&#x440;&#x43D;&#x43E;</title><link>https://fire-monkey.ru/topic/2735-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%B2-thttpclient-error-querying-headers-87-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD-%D0%BD%D0%B5%D0%B2%D0%B5%D1%80%D0%BD%D0%BE/</link><description><![CDATA[
<p>
	При простом GET-запросе на эти URL:
</p>

<p>
	<a href="https://accounts.google.com/AddSession?hl=ru&amp;continue=https://www.google.com/%3Fgws_rd%3Dssl" rel="external nofollow">https://accounts.google.com/AddSession?hl=ru&amp;continue=https://www.google.com/%3Fgws_rd%3Dssl</a>
</p>

<p>
	<a href="https://accounts.google.com/Logout?hl=ru&amp;continue=https://www.google.com/%3Fgws_rd%3Dssl&amp;timeStmp=1463418874&amp;secTok=.AG5fkS8oPi4QjPRfLJn-g-Lx379zrG7jSg" rel="external nofollow">https://accounts.google.com/Logout?hl=ru&amp;continue=https://www.google.com/%3Fgws_rd%3Dssl&amp;timeStmp=1463418874</a>
</p>

<p>
	Возникает исключение:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		Цитата
	</div>

	<div class="ipsQuote_contents">
		<p>
			Exception class ENetHTTPException with message 'Error querying headers: (87) Параметр задан неверно'. Process HttpAsyncDownloadDemo.exe (8924)
		</p>
	</div>
</blockquote>

<p>
	В инди такой проблемы нет, она отдаёт контент HTML страницы, как и положено.
</p>

<p>
	Потестить можно через C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\RTL\HttpAsyncDownload
</p>

<p>
	Это очередной баг?
</p>

<p>
	(использую Delphi 10.1 Berlin)
</p>
]]></description><guid isPermaLink="false">2735</guid><pubDate>Tue, 17 May 2016 02:56:30 +0000</pubDate></item><item><title>NetHTTPClient &#x438; SSL</title><link>https://fire-monkey.ru/topic/2257-nethttpclient-%D0%B8-ssl/</link><description><![CDATA[
<p>Так как не получается работать с IdHTTP в сервисе, решил попробовать компонент NetHTTPClient. Бросил NetHTTPClient1 на форму.<br>
Хочу открыть адрес <a href="https://ya.ru" rel="external nofollow">https://ya.ru</a><br>
В папку \Win32\Debug положил libeay32.dll и ssleay32.dll (они рабочие, проверены с IdHTTP)<br>
 <br>
Код (пока тестирую на обычном приложении, а не в сервисе):</p>
<blockquote data-ipsquote="" class="ipsQuote"><div>
<p><span style="font-size:12px;">function TFormMain.GetResponse(aURL: string): String;</span><br>
var <br>
  Ss: TStringStream; <br>
begin <br>
  with NetHTTPClient1 do <br>
  begin <br>
    AllowCookies:=true; <br>
    try <br>
      Ss:=TStringStream.Create('', TEncoding.UTF8); <br>
      Get(aURL,ss); <br>
      Result:=Ss.DataString; <br>
    finally FreeAndNil(Ss); end; <br>
  end; <br>
end;<br>
 <br>
procedure TFormMain.NetHTTPClient1ValidateServerCertificate(<br>
  const Sender: TObject; const ARequest: TURLRequest;<br>
  const [Ref] Certificate: TCertificate; var Accepted: Boolean);<br>
begin<br>
  Accepted:=true;<br>
end;<br><br><br>
procedure TFormMain.BtnSendClick(Sender: TObject);<br>
var<br>
  Response:String;<br>
const<br>
  aURL='<a href="https://ya.ru" rel="external nofollow">https://ya.ru</a>';<br>
begin<br>
  TTask.Run(procedure<br>
    begin<br>
    try<br>
      Response:=GetResponse(aURL); // отправляю Get запрос<br>
      TThread.Synchronize(nil, procedure<br>
      begin<br>
        Memo.Lines.Add(Response);<br>
      end);<br>
    finally end;<br>
  end);<br>
end;</p>
</div></blockquote>
<p>Получаю access violation в System.Net.HTTPClient в строке 1965 </p>
<pre class="ipsCode prettyprint">
if (Result.Value.Chars[0] = '"') and (Result.Value[High(Result.Value)] = '"') then
</pre>
<p>видимо из-за того что Result.Value пустой. <br>
А если попробовать открыть <a href="https://mail.ru" rel="external nofollow">https://mail.ru</a> такого не происходит и страница нормально скачивается.<br>
 <br>
В чем проблема?</p>
]]></description><guid isPermaLink="false">2257</guid><pubDate>Mon, 01 Feb 2016 11:02:52 +0000</pubDate></item><item><title>TZipFile</title><link>https://fire-monkey.ru/topic/2398-tzipfile/</link><description><![CDATA[
<p>Привет, друзья. Есть задача, чтобы прога работала с Zip архивом. Но Zip архив должен быть либо запароленным либо сам файл зашифрованным.</p>
<p> </p>
<p>Как это реализовать? Можно ли установить пароль при создании файла в TZipFile?</p>
<p>Если нет, то какие есть способы шифрования файлов? (Желательно универсальные, для всех доступных ОС)</p>
]]></description><guid isPermaLink="false">2398</guid><pubDate>Mon, 07 Mar 2016 10:36:32 +0000</pubDate></item><item><title>OnValidateServerCertificate NetHTTPClient</title><link>https://fire-monkey.ru/topic/2310-onvalidateservercertificate-nethttpclient/</link><description><![CDATA[
<p>На NetHTTPClient пытаюсь назначить обработчик OnValidateServerCertificate:</p>
<p> </p>
<div>
<pre class="ipsCode prettyprint">
type
  TFrmMain = class(TForm)
   ...
    procedure OnAuthEvent(const Sender: TObject;
      AnAuthTarget: TAuthTargetType; const ARealm, AURL: string; var AUserName,
      APassword: string; var AbortAuth: Boolean;
      var Persistence: TAuthPersistenceType);
    procedure OnValidateServerCertificate(const Sender: TObject;
      const ARequest: TURLRequest; const [Ref] Certificate: TCertificate;
      var Accepted: Boolean);

function TFrmMain.GetResponse2(aURL: string): TResponser;
var
  Ss: TStringStream;
  NetHTTPClient2:TNetHTTPClient;
  Respon: IHTTPResponse;
begin
  try
    NetHTTPClient2:=TNetHTTPClient.Create(nil);
    NetHTTPClient2.OnAuthEvent:=OnAuthEvent;
    NetHTTPClient2.OnValidateServerCertificate:=OnValidateServerCertificat; // ошибка компиляции
    ...
    with NetHTTPClient2 do
    begin
       Ss:=TStringStream.Create('', TEncoding.UTF8);
       Respon:=Get(aURL,ss);
    end;

  finally
    NetHTTPClient2.Free;
  end;
end;


procedure TFrmMain.OnValidateServerCertificate(
  const Sender: TObject; const ARequest: TURLRequest;
  const [Ref] Certificate: TCertificate; var Accepted: Boolean);
begin
  Accepted:=true;
end;

</pre>
</div>
<div>
<div>Получаю ошибку: <strong>Incompatible types: 'Parameter lists differ'</strong></div>
</div>
<p> </p>
<p>Как правильно сделать?</p>
]]></description><guid isPermaLink="false">2310</guid><pubDate>Thu, 11 Feb 2016 14:23:30 +0000</pubDate></item><item><title>&#x41F;&#x430;&#x440;&#x441;&#x438;&#x43D;&#x433; &#x440;&#x435;&#x433;&#x443;&#x43B;&#x44F;&#x440;&#x43D;&#x44B;&#x43C;&#x438; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F;&#x43C;&#x438;</title><link>https://fire-monkey.ru/topic/2088-%D0%BF%D0%B0%D1%80%D1%81%D0%B8%D0%BD%D0%B3-%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%BC%D0%B8-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%D0%BC%D0%B8/</link><description><![CDATA[
<p>Добрый день!</p>
<p>При парсинге сайта (bash.im) и при использовании компонента TRegExpr и компиляции программы под Windows все работает нормально:</p>
<pre class="ipsCode prettyprint">
procedure TForm1.Button22Click(Sender: TObject);
var
  s: string;
  regexpr: TRegExpr;
  ss: TStringStream;
begin
  ss := TStringStream.Create('', TEncoding.GetEncoding(1251));
  try
    IdHTTP1.Get('http://bash.im/', ss);
    ss.Position := 0;
    s := ss.DataString;
  finally
    ss.Free;
  end;
 
  regexpr := TRegExpr.Create;
  try
    regexpr.Expression :=
      'class="date"&gt;(.*?)&lt;.*?class="id"&gt;(.*?)&lt;.*?class="text"&gt;(.*?)&lt;';
 
    if regexpr.Exec(s) then
      repeat
        mmoLetters.Lines.Add(regexpr.Match[1]);
        mmoLetters.Lines.Add(regexpr.Match[2]);
        mmoLetters.Lines.Add(regexpr.Match[3]);
      until not regexpr.ExecNext;
  finally
    regexpr.Free
  end;
 
end;</pre>
<p>Но при компиляции приложения под Android, выдает ошибку...</p>
<p> </p>
<p>Использую RegularExpressions из состава Delphi 10 Seattle:</p>
<pre class="ipsCode prettyprint">
uses
  System.RegularExpressions
...
procedure TfrmMain.ParsingBashNew(URLToPars: string);
var
  Matches: TMatchCollection;
  RegExpr: TRegEx;
  i: Integer;
  RegularExpressString : string;
begin
  mmoNew.Lines.Clear;
 
  HTMLText := IdHTTP1.Get(URLToPars);
 
  RegularExpressString := 'class="date"&gt;(.*?)&lt;.*?class="id"&gt;(.*?)&lt;.*?class="text"&gt;(.*?)&lt;';
 
  RegExpr := TRegEx.Create(RegularExpressString, [roIgnoreCase, roMultiLine]);
 
  Matches := RegExpr.Matches(HTMLText);
 
  if Matches.Count &gt; 0 then
    begin
      mmoNew.BeginUpdate;
        for i := 0 to Matches.Count -1 do
          begin
            mmoNew.Lines.Add(Matches.Item[i].Groups[1].Value);
            mmoNew.Lines.Add(Matches.Item[i].Groups[2].Value);
            mmoNew.Lines.Add(Matches.Item[i].Groups[3].Value);
            mmoNew.Lines.Add('==============================');
          end;
      mmoNew.EndUpdate;
    end;
end;</pre>
<p><span style="color:rgb(0,0,102);">То же самое регулярное выражение на работает. В чем может быть загвоздка? (если отбросить последнюю составляющую регулярки - '</span><span style="color:rgb(255,0,0);">.*?class="text"&gt;(.*?)&lt;'    - тоже все работает!</span><span style="color:rgb(0,0,102);">)</span></p>
]]></description><guid isPermaLink="false">2088</guid><pubDate>Sun, 13 Dec 2015 18:13:49 +0000</pubDate></item><item><title>&#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x43A;&#x43E;&#x43C;&#x43F;&#x43E;&#x43D;&#x435;&#x43D;&#x442;&#x430; TRegExpr &#x432; Android</title><link>https://fire-monkey.ru/topic/2067-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0-tregexpr-%D0%B2-android/</link><description><![CDATA[
<p><span style="color:rgb(0,0,0);font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:13.3333px;background-color:rgb(246,246,246);">Столкнулся с проблемой при использовании компонента </span>TRegExpr <span style="color:rgb(0,0,0);font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:13.3333px;background-color:rgb(246,246,246);">: при компиляции приложения под Windows все прекрасно работает.</span></p>
<p><span style="color:rgb(0,0,0);font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:13.3333px;background-color:rgb(246,246,246);">При компиляции под Android - 2 ошибки (Delphi 10 Seattle):</span><br><br><span style="color:rgb(0,0,0);font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:13.3333px;background-color:rgb(246,246,246);">[DCC Error] RegExpr.pas(105): E2003 Undeclared identifier: 'WideString'</span><br><span style="color:rgb(0,0,0);font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:13.3333px;background-color:rgb(246,246,246);">[DCC Fatal Error] RegExpr.pas(634): F2613 Unit 'Windows' not found.</span><br><br><span style="color:rgb(0,0,0);font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:13.3333px;background-color:rgb(246,246,246);">Как их обойти?</span></p>
]]></description><guid isPermaLink="false">2067</guid><pubDate>Tue, 08 Dec 2015 07:30:49 +0000</pubDate></item><item><title>&#x420;&#x435;&#x433;&#x443;&#x43B;&#x44F;&#x440;&#x43D;&#x44B;&#x435; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F;</title><link>https://fire-monkey.ru/topic/1868-%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F/</link><description><![CDATA[
<p>День добрый.</p>
<p>Раньше пользовался TRegExpr (<a href="http://regexpstudio.com/RU/TRegExpr/TRegExpr.html" rel="external nofollow">http://regexpstudio.com/RU/TRegExpr/TRegExpr.html</a>)</p>
<p>Попытался использовать его в Delphi 10 S для Android, посыпались ошибки компиляции RegExpr.pas (проблемы cо строковыми значениями).</p>
<p>Почитал статьи/форумы, узнал что есть встроенные регулярники System.RegularExpressions.pas, но якобы плохо работает с русским языком. Как на текущий момент?  Решена ли эта проблема?</p>
]]></description><guid isPermaLink="false">1868</guid><pubDate>Fri, 16 Oct 2015 13:24:01 +0000</pubDate></item><item><title>&#x41F;&#x435;&#x440;&#x435;&#x432;&#x43E;&#x434; &#x441;&#x442;&#x440;&#x43E;&#x43A;&#x438; &#x432; &#x43D;&#x438;&#x436;&#x43D;&#x438;&#x439; &#x440;&#x435;&#x433;&#x438;&#x441;&#x442;&#x440;</title><link>https://fire-monkey.ru/topic/1748-%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8-%D0%B2-%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B9-%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80/</link><description><![CDATA[<p>Вот вам задачка для самых маленьких. Как думаете - что будет записано в <strong>aT</strong>, если передать, например, строку: "<em>рОль, в которой винни-пух был на высоте</em>" после этого кода:</p>
<pre class="ipsCode prettyprint">
procedure TvicDBv1.FindAnswer(const Question: string);
var
  I: Integer;
  aQ, aA, aT: String;
begin
  aT := LowerCase(Question);
  for I := 0 to fFile.Count - 1 do
  Begin
  ...... 
  End;
end;
</pre>
<p>Лично я думал что будет записано "<em>роль, в которой винни-пух был на высоте</em>". Но ехидная RAD X выдает следующее:</p>
<p><img src="https://fire-monkey.ru/applications/core/interface/js/spacer.png" alt="3Ty9XYO.png" data-src="http://i.imgur.com/3Ty9XYO.png"></p>
<p> </p>
<p>Что за чудеса?</p>]]></description><guid isPermaLink="false">1748</guid><pubDate>Fri, 18 Sep 2015 11:18:48 +0000</pubDate></item></channel></rss>
