Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Нужен компонент для Delphi 7


Автор: EKoshelev 18.9.2012, 21:48
Здравствуйте.

Очень хотелось бы найти компонент, реализующий циферблат и стрелку. Сейчас всё это реализовано на TImage, но такая реализация вызывает ошибку с Canvas'ом (сейчас не вспомню точно текст). Вероятнее всего во время отрисовки приходит по сетке пакет и возинкает какой-то конфликт. Где-то читал, что такое вроде бы возможно. Пробовал кидать отрисовку в поток - не помогло.

Надеюсь, что если найти компонент, который бы отрисовывал то же самое, но не на TImage, то проблема будет устранена.

Jedi пожалуйста не предлагайте, т. к. у меня уже стоит одна версия, старая, в ней нет того, что нужно, а менять на новую я её не буду, т. к. на неё в текущей версии программы уже многое завязано.

Короче, посоветуйте пожалуйста какой-нибудь компонентик.

Заранее спасибо.

Автор: kami 18.9.2012, 22:15
http://www.torry.net/pages.php?id=295

Автор: kami 18.9.2012, 22:34
Цитата(EKoshelev @  18.9.2012,  21:48 Найти цитируемый пост)
Пробовал кидать отрисовку в поток - не помогло.

Ага. Нельзя к vcl обращаться из доп.потоков.
Цитата(EKoshelev @  18.9.2012,  21:48 Найти цитируемый пост)
Вероятнее всего во время отрисовки приходит по сетке пакет и возинкает какой-то конфликт.

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

Возможно, что сторонний компонент не поможет из-за тех же проблем. Ведь в любом случае он будет использовать Canvas для отрисовки себя.

Автор: EKoshelev 19.9.2012, 08:58
kami, Ну а как же этого можно избежать? Прога рисует себе, а тут пакет приходит ни с кем не согласуясь.

Автор: Rennigth 19.9.2012, 09:04
EKoshelev, Ну Вы покажите отрисовку своего компонента, может чем поможем. А то гадаем на кофейной гуще.

Автор: EKoshelev 19.9.2012, 09:38
Rennigth, Это не компонент, а набор процедур, написанных не очень понятно (и не мной). Всё рисование идет на TImage, и осуществляется стандартными операциями: рисование линий, дуги и вывод текста (циферблат с цифрами и стрелка).

Всю эту кашу сюда вываливать не охота, т. к. ещё после моих попыток его править там вообще нифига не понять. И имена переменных не информативные.

Автор: Rennigth 19.9.2012, 09:51
EKoshelev, Компонент то тикает сам, или по сети? Я имею ввиду синхронизацию с Вашим неким серваком он как делает?

Автор: kami 19.9.2012, 09:51
Цитата(EKoshelev @  19.9.2012,  08:58 Найти цитируемый пост)
Прога рисует себе, а тут пакет приходит ни с кем не согласуясь.

Ну и пускай приходит. Если приход никаким образом не отражается на отрисовке, то это не страшно. А если отражается, то должно отражаться в пределах основного потока.
Нужно больше конкретики.
1. Прием пакета производится в основном потоке или нет?
2. Принятие пакета каким образом может отражаться на визуальных компонентах? (к примеру - пакет парсится и что-то там выводится на экран).
3. Используется ли в сетевом обмене что-то типа Application.ProcessMessages, Sleep и т.п.?

Автор: Rennigth 19.9.2012, 09:53
Цитата(kami @  19.9.2012,  09:51 Найти цитируемый пост)
Application.ProcessMessages, Sleep

ни дай бог... при сетевом обмене...

Автор: kami 19.9.2012, 09:54
Кстати, в своих предположениях я гадаю на кофейной гуще, исходя из Вашего
Цитата(EKoshelev @  18.9.2012,  21:48 Найти цитируемый пост)
Вероятнее всего во время отрисовки приходит по сетке пакет и возинкает какой-то конфликт.


Добавлено через 2 минуты и 28 секунд
Цитата(Rennigth @  19.9.2012,  09:53 Найти цитируемый пост)
ни дай бог... при сетевом обмене...

При создании своего первого большого проекта у меня так и было. И даже работало smile
Сейчас я даже в код тех компонентов не хочу смотреть - инфаркт хватит smile 

Автор: Rennigth 19.9.2012, 10:54
Цитата(kami @  19.9.2012,  09:54 Найти цитируемый пост)
Сейчас я даже в код тех компонентов не хочу смотреть - инфаркт хватит smile  

 smile Мне легче, у меня хард сдох со всеми старыми сорсами  smile 

Автор: EKoshelev 19.9.2012, 11:12
Rennigth, Сам. Синхронизации никакой.


kami, 
1. Да, приём пакета в основном потоке.
2. Да, именно так, парсится и выводится. Собственно циферблат тоже инструмент отображения всякого такого барахла.
3. Нет, Application.ProcessMessages, Sleep не используется.

Автор: kami 19.9.2012, 11:26
В этом случае, мое имхо - кривая реализация часиков. Ставьте какой-нибудь компонент по приведенной выше ссылке и используйте на здоровье. Основной поток основному потоку не помешает. По крайней мере без использования ProcessMessages я с таким не сталкивался smile

Автор: Rennigth 19.9.2012, 11:28
EKoshelev, Ну покажи хоть что за сетевой обмен(или сам проанализируй). Если честно, информации мало...

Добавлено через 2 минуты и 42 секунды
Цитата(EKoshelev @  18.9.2012,  21:48 Найти цитируемый пост)
вызывает ошибку с Canvas'ом

Кстати, все же, что за ошибка?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)