Picturebox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Algol
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 16.01.2004 (Пт) 22:41
Откуда: Н.Новгород

Picturebox

Сообщение Algol » 11.02.2004 (Ср) 21:32

Как изменять свойства рисунка (растянуть там, ну и т. д. ), находящегося в Picture. :?:

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 12.02.2004 (Чт) 1:15

Используй либо свойство PaintPicture, либо функцию StretchBlt, которая наверное быстрее работает.
Нет ничего невозможного для человека с интеллектом.

Algol
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 16.01.2004 (Пт) 22:41
Откуда: Н.Новгород

Сообщение Algol » 12.02.2004 (Чт) 22:01

Расскажи пожалуйста поподробней об этих функциях. Что они конкретно могут делать. Please :)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.02.2004 (Чт) 22:46

PaintPicture позволяет скопировать изображение из одного обёекта со свойством Picture в другой:

Код: Выделить всё
PictureBox1.PaintPicture PictureBox2.Picture, 0, 0, 2500, 2500

В этом примере в PictureBox1 скопируется картинка из PictureBox2 с растяжением до размеров 2500х2500 твипов.

Вариант со StretchBlt отличается более высокой сложностью, т.к. необходимо знать контекст устройства (hDC), но он в то же время более гибкий и более быстрый.

Пример со StretchBlt:
Код: Выделить всё
Private Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

StretchBlt PictureBox1.hdc, 0, 0, 50, 50, PictureBox2.hdc, 0, 0, 250, 250, vbSrcCopy


Здесь:
PictureBox1.hdc - то, куда будет копироваться изображение
0 - расстояние от левого края PictureBox1 до изображения в пикселях
0 - расстояние от верхнего края PictureBox1 до изображения в пикселях
50 - ширина изображения в пикселях
50 - высота изображения в пикселях
PictureBox2.hdc - то, откуда будет копироваться изображение
0 - расстояние от левого края PictureBox2 до изображения в пикселях
0 - расстояние от верхнего края PictureBox2 до изображения в пикселях
50 - ширина копируемого куска изображения в пикселях
50 - высота копируемого куска изображения в пикселях
vbSrcCopy - параметр, отвечающий за режим прорисовки. Если интересно, загляни в Object Browser (F2 в Visual Basic) и поищи RasterOpConstants, поэкспериментируй с различными способами отображения. Если не интересно, оставь как есть.

В общем-то, ничего сложного, просто надо привыкнуть...

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 13.02.2004 (Пт) 1:27

Хочу только добавить, в случае Algol'а вместо PictureBox2 нужно будет поставить тот же PictureBox1, чтобы картинка копировалась тудаже откуда взята (просто меняем её размер или положение).
Нет ничего невозможного для человека с интеллектом.

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Сообщение NicSoft » 13.02.2004 (Пт) 21:01

А кто-нибудь знает как работают различные программы навигации по картам. Т.е. когда огромная картинка видимо загружена в память, а на экране только часть. Тоже при помощи StretchBlt и т.п., или там другие технологии :?:

Algol
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 16.01.2004 (Пт) 22:41
Откуда: Н.Новгород

Сообщение Algol » 14.02.2004 (Сб) 22:45

Amed писал(а):PictureBox1.PaintPicture PictureBox2.Picture, 0, 0, 2500, 2500


По - моему здесь какая-то ошибка? :(

Algol
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 16.01.2004 (Пт) 22:41
Откуда: Н.Новгород

Сообщение Algol » 14.02.2004 (Сб) 22:49

Amed писал(а):
Пример со StretchBlt:
Private Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

StretchBlt PictureBox1.hdc, 0, 0, 50, 50, PictureBox2.hdc, 0, 0, 250, 250, vbSrcCopy



А это где писать подскажите пожалуйста?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 15.02.2004 (Вс) 4:55

Код: Выделить всё
Private Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

Вот это писать надо в модуле (только первый оператор не Private, а Public) или в разделе General Declarations формы (в самом верху, там, где глобальные переменные объявляются, но со словом Private)

Код: Выделить всё
StretchBlt PictureBox1.hdc, 0, 0, 50, 50, PictureBox2.hdc, 0, 0, 250, 250, vbSrcCopy

А это - туда, где должно выполняться копирование :)
В процедуру или функцию...

Надеюсь, доходчиво объяснил?

Algol
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 16.01.2004 (Пт) 22:41
Откуда: Н.Новгород

Сообщение Algol » 15.02.2004 (Вс) 16:45

Все идет. Спасибо что объяснил. :D

Algol
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 16.01.2004 (Пт) 22:41
Откуда: Н.Новгород

Сообщение Algol » 21.02.2004 (Сб) 16:50

А как мне можно узнать первоначальные размеры картинки в Picture (ну там Width, Height). Очень надо. Please :wink:
Настоящие программисты пишут коды вручную.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 6

    TopList