字符串连接不起作用

时间:2015-08-23 19:08:19

标签: string lazarus delphi

我创建了一个简单的类来存储从串口接收的数据,并在某些条件下将其拆分。我意识到这不是例外,所以我一步一步地重新编码,看看有什么不对。我发现这是一个字符串串联。这是该类的代码。失败的行是buffer = buffer + tail;

unit InBuffer;

{$mode objfpc}{$H+}

interface

uses
    Classes, SysUtils;

type
    TInBuffer = class
        private
            buffer: String;
            messages: TStrings;
        public
            constructor Create;
            destructor Destroy;
            procedure Add(tail: string);
            function getBuffer: String;
            function getLast: String;
            function DataAvailable: boolean;
    end;

implementation

constructor TInBuffer.Create;
begin
    buffer := '';
    messages := TStringList.Create;
end;

destructor TInBuffer.Destroy;
begin
    messages.Free;
    inherited Destroy;
end;

procedure TInBuffer.Add(tail: string);
begin
    buffer := buffer + tail;
end;

function TInBuffer.GetBuffer: String;
begin
    Result := buffer;
end;

function TInBuffer.GetLast: String;
begin
    if DataAvailable then
        begin
        Result := messages[0];
        messages.Delete(0);
        end;
end;

function TInBuffer.DataAvailable: boolean;
begin
    Result := messages.Count > 0;
end;

end.

我使用SdpoSerial作为通信内容。在OnRxData事件中,我有这段代码。

procedure TfrmMain.serOnRxData(Sender: TObject);
var
    msg: string;
begin
    msg := ser.ReadData;
    buff.Add(msg);
    log('Stored buffer: ' + buff.getBuffer);
    log('Receive trace: ' + msg);
end;

在日志中我看到"接收跟踪"中的正确数据,但是"存储缓冲区"中的行。始终是相同的(通信中收到的第一条消息)。我尝试使用CopyConcat之类的函数来构建缓冲区,但没有任何变化。

我可能做错了什么?

感谢。

修改: 按照Abelisto的建议,我将此代码放在按钮的onClick事件中

buff.Add('111');
buff.Add('222');
ShowMessage(buff.getBuffer);

显示的信息是正确的。因此传递来自串行端口的数据存在一些问题。它在日志中正确显示,但不在缓冲区中显示。有什么想法吗?

0 个答案:

没有答案