![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Короче, написал прогресс бар свой, там всякие градиенты переливаются, заполняются проценты, все дела. Когда начал юзать всё это в качестве примочки (а не основной проги) выяснилось, что ничего не отображается, рефреши не помогают, нефига не выводится, короче, серый прямоугольник.
То есть, я напрмер, вызывают прорисовку новых процентов (там круговой сектор на имаге и лабел с процентами) делаю рефреш всего подряд и имаги и формы и ничего не вижу в итоге. Подскажите как заставить всё это рисоваться! Плииииииз! -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 2 Всего: 89 |
Ошибка в 17й строке.
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
EKoshelev, значит нужно просто все правильно нарисовать. В обработчике OnPaint, например. Так сразу нельзя сказать в чем проблема нужно видеть код отрисовки.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Sunvas, Смышно было, я плакаль.
Alexeis, спасибо, брат. На ОнПаинт повесил там кой-чё и всё заработало. СПАСИБО!!! -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Продолжаю писать свой прогресс.
Предыдущий подход дал весьма куций рисалт. Для того, чтобы на баре было движение приходилось везде где ни попадя в основном коде вызывать метод бара двигающий по бару изображение (тем самым пользователь понимал, что процесс идёт). Хотя, если попадались какие-то долго играющие ф-ции бар на долго останавливался. Короче, люди мне рассказали что есть TThread. Нашел пример (в DRKB). Запустить основную прогу параллельно с потоком у меня не получилось (один мой товарищ предположил, что в дельфе это вообще невозможно). Зато получилось запустить параллельно два процесса (наследников от thреада). И то лишь в рамках примера. Когда начал применять всё это к своей задаче, снова упёрся. Вощем тема такая. Основная задача (Task) работает в одном процессе, прогресс (PB) - в другом. Оба наследники от TThread. Создаются так: PB := TSimplePB.Create(false); Task := TTask.Create(false); Вот как у обоих построены экзекуты:
ShowPB запускает прогресс-бар. Пока работает Слип(10000) прогресс бегает, как только начинает работать Syncronizy(MakeAct), бар встаёт. Короче, не знаю что делать, чтобы они собаки параллельно работали. Подскажите мне пожалуйста как надо!!!!!!!!!!! Или дайте наколку на бесплатный рабочий бар (чтобы просто градиент гнал в одну строну и на статус баре можно было писать чё щас делается)!!! И ещё, если не в лом, подскажите можно ли всё-таки в дельфи заставить параллельно работать основной код и поток? -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| ama_kid |
|
||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 9 Всего: 95 |
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||
|
|||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 5 Всего: 12 |
Да и весь код желательно посмотреть а так присоединяюсь к Sunvas
|
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
что то автор слегка путает понятие процесса и нити... -------------------- There are always someone smarter than you... |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
интересная задача.
в частности меня заинтересовала отрисовка прогресса из другого потока. вот накидал пример кода потока, который рисует прогресс. примитивно, но для примера сойдет:
проект с примером использования в аттаче Это сообщение отредактировал(а) MetalFan - 16.1.2008, 13:32 Присоединённый файл ( Кол-во скачиваний: 15 )
ThreadDrawProgress_out.rar 1,71 Kb-------------------- There are always someone smarter than you... |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Вот чё я понаписал на основе долбанины MetalFan'а.
На превый взгляд всё как надо, но после нажатия на Button1 нельзя двигать мышью. Если двинешь, движение на баре останавливается. Если в методе
раскоментировать слип, то работает стабильнее, но всё равно время от времени прогресс преостанавливается. У меня вопрос: "Что нужно дописать, чтобы прогресс не пропадал?" Это сообщение отредактировал(а) EKoshelev - 17.1.2008, 10:13 Присоединённый файл ( Кол-во скачиваний: 10 )
thread.rar 1,43 Kb-------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 9 Всего: 95 |
Ну хотя бы так (навскидку)
Это сообщение отредактировал(а) ama_kid - 17.1.2008, 11:15 -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
ama_kid, Пример работает конечно, только если после каждой строчки писать Application.ProcessMessages; то нафига вообще все эти нити с потоками?..
Я изо всех сил надеялся, что можно запустить его и не думать... до тех пор пока не потребуется его закрыть... Вот. -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
сам ты долбанина) НЕЛЬЗЯ взаимодействовать с VCL в осн.нити из дополнительной без синхронизации!!! если обратите внимание, то я написал не Parent := SomeForm, а ParentWnd := SomeFormHandle; в ином случае это приведет к непредвиденным глюкам в работе программы. ama_kid, а в твоем примере смысл использования доп.нити теряется Добавлено через 33 секунды
а подумать иногда тоже неплохо бывает -------------------- There are always someone smarter than you... |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 9 Всего: 95 |
EKoshelev, у тебя обработчик кнопки зацикливает приложение, тем самым не давая приложению получать сообщения об обновлении окон (да и вообще всех сообщений). Сам поток может не переставать крутиться, но его останавливает именно отрисовка окна Synchronize(UpdateProgress); - пока сообщения приложению не приходят - из этой процедуры не выйти (без этой команды поток продолжает работать в фоне нормально во время зацикливания)...
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| EKoshelev |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
MetalFan, На счёт подумать ты, безусловно, прав. Только у меня по этой теме иныф минимум. Я, собственно, за этим сюда и сунулся.
Ну и чё? Получается, что если у меня процедурь пашет... ну скажем... минуты три, то параллельно с ней без Application.ProcessMessages; ничего не запустить? Если так, то как раз получается
И вообще, ребята, имхо, тему я понятно сформулировал, а ответы всё типа "не плохо бы подумать", "я сделал штоп работало". Такое ощущение, что вы не помочь хотите, а "чисто поржать". Это сообщение отредактировал(а) EKoshelev - 17.1.2008, 16:49 -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |