![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() На данный момент не нашел, как это делать правильно. Существующий вариант таков:
Код:
ImageWiring.AutoSize := true;//взято из интернета, ImageWiring: TImage ImageWiring.AutoSize := false;//взято из интернета ImageWiring.Width := trunc(ImageWiring.Width*(1+(ScrollBarScaleImage.Position - 50)/80)); // стартовое положение скроллбара - 50, при этом масштаб 1:1 ImageWiring.Height := trunc(ImageWiring.Height*(1+(ScrollBarScaleImage.Position - 50)/80)); ImageWiring.Stretch := True; ScrollBarScaleImage.Hint := '1:' + FloatToStr(RoundTo((1+(ScrollBarScaleImage.Position - 50)/80), -2));//показывает размер изображения после передвижения ползунка При подобном способе изображение дергается (перерисовка?) при изменении масштаба скроллбаром, получается некрасиво. Как добиться плавного изменения рисунка без подергиваний? И как показывать хинт скроллбара в процессе перемещения? Последний раз редактировалось diagnost, 02.08.2008 в 00:32. |
#2
|
|||
|
|||
![]() Задача далеко не банальна. Пробовал в ScrollBox поместить PaintBox и выводить изображение на PaintBox.Canvas. Обнаружил, что мерцание получается из-за изменения размера PaintBox при масштабировании картинки. Видимо, при изменении размера PaintBox сам PaintBox сначала перерисовывается с пустым канвасом цветом фона ScrollBox, и лишь после этого я канвас заполняю изображением при вызове процедуры типа Draw. Как это обойти, ума не приложу...
Код:
PaintBox.Height:= ViewH; //заполнение PaintBox фоном - вывод фона на экран, причина мерцания PaintBox.Width := ViewW;//-"- PaintBox.Canvas.Draw(0,0,ScaledBmp)//вывод изображения на экран. Последний раз редактировалось diagnost, 04.08.2008 в 22:25. |
#3
|
|||
|
|||
![]() А можно поинтересоваться? Если скроллбар используется для масштабирования, то чем скроллируется TImage когда масштаб изображения выходит далеко за видимые размеры окна?
Не забывайте делать резервные копии |
#4
|
|||
|
|||
![]() Скроллбоксом. Я помещал TImage в скроллбокс . Но, ИМХО, причина не в скроллбоксе, т.к. даже если изображение меньше скроллбокса и целиком в него влезает, оно подергивается при изменении масштаба.
Я полагаю, надо или найти способ запретить перерисовывать канвас при изменении размера PaintBox'а (если этот способ существует), или выводить поверх PaintBox'а изображение (типа нового слоя), в которое записывать нужные изменения канваса PaintBox'а (тут много проблем). Последний раз редактировалось diagnost, 04.08.2008 в 23:28. |
#5
|
|||
|
|||
![]() Обычно делают так. Масштаб изображения меняют какими-нибудь дополнительными управляющими компонентами: кнопками, "ползунком" (trackbar) и (или) мышой. А скроллбары (полосы внизу и справа) используют для прокрутки изображения чтоб просматривать любые части изображения.
ScrollBarScaleImage - это видимо какой-то свой компонент (типа trackbar'а), с помощью которого и меняется масштаб?. Не забывайте делать резервные копии Последний раз редактировалось san-46, 05.08.2008 в 00:08. |
#6
|
|||
|
|||
![]() Прошу прощения за то, что плохо объясняю.
Да, я вместо trackbar'а использую отдельный скроллбар.У меня так все и есть, как написал san-46. ScrollBarScaleImage - это обычный скроллбар в стороне от скроллбокса (не принадлежащий скроллбоксу). Я его использую для масштабирования рисунка в скроллбоксе. При перемещении ползунка на моем "выносном" "дополнительном" скроллбаре я изменяю размеры PaintBox, который лежит в скроллбоксе. При этом происходит мерцание изображения (из-за изменения размера PaintBox). Все работает (испробовал уже несколько разных способов, два описал в первом и втором сообщении этой темы), только мерцание некрасиво. Не могу избавиться. Пересмотрел много тем на этом форуме, проблему уже поднимали, решения не нашел. Последний раз редактировалось diagnost, 05.08.2008 в 00:59. |