Текущий архив: 2002.12.26;
Скачать: CL | DM;
ВнизТакой процедурой вывожу данные из COM порта в Мемо Найти похожие ветки
← →
iNew (2002-12-11 09:09) [0]var LineData:string;
procedure TForm1.VaComm1RxChar(Sender: TObject; Count: Integer);
type
CharBuf = array[0..9999] of Char;
var
Buffer: ^CharBuf; Bytes, P: Integer;
begin
GetMem(Buffer, VaComm1.ReadBufUsed);
try
Fillchar(Buffer^, VAComm1.ReadBufUsed, 0);
Bytes := VaComm1.ReadBuf(Buffer^, Count);
if Bytes <> -1 then
begin
for P := 0 to Bytes - 1 do begin
case Buffer^[P] of
#0, #10,#13:
begin
if LineData<>"" then M2.Lines.Add(LineData);
LineData := "";
end
else
begin
LineData := LineData + CharBuf(Buffer^)[P];
end;
end; //case
end; //for do
end;
Application.ProcessMessages;
finally
FreeMem(Buffer);
end;
end;
Эта процедура есть событие на появление данных, но не могу понять почему данные выводятся в МЕМО с задержкой на одну сторку
P.S Использую набор компонент Async.
← →
apay (2002-12-11 09:22) [1]все правильно, как прогу пишешь, так она и пашет.
попробуй:
...
case Buffer^[P] of
#0, #10,#13:
if ( M2.Lines.Count > 0 ) and ( M2.Lines[M2.Lines.Count-1] <> "" ) then M2.Lines.Add("");
else begin
if ( M2.Lines.Count = 0 ) then M2.Lines.Add("");
M2.Lines[M2.Lines.Count-1] := M2.Lines[M2.Lines.Count-1] + CharBuf(Buffer^)[P];
end;
end; //case
...
← →
iNew (2002-12-11 09:31) [2]Всё работает, но получается как-то глючно:
Очень медлено и МЕМО весь мигает при добавлении.
← →
iNew (2002-12-11 10:55) [3]А ещё варианты?
← →
iNew (2002-12-15 04:53) [4]Ну ещё кто-нибудь?
← →
Slym (2002-12-15 06:31) [5]Ты в мемо сразу не пихай данные: сначала в локальную переменную типа TStringList, а уже потом перед концом процедуры вываливай накопленную инфу
← →
iNew (2002-12-16 06:15) [6]Ну вместо M2.Lines.Add(LineData) сделал MyList.add(LineData),
а в конце в цикле:
for i:=0 to MyList.Count-1 do
begin
M2.Lines.Add(MyList.Strings[i]);
end;
Результат тотже.
Страницы: 1 вся ветка
Текущий архив: 2002.12.26;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.006 c