15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту

Сегодня в выпуске: Текстурируем форму

В сегодняшнем выпуске, я приведу код небольшой программы - "текстуризатора" вашей формы. Код довольно легкий для понимания. Для нашей программы потребуется всего лишь экранная форма (1 шт.), элемент управления Image (1шт., или PictureBox, тоже 1 шт.) и какая-нибудь картинка, небольшого размера, желательно текстурная. 

Сразу предупреждаю, вне зависимости от варианта, если вы не устанавливали значение свойства Picture во время разработки вашей программы и хотите загрузить картинку во время выполнения вашей программы, то вам надо будет использовать функцию LoadPicture().
Покажу на примере: Picture1.Picture = LoadPicture ("C:\Pictures\1.jpg")

Вариант 1. Используем ImageBox (правильнее, просто Image)

Private Sub Form_Load()
Image1.Visible = False 'нам не нужно, чтобы сама картинка была видна
End Sub

Private Sub Form_Paint()
For x = 0 To Form1.Width Step Image1.Width
For y = 0 To Form1.Height Step Image1.Height
Form1.PaintPicture Image1.Picture, x, y
Next
Next
End Sub

Вариант 2. Используем PictureBox

Private Sub Form_Load()
Picture1.AutoSize = True 'нам нужно, чтобы размеры элемента управления 
'в точности соответствовали размерам рисунка
Picture1.BorderStyle = 0 'убираем обрамление(границы) PictureBox, иначе на форме
'между картинками будут пространства, и текстура некрасиво будет выглядеть
Picture1.Visible = False 'нам не нужно, чтобы сама картинка была видна
End Sub

Private Sub Form_Paint()
For
x = 0 To Form1.Width Step Picture1.Width
For
y = 0 To Form1.Height Step Picture1.Height
Form1.PaintPicture Picture1.Picture, x, y
Next
Next
End Sub

Вот и все. Вся программа. Самое сложное в ней - метод PaintPicture. Есть и другие варианты текстурирования формы, но они намного сложнее, чем данные. Наиболее простой вариант - первый, с элементом управления Image работать проще, да и сам программный код поменьше...

Сведения - метод PaintPicture


Синтаксис: <object>.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode
Параметры, выделенные синим, необязательные и могут быть опущены.
<object> - выражение, указывающее на объект (могут быть Form, PictureBox или Printer). Если <object> не указан, то по умолчанию берется активная форма (на которой фокус).
picture - источник графики, которая должна быть нарисована на <object>. Источниками могут быть свойства Picture объекта Form или элемента управления PictureBox(Image), либо функция LoadPicture.
x1, y1 - числа, указывающие на координаты (верхний левый угол) на <object> для того чтобы рисовать picture на <object> (хм, как заумно сказано...:))
width1, height1 - ширина/высота рисуемой картинки. Вследствие этого, картинка будет сжата/растянута.
x2, y2 - определяет координаты прямоугольника (на самой картинке, а не на объекте). Картинка в этом прямоугольнике остается, остальная часть отсекается (clipping).
width2, height2 - ширина/высота, почти как width1/height1, только по отношению к вырезаемой области картинки.
opcode - (Long), указывает на тип побитовой операции (Not, Xor...) выполняемой над картинкой. Хм, надеюсь вы никогда этим пользоваться не будете...:)

FAQ - Вопрос-Ответ

Пока вопросов не было, так что и отвечать не на что. Надеюсь, что со временем и вопросы появятся, а следом и ответы...

Это все, до следующего выпуска. До свидания.

Жду ваших писем с вашими вопросами, мнениями, советами и т.д. на maxx@migsv.ru