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

 
Глюк стойки 6, Глюки здесь, все сюда!!!
Steam-x
Отправлено: 30.10.2003, 15:50


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

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



Привет Всем!
Я тут давеча столкнулся с одним глюком в Строителе №6.
Суть вот в чем:
1. создайте форму и прилепите на нее TImage и TTimer.
2. на событие таймера повесьте вывод линии на Канву Имеджа.
3. запустите приложение и любуйтесь.
Проблема в следующем:
В пятой версии на экране будет поле Имеджа и на нем линия, больше ничего происходить не будет.
В шестой поле Имеджа будет постоянно дергаться, у меня оно почему-то дергается.
Кто-нибудь объясните в чем прикол, и как его обойти, а то у меня прога вовсю использует ТИмедж. И на 6 версию я перейти не могу по выше указанной причине.

Все!
Успехов!
exp
Отправлено: 31.10.2003, 22:49


Мастер участка

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



Дарова, Stream-X

Тут вроде, так:

Каждый раз по выполнению таймера вызывается процедура, но таймер продолжает работать => будет выполнять эту процедуру еще и еще.

Вот имага и мигает.

Не знаю, как там пятерке, останавливается таймер после выполнения или нет, а в BCB6 я вешаю в конец процедуры OnTimer такую строчку:

[CODE] Timer1->Enabled=false;

Да, вроде не мигала. Попробуй:
[CODE] Image1->Canvas->LineTo(20,25);
Timer1->Enabled=false;

Да и, блин, подскажите ,пожайлуста, как вставлять куски кода?

Отредактировано exp — 31/10/2003, 23:55
exp
Отправлено: 31.10.2003, 23:05


Мастер участка

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



Да, я так понял, что это напрямую связано с твоим графиком.
Если это так, то могу предложить процедуру, кот. строит график любой непрерывной ф-ции на любом интервале.

Но у тебя, вроде, массив чисел. Поэтому можно попытаться использовать сплайнирование. Тогда у тебя будет функция для построения графика. Причем ты можешь прореживать с любой степенью точности, т. к. уже не будешь зависеть от конкретных результатов твоих замеров, а будешь иметь на руках только функцию.

Но этот вариант нужно использовать уже после получения данных. А в реальном времени это нереально.
+
Для сплайнирования (если нужно), могу подкинуть метод решения (сводится к решению системы линейных уравнений n*n);

Ну все.
Steam-x
Отправлено: 01.11.2003, 12:46


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

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



Привет!
Я тут прочитал первый ответ EXP.
Слушай, а как Ты снова запускаешь Таймер, мне он нужен постоянно работающий. И зачем его вообще останавливать, ну сработал таймер и всего делов, пусть ждет своего следующего вызова и ничего не делает.
В 5 ничего не мигает, а почему это в 6 не так я не знаю???
Все!
Успехов!
exp
Отправлено: 02.11.2003, 00:20


Мастер участка

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



Нифига, когда таймер отработал, он начинает считать время заново.
Получается, что ты нарисовал свою линию, но прошло время, и таймер снова её нарисовал, потому что не остановился.

Вот у тебя и мигает картинка из-за этих лишних прорисовок.

Если хочешь, чтоб таймер ждал и ничего не делал, нужно его вырубить.
Да, вообще-то строску Timer1->Enabled=false лучше писать в начале, потому что пока будет выполняться процедура по таймеру, он может сработать еще раз.

Ну все.

ЗЫ: про сплайнирование, я понял, не надо.
Steam-x
Отправлено: 05.11.2003, 12:27


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

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



Спасибо! Буду смотреть!
Все!
Успехов!
Doga
Отправлено: 26.07.2005, 11:59


Мастер участка

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



Лично мне известен глюк со Скроллбаром. Я заметил его ещё в BCB5. Ничего не изменилось и в следующей версии (BCB6). Но это просто кривая реализация компонента TScrollBar. Прилагаю демонстрационный пример: ScrollBarBAG.zip

Запустите его и просто измените вертикальный размер формы smile.gif

Слава Богу, можно подлатать этот баг в событии OnResize wink.gif

User Attached Image Скачать файл
ScrollBarBAG.zip


GIZMO
Отправлено: 26.07.2005, 12:06


Машинист паровоза

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



QUOTE (Steam-x @ 30/10/2003, 15:50)
Привет Всем!
Я тут давеча столкнулся с одним глюком в Строителе №6.
Суть вот в чем:
1. создайте форму и прилепите на нее TImage и TTimer.
2. на событие таймера повесьте вывод линии на Канву Имеджа.
3. запустите приложение и любуйтесь.
Проблема в следующем:
В пятой версии на экране будет поле Имеджа и на нем линия, больше ничего происходить не будет.
В шестой поле Имеджа будет постоянно дергаться, у меня оно почему-то дергается.
Кто-нибудь объясните в чем прикол, и как его обойти, а то у меня прога вовсю использует ТИмедж. И на 6 версию я перейти не могу по выше указанной причине.

Все!
Успехов!

Чтобы изображение не дергалось при частой перерисовке (напр. снимаешь показания с прибора и выводишь график) в Билдере 5, 6 и даже в Дельфи, VC++ используют т.н. внеэкранные битовые образы — картинку рисуют в памяти, а потом переносят на канву(контекст устройства). Как это делается в Билдере (в частности) можно посмотреть в $(BCB)\Examples\Controls\Perfgrap.cpp.

P.S. по собственному опыту:
- Глюков в Билдере нет, есть только руки которые загнуты не в ту сторону...

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