Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.009 c
3-85841
Bishop
2002-12-06 23:01
2002.12.26
Как удалить удаленные записи


4-86209
Ixion
2002-11-12 01:20
2002.12.26
Как узнать, что класс окна потомок базового класса ?


4-86214
lesa
2002-11-11 18:20
2002.12.26
Как запустить DOS приложение в окне с помощью CreateProcess?


14-86148
vopros
2002-12-06 13:19
2002.12.26
Прикол


1-85898
Пономарев Андрей
2002-12-16 10:30
2002.12.26
создание расширений IDE




   Наверх