![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Image со ScrollBar'ами [D7, WinXP]
lockheed_man © (2006-05-21 00:15:00)Доброго времени суток. Ув. Мастера не подскажите ли как организовать прокрутку изображения когда оно не влазит в свои рамки или рамки контейнера. Заранее спасибо.
lockheed_man (2006-05-23 17:51:00) [1]
> Между построением изображениея будет какй-то момент времени.
> Именно в этот момент и будет известны размеры.
Да, это конечно же вариант. Но если размер схемы будет превышать размеры экрана, тогда что? Ведь TImage не нарисует скролбары сам (хотя я это вариант не проверял)?
homm (2006-05-22 23:10:00) [2]
> Просто мне нужно нарисовать схему, размеры которой могут
> превышать границы контейнера.
В чем проблема, не пойму. Между построением изображениея будет какй-то момент времени. Именно в этот момент и будет известны размеры. Нужно их и задать как размеры имэйджа.
> Из-за перерисосовки TImage будут появляться артефакты по
> краям при скролле
Артефакты AFAIK другое. Есть двойная буферизация для контролов. Поищите по ключевым словам "WM_PAINT WM_ERASEBKGND homm Игорь Шевченко" в разделе API.
> Лучше обходиться вообще без TImage при работе с графикой.
Для каждого случая лучше выбирать средства индивидуально.
lockheed_man (2006-05-22 03:04:00) [3]Ну дело вообщето в том что я не про картинку как битмап имел в виду. Просто мне нужно нарисовать схему, размеры которой могут превышать границы контейнера. Вот как организовать такую прокрутку?
Efir (2006-05-21 15:51:00) [4]Из-за перерисосовки TImage будут появляться артефакты по краям при скролле. Лучше обходиться вообще без TImage при работе с графикой.
homm (2006-05-21 15:17:00) [5]
> [1] Efir (21.05.06 13:19)
А просто TImage поместить в TScrollBox, придав ему значение AutoSize := TRUE чем не способ?
Efir (2006-05-21 13:19:00) [6]Можно поступить так. Допустим, нужно вывести на форму Bitmap, который
не умещается. Объясню прокрутку только для оси Х, так как для Y аналогично.
Располагаем на форме ScrollBar со свойством Allign:=alBottom (для оси Х).
При выводе Bitmap'а проверяем, умещется ли он по ширине на форме, а так как у наc SrollBar.Width равен ширине окна вывода изображения, то проверяем по нему:
if Bitmap.Width>ScrollBar.Width then ...
усли не умещается то рассчитывае значение ScrollBar.Max:
ScrollBar.Max:=Bitmap.Width>ScrollBar.Width;
иначе ScrollBar.Max:=0;
А дальше в событии ScrollChange пишем:
Form.Canvas.Draw(-ScrollBar.Position, 0, Bitmap);