Delphi 备忘录换行符

Delphi 备忘录换行符,delphi,indy-9,Delphi,Indy 9,我正在使用Indy 9的TIdMappedPortTCP构建一个工具,除了发送浏览器请求之外,还发送一个请求 我想使用字符串#$d#$A(换行符),将其作为%0D%0A 但正如你在图片中看到的那样,它工作得不好 我应该使用什么正确的代码来实现这一点 procedure TForm1.IdMappedPortTCP1Execute(AThread: TIdMappedPortThread); var memo:string; begin memo:= Memo1.text; if Co

我正在使用Indy 9的
TIdMappedPortTCP
构建一个工具,除了发送浏览器请求之外,还发送一个请求

我想使用字符串
#$d#$A
(换行符),将其作为
%0D%0A
但正如你在图片中看到的那样,它工作得不好

我应该使用什么正确的代码来实现这一点

procedure TForm1.IdMappedPortTCP1Execute(AThread: TIdMappedPortThread);
var
  memo:string;
begin
  memo:= Memo1.text;
  if Combobox4.text='Back' then begin
    AThread.NetData := AThread.NetData +memo  ;
    form2.Memo1.Lines.Add(AThread.NetData);

TIdMappedPortTCP
是一个多线程组件。
OnExecute
事件在工作线程的上下文中触发。您不能像前面所示那样直接访问
TMemo
TComboBox
控件。必须与UI线程同步,才能安全、正确地访问它们

尝试类似以下内容:

uses
  ..., IdSync;

type
  TGetForm1BackMemoTextSync = class(TIdSync)
  protected
    FText: string;
    procedure DoSynchronize; override;
  public
    class function GetText: string;
  end;

  TAddToForm2MemoSync = class(TIdSync)
  protected
    FText: string;
    procedure DoSynchronize; override;
  public
    class procedure AddToMemo(const S: string);
  end;

procedure TGetForm1BackMemoTextSync.DoSynchronize;
begin
  if Form1.ComboBox4.Text = 'Back' then
    FText := Form1.Memo1.Text;
end;

class function TGetForm1BackMemoTextSync.GetText: string;
begin
  with Create do
  try
    Synchronize;
    Result := FText;
  finally
    Free;
  end;
end;

procedure TAddToForm2MemoSync.DoSynchronize;
begin
  Form2.Memo1.Lines.Add(FText);
end;

class procedure TAddToForm2MemoSync.AddToMemo(const S: string);
begin
  with Create do
  try  
    FText := S;
    Synchronize;
  finally
    Free;
  end;
end;

//...

procedure TForm1.IdMappedPortTCP1Execute(AThread: TIdMappedPortThread);
var
  memo: string;
begin
  memo := TGetMemoBackTextSync.GetText;
  if memo <> '' then begin
    AThread.NetData := AThread.NetData + memo;
    TAddToForm2MemoSync.AddToMemo(AThread.NetData);
  //...
end;
procedure TGetForm1BackMemoTextSync.DoSynchronize;
begin
  if Form1.ComboBox4.Text = 'Back' then
  begin
    FText := StringReplace(Form1.Memo1.Text, sLineBreak, '', [rfReplaceAll]);
    FText := StringReplace(FText, '%0D%0A', #13#10, [rfReplaceAll]);
  end;
end;