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
Запустите его и просто измените вертикальный размер формы
Слава Богу, можно подлатать этот баг в событии OnResize
|
|
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. по собственному опыту:
- Глюков в Билдере нет, есть только руки которые загнуты не в ту сторону...
|
|