Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2013, 21:52   #31
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...пользуйте memo.doublebuffered в true.

Но вообще, складировать данные в визуальном компоненте плохой тон, память отжирает. Пишите данные в файл, а для отображения используйте последние 100-1000, на ваш выбор.
жалко что отладкой нельзя попользоватся пока я отлаживаю устройство данные отсылает. а без отладки немогу реализовать нормально фильтрацию строки (R 2 34; D 2 30 в 234 и 230.
а если сделать эмуляцию ком порта на теймере? и так отладить или есть более гуманные методы?
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 05.12.2013, 23:18   #32
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

хотя вроде как разобрался, сейчас в один мемо уголы поворота приходят в другое расстояние.
вот функции:
Цитата:
function TransToRange(var str: string): string;
var
i:integer;
begin
for I := 1 to length(str) do
begin
if (KeyRange=0) and (str[i]='R') then
begin
StrRange:='';
//StrRange:=StrRange+str[i];
KeyRange:=1;
end;

if (KeyRange=1) and (str[i]<>'R') and (str[i]<>'D') and (str[i]<>';') then
begin
StrRange:=StrRange+str[i];
end;

if (KeyRange=1) and (str[i]=';') then
begin
Result:=StrRange;
KeyRange:=0;
end;
end;
end;

function TransToDeg(var str2: string): string;
var
i:integer;
begin
for I := 1 to length(str2) do
begin
if (KeyDeg=0) and (str2[i]='D') then
begin
StrDeg:='';
//StrDeg:=StrDeg+str2[i];
KeyDeg:=1;
end;

if (KeyDeg=1) and (str2[i]<>'R') and (str2[i]<>'D') and (str2[i]<>';') then
begin
StrDeg:=StrDeg+str2[i];
end;

if (KeyDeg=1) and (str2[i]=';') then
begin
Result:=StrDeg;
KeyDeg:=0;
end;
end;
end;
Цитата:
procedure TMainForm.BComPort1RxChar(Sender: TObject; Count: Integer);
var str: ansistring;
ResivData,StrRange,StrDeg:string;
i,rt: Integer;
t: array[1..255] of ansiChar;
begin
str:= '';
//bc.ReadStr(s, count);

BComPort1.Read(t, count);
for i:= 1 to count do begin
str:= str + t[i];
ResivData:=ResivData+ t[i];
end;

StrRange:=TransToRange(ResivData);
StrDeg:=TransToDeg(ResivData);

if cbCRLF.Checked and (Str[Length(Str)] = #13) then // Добавление перевода строки
Str := Str + #10;
memo1.Text:=memo1.Text+str;

if StrRange<>'' then
memo2.lines.Add(StrRange);

if StrDeg<>'' then
memo3.lines.Add(StrDeg);
end;
может более грамотно можно было сделать? функции возвращают числа в String. если сделать чтоб возвращала в интегер начинает высакивать в мемо фигня всякая. какието левые числа.
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 09.04.2014, 16:18   #33
imv14
 
Регистрация: 23.02.2014
Сообщений: 4
По умолчанию

Всем добрый день. Подскажите пожалуйста. Есть устройство ардуино, которое посылает в ком порт по 10 байт. Как с помощью компоненты bc_port, правильно принимать байты и записывать их в массив.
Как я понял надо использовать BComPort1RxChar принимать по 10 байт, записывать их в массив, обрабатывать, затем следующие 10 байт снова перезаписывать в этот же массив?
С ардуино посылаю байтами (write), а не символами (print).
imv14 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
терминал Microlot gugushka Компьютерное железо 0 19.10.2012 11:31
Терминал Линукс! Necare Помощь студентам 3 20.04.2011 17:22
Операционная система - терминал rushei Операционные системы общие вопросы 3 05.08.2009 04:34
пробема кодировки при копировании текса через буф.обмена выдает иероглифы! Linx Общие вопросы Delphi 3 29.05.2007 23:12