Denis-ka

Вывод массива в StringGrid1

06.06.2012, 20:10. Показов 1227. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем. Прошу вашей помощи. Вообщем с COM порта вытаскиваю данные в массив unsigned char bufrd[BUFSIZE]. Данные выходят из EEPROM ATmega8. Первые 9-ть байт это серийник ключа iButton остальные 4-и это кол-во минут записанных, затем снова идет ключ и после кол-во минут.И так до конца массива. В memo1 вывожу без проблем, а вот в StringGrid не могу вывести в нужной последовательности.
Вот как должно выглядеть примерно.
< загружайте картинки на форум />



Сам код.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//главная функция потока, реализует приём байтов из COM-порта
DWORD WINAPI ReadThread(LPVOID)
{
 COMSTAT comstat;       //структура текущего состояния порта, в данной программе используется для определения количества принятых в порт байтов
 DWORD btr, temp, mask, signal; //переменная temp используется в качестве заглушки
 
 overlapped.hEvent = CreateEvent(NULL, true, true, NULL);   //создать сигнальный объект-событие для асинхронных операций
 SetCommMask(COMport, EV_RXCHAR);                               //установить маску на срабатывание по событию приёма байта в порт
 while(1)                       //пока поток не будет прерван, выполняем цикл
  {
   WaitCommEvent(COMport, &mask, &overlapped);                  //ожидать события приёма байта (это и есть перекрываемая операция)
   signal = WaitForSingleObject(overlapped.hEvent, INFINITE);   //приостановить поток до прихода байта
   if(signal == WAIT_OBJECT_0)                      //если событие прихода байта произошло
    {
     if(GetOverlappedResult(COMport, &overlapped, &temp, true)) //проверяем, успешно ли завершилась перекрываемая операция WaitCommEvent
      if((mask & EV_RXCHAR)!=0)                 //если произошло именно событие прихода байта
       {
        ClearCommError(COMport, &temp, &comstat);       //нужно заполнить структуру COMSTAT
        btr = comstat.cbInQue;                              //и получить из неё количество принятых байтов
        if(btr)                                     //если действительно есть байты для чтения
        {
         ReadFile(COMport, bufrd, btr, &temp, &overlapped);
         ReadFile(COMport, bufset, btr, &temp, &overlapped);      //прочитать байты из порта в буфер программы
         counter+=btr;                                              //увеличиваем счётчик байтов
         ReadPrinting();                              //вызываем функцию для вывода данных на экран и в файл
 
        
 
 
 
 
        }
       }
    }
  }
}
 
//---------------------------------------------------------------------------
 
//выводим принятые байты на экран и в файл (если включено)
void ReadPrinting()
{
 [B]Form1->Memo1->Lines->Add((char*)bufrd);  //выводим принятую строку в Memo[/B]
 
        
 
 
 Form1->StatusBar1->Panels->Items[2]->Text = "Всего принято " + IntToStr(counter) + " байт";    //выводим счётчик в строке состояния
 if(Form1->CheckBox3->Checked == true)  //если включен режим вывода в файл
  {
   write(handle, bufrd, strlen(bufrd)); //записать в файл данные из приёмного буфера
  }
 memset(bufrd, 0, BUFSIZE);         //очистить буфер (чтобы данные не накладывались друг на друга)
}
За ранее признателен за помощь.!!!
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.06.2012, 20:10
Ответы с готовыми решениями:

Поиск данных в StringGrid1 и вывод совпадений в StringGrid1
Добрый день! Делаю поиск данных в StringGrid1 и вывожу совпавшие с параметром поиска строки в StringGrid1: Параметр поиска от одного...

Вывод структур в StringGrid1 в виде таблицы
Всем доброго времени суток. Нужна помощь вот в таком вопросе: Есть какое-то количество структур в файле (data.txt лежит в папке с...

Stringgrid1->c++
Как задать ограничение на ввод только чисел в 1ячейке Stringgridа

1
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
06.06.2012, 22:47
я так понял:
ключ - 9 бит
кол-во секунд - 5 бит
хвост - 2 бита
и того 16 -> у тебя передается это в 2х байтах... у тебя стоит счетчик байт так выводи каждые 2 байта а не каждый байт
1. так же как выводишь в мемо запихни символы в переменную типа стринг и сделай её парсинг поэлементно
2. а еще проще выводи из этой строки при помощи SubString сраз в StringGrid.

(*) чтобы StringGrid не ограничивать в строках и ставить счетчик для определения строки лучше сделай самодобавление строки в StringGrid где номер последней строки является StringGrid1->ColCount-1 (количество всех строк -1 т.к. у тебя есть фиксированная)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2012, 22:47
Помогаю со студенческими работами здесь

StringGrid1 StringGrid2
Загружаю файл excel загружаю значения в массив и вывожу в StringGrid1. Как сделать чтобы можно было выбрать ячейки в StringGrid1 и...

StringGrid1 и Активные компоненты
Здравствуйте! Подскажите пожалуйста! Как сделать если StringGrid1 &quot;пустой&quot; то, например, Button1 неактивен, в противном случае,...

Перенос данных из StringGrid1 в StringGrid2
Приветствую вас. Есть вопрос значит, как перенести данные из StringGrid1 в StringGrid2? Вот у меня есть такой код: ...

Поиск StringGrid1 числа больше 3
Такая проблема не могу написать код для кнопки которая будет выбирать данные из StringGrid1 где отбираются числа которые больше 3, и...

Удаление одинаковых строк в StringGrid1
Как в StringGrid удалить абсолютно одинаковые строчки? Пробовал переделать найденный код для делфи на билдер, но не вышло..


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru