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

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

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

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

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

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

Цитата:
Сообщение от raxp Посмотреть сообщение
а это уже зависит как вы передаете. В буратине есть несколько методов передачи.
если передаю через println(если не путаю println переносит на новую строку?) в дуине тогда пробелы есть, но в мемо их все равно не видно если отображает все так:
Цитата:
memo1.Text:=memo1.Text+str;
но перенес происходит на другую строку автоматом.

если передаю через print и write то все без пробелов приходит, и функция которую я написал все нормально отображает.
так что на данном этапе все работает, и вроде как меня все устраивает но есть неприятное ощущения что реализовано коряво и можно было сделать лучше и грамотнее

Последний раз редактировалось azzzazzzelDEAN; 28.11.2013 в 22:41.
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 28.11.2013, 23:04   #22
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
реализуйте пакетную передачу с признаком окончания пакета, скажем пусть им будет #13. Когда на верхнем уровне встречаете этот символ, пакет принят.
а может еще нужен символ начала пакета? а то вдруг по какой либо причине он с середины пакет примет? #13 это как я понимаю переместить каретку. то есть на новую строку перейти(аналог ENTER)?
а по чему бы не сделать пакет просто в скобках? вот таких например - {...}
или [...].
просто хочется сделать более менее грамотно все
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 28.11.2013, 23:55   #23
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

снова проблема. функция которую я написал я работает нормально, записывает в EDIT расстояние, но как только я попытался записывать это расстояние в canvas.image(хотел чтоб чем дальше расстояние тем длиньше линия была, 1см=1пиксел) и progressbar, то вообще все перестает работать никуда нечего не приходит

Цитата:
procedure TMainForm.BComPort1RxChar(Sender: TObject; Count: Integer);
var str: ansistring;
st1,pak:string;
i: 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];
st1:=st1+ t[i];
end;

pak:=preobr(st1);
edit2.text:=RangeConvert(pak);
progressbar1.position:=strtoint(Ran geConvert(pak));
image4.Canvas.LineTo(strtoint(Range Convert(pak)),0);

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

memo1.Text:=memo1.Text+str;
memo2.lines.Add(str);
end;
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 29.11.2013, 01:24   #24
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
а по чему бы не сделать пакет просто в скобках? вот таких например - {...}
какие угодно можно... я использую $AA55 для промприменений

Цитата:
то вообще все перестает работать никуда нечего не приходит
догадываться об ваших обертках как?
Код:
preobr()
RangeConvert()
и вообще поменьше дергайте VCL (визуальные компоненты) в событиях работы с COM-портом.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.11.2013, 10:05   #25
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
догадываться об ваших обертках как?
Код:
preobr()
RangeConvert()
Цитата:
function preobr(var str: string): string;
var
i:integer;
com:string;
begin
for I := 1 to length(str) do
begin
if str[i]='D' then
begin
str1:='';
str1:=str1+str[i];
end;

if (str[i]<>' ') and (str[i]<>'D') and (str[i]<>';') then
begin
str1:=str1+str[i];
end;

if str[i]=';' then
begin
com:=str1+str[i];
end;
end;
Result:=com;
end;

function RangeConvert(var str: string): string;
begin
Result:=copy(str,2,(length(str)-2));
end;
только как мне кажется дело тут не в моих функциях,
может попробовать сделать отдельный поток(или прописать в таймере ) на отрисовку в канвасе?
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 29.11.2013, 13:21   #26
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...сделайте глобальную переменную, в нее в событии приема данных заносите ваше значение. В отдельном потоке или таймере отрисовуйте значение этой переменной.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.11.2013, 13:54   #27
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

как оказалось, косяк происходит когда из стринга перевожу в интеджер (stringtoint), когда так делаю на форме вообще ничего не происходит.
сейчас ресую на канве с помощью таймера и все норм преобразование строки провожу в том же таймере. изредка возникают ошибки потомучто не всегда может перевести строку в интеджер, думаю сделать проверку строки на наличее в ней только цифр.
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 29.11.2013, 14:44   #28
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
потомучто не всегда может перевести строку в интеджер
strtointdef()
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.11.2013, 20:47   #29
azzzazzzelDEAN
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
strtointdef()
спасиб даже не знал что такое есть
но обнаружил косяк еще один. когда memo сильно забито данными и я нажимаю memo.clear то вся прога зависает. это конечно же на работу не влияет но хотелось бы знать от чего это.
azzzazzzelDEAN вне форума Ответить с цитированием
Старый 29.11.2013, 21:43   #30
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...пользуйте memo.doublebuffered в true.

Но вообще, складировать данные в визуальном компоненте плохой тон, память отжирает. Пишите данные в файл, а для отображения используйте последние 100-1000, на ваш выбор.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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