49 / 25 / 2
Регистрация: 09.06.2008
Сообщений: 227
|
||||||||||||||||
1 | ||||||||||||||||
Одновременное использование (прокрутка) ScrollBox'a и динамическое размещение на нём компонентов28.11.2012, 22:29. Показов 1355. Ответов 7
Метки нет (Все метки)
На ScrollBox'e динамически создаю большое количество CppWebBrowser'ов, соответственно хочется, что бы пока они создаются пользователь уже мог прокручивать и смотреть те компоненты, которые уже загрузились.
В основном модуле я создаю компоненты, а для загрузки в них информации использую отдельный поток. И всё, вроде, замечательно, но получается такая штука: в тот момент, когда я прокручиваю ScrollBox, то, создаваемый в этот момент компонент оказывается сдвинут на прокрученную мной величину. Как этого избежать не пойму... Вот основной модуль (Unit1.cpp):
0
|
28.11.2012, 22:29 | |
Ответы с готовыми решениями:
7
Динамическое использование компонентов Запрещено одновременное размещение Одновременное размещение Директ и Бегун Разработка приложений с использованием стандартных и дополнительных компонентов. Динамическое создание компонентов. |
28.11.2012, 22:51 | 2 |
Работа в потоке идет исключительно с объектами VCL - без использования Synchronize() это бомба замедленного действия, с использованием же поток совершенно бесполезен, так как все будет выполняться в контексте главного потока.
А чтобы избежать смещений, попробуй для задания Top очередного контрола брать напрямую Top + Height предыдущего контрола.
1
|
49 / 25 / 2
Регистрация: 09.06.2008
Сообщений: 227
|
|
29.11.2012, 21:05 [ТС] | 3 |
"Бомба замедленного действия", я так понимаю из-за того, что поток может быть остановлен в какой-то неудачный момент. Так?
А если я заведомо его останавливать не собираюсь, то проблем никаких не будет? Top + Height - не помогло. Всё точно так же как и было.((
0
|
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
|
|
29.11.2012, 21:35 | 4 |
Я так тоже когда то думал, пока весь мой проект не разросся до внушительных величин, и когда я стал ловить непонятные вылеты. Потом все с синхронизацией переписывал Лучше сразу
1
|
30.11.2012, 00:41 | 5 |
Опасно, потому что VCL рассчитана на работу в основном потоке и только. Без синхронизации в любой момент может возникнуть конфликт доступа между основным и побочными потоками, что приведет к зависанию или вылету - совершенно ненужный риск.
1
|
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
|
|
30.11.2012, 00:45 | 6 |
Да не только VCL, вон в той же Visual Studio C# тебе из неглавного потока к форме вообще компилятор прикоснуться не даст. Сообщая, что "Нельзя изменять форму потоком, который её не создал".
0
|
49 / 25 / 2
Регистрация: 09.06.2008
Сообщений: 227
|
||||||
01.12.2012, 22:19 [ТС] | 7 | |||||
Кстати, при использовании Synchronize листание ScrollBox'a вообще стало недоступно, пока не выполнится задание потока полностью! Т.е. смысл самого потока вообще пропадает.(((
Добавлено через 3 минуты p.s. пробовал в цикле второго потока ставить Sleep(100) - не помогает. Все-равно время для работы первого потока не выделяется! И ошибиться то, вроде, негде:
0
|
01.12.2012, 22:38 | 8 |
Ну, вот зачем поток? Говорят же тебе - бесполезен он при работе исключительно с VCL. И точка.
Используй таймер - за один такт добавляй по одному элементу в scrollbox. И овцы сыты, и волки целы.
1
|
01.12.2012, 22:38 | |
01.12.2012, 22:38 | |
Помогаю со студенческими работами здесь
8
Размещение компонентов на LinearLayaut Размещение компонентов с разным приоритетом Размещение компонентов на форме (панели) Установка размеров компонентов и их размещение размещение компонентов Label на PictureBox одновременное использование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
|
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее:
На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
|
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|