C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Проблема с динамическим созданием Page Control
Barma
Отправлено: 13.09.2006, 14:25


Ученик-кочегар

Группа: Участник
Сообщений: 1



Программа общается с com-портом. Если к com-порту подключено несколько определённых усторйств (для которых я и пишу программу), то PageControl динамически создаёт соответствующее количество TabSheet`ов.
Если подключено хотя бы одно устройство, то:
CODE

       TTabSheet       *Page;
       Page = new TTabSheet(Form1->PageControl1);
       Page->Name = "page1";
       Page->TabVisible = true;
       Page->PageControl = Form1->PageControl1;

Всё создаётся нормально. Но когда к этому коду добавлеяшь:

CODE
      Form1->PageControl1->ActivePage = Page;


Вся программа виснет и даже форма не двигается.

Пробовал создавать TabSheet`ы нажатием кнопки. Т.е. нажал кнопку и динамически создаются, например, пять закладок. Работает на ура.

Com-порт опрашивается в потоке . Если пришли данные, они анализируются и в соответсвии с ними, вызывается функция, которая должна создавать определённое количество закладок. Но программа виснет.

Создаётся впечатление, что проблема из-за потока. Но все остальные операции и функции в потоке выполняются корректно. Может кто подскажет что или натолкнёт на мысль?

Отредактировано Barma — 13.09.2006, 14:42
GoodWin
Отправлено: 14.09.2006, 10:46


Дежурный стрелочник

Группа: Участник
Сообщений: 50



VCL объекты нельзя вызывать из потока. Для обращения к параметрам компонентов vcl необходимо выводить данный поток в основной. Например в TThread есть такой метод как Synhronize , ей передаешь ссылку на функцию, данный метод вызывает передаваемую функцию в основном потоке , т.е в этой ф-ии можно вызывать vcl объекты

Вернуться в Вопросы программирования в C++Builder