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 объекты |
|
|