I am using a TListbox component on a form for displaying debug data arriving over a serial line at 115200 baud. The data are a set of MQTT telegram texts which arrive in packets of about 40 lines each time (once per 10 seconds). I add them to the listbox as follows:
procedure THanSimulatorMain.OnRxData(Sender: TObject; const Data: TBytes); var len, oldlen: integer; DataTxt: AnsiString; begin len := Length(Data); //Incoming packet oldlen := Length(DataBuffer); SetLength(DataBuffer, oldlen + len); Move(Data[0], DataBuffer[oldlen], len); SetLength(DataTxt, Length(DataBuffer)); Move(DataBuffer[0], DataTxt[1], Length(DataBuffer)); lbxRxData.Items.Text := DataTxt; //Add the text to the list lbxRxData.ItemIndex := lbxRxData.Items.Count -1; //To make it visible end; DataBuffer is a global TBytes container where the incoming data are stuffed as they arrive (it grows during the session). You see that the buffer contains the complete log history from the start... I have noticed that after a while the display becomes very sluggish when data arrives and I think that is due to the way the component operates. Now I wonder if there is some way to do as I did when I worked in Delphi with TListView objects, where I could use the BeginUpdate and EndUpdate calls to make all screen updates wait until it was all put in place. This was MUCH faster! But I can not find a BeginUpdate on the TListBox object, only BeginUpdateBounds, which does not tell me much.... Any suggestions? -- Bo Berglund Developer in Sweden -- _______________________________________________ lazarus mailing list lazarus@lists.lazarus-ide.org https://lists.lazarus-ide.org/listinfo/lazarus