Заливка рисунка в PictureBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Заливка рисунка в PictureBox

Сообщение Sedge » 14.04.2003 (Пн) 21:52

Если кто знает, подскажите, плиз, можно ли в PictureBox-е "заливать" нарисованные фигуры каким-нибудь левым фоновым рисунком?

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Сообщение Gemini » 15.04.2003 (Вт) 7:58

Если это то что тебе надо то помойму на www.planet-source-code.com были исходники рисовалки иконок.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 15.04.2003 (Вт) 11:24

Я не нашел :( У тебя нет более точной ссылки?

Задача в следующем - рисуем например квадрат. Я могу его залить любым цветом и закрасить одним из предопределенных рисунков (допустим, штриховка сверху-вниз). Но это не подходит. Нужно взять рисунок из bmp-файла и использовать его как заливку для квадрата. Как это можно сдкелать? Если можно, то с примером 8)

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 15.04.2003 (Вт) 11:35

на vbstreets.ru был пример хорошего редактора иконок... microart называется...
ищи :lol:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 15.04.2003 (Вт) 15:42

Посмотрел. Софтинка клевая, только вот там ничего по моему вопросу нет. Я, собственно, не ищу редактор иконок. Кто-нибудь может чем-нибудь по существу помочь? :?:

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 15.04.2003 (Вт) 17:03

Квадрат (прямоугольник) залить легко:
Picture1.PaintPicture LoadPicture("...myfile.bmp", ....... )

Trojan Lord
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 05.04.2003 (Сб) 19:07

Сообщение Trojan Lord » 15.04.2003 (Вт) 18:42

Код: Выделить всё
picture1.picture=loadpicture ("c:\мои документы\картинка.bmp"
Не важно на каком языке ты пишешь, главное - Алгоритм.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 16.04.2003 (Ср) 17:32

А если круг? Или треугольник? Необходимо обеспечить таким образом заливку любой фигуры.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 30.04.2003 (Ср) 20:07

Н-да... Ну ладно, ежели кому интересно...

Код: Выделить всё
 
  Private Const SRCPAINT& = &HEE0086
  Private Const SRCCOPY& = &HCC0020
  Private Const SRCAND& = &H8800C6
  Private Const SRCERASE& = &H440328
  Private Const SRCINVERT& = &H660046
  Private Const TRANSPARENT& = 1
  Private Const RGN_COPY& = 5
  Private Const RGN_AND& = 1
  Private Const RGN_DIFF& = 4
  Private Const RGN_XOR& = 3
  Private Const RGN_OR& = 2
  Private Const BLACK_BRUSH = 4
  Private Const BLACK_PEN = 7

  Private Const PS_SOLID = 0
  Private Const PS_DASH = 1                    '  -------
  Private Const PS_DOT = 2                     '  .......
  Private Const PS_DASHDOT = 3                 '  _._._._
  Private Const PS_DASHDOTDOT = 4              '  _.._.._
  Private Const PS_NULL = 5
  Private Const PS_INSIDEFRAME = 6
  Private Const PS_USERSTYLE = 7
  Private Const PS_ALTERNATE = 8
  Private Const PS_STYLE_MASK = &HF

  Private Declare Function SaveDC Lib "gdi32" _
    (ByVal hdc As Long) As Long
  Private Declare Function RestoreDC Lib "gdi32" _
    (ByVal hdc As Long, ByVal nSavedDC As Long) As Long
  Private Declare Function BeginPath Lib "gdi32" _
    (ByVal hdc As Long) As Long
  Private Declare Function EndPath Lib "gdi32" _
    (ByVal hdc As Long) As Long
  Private Declare Function SelectClipPath Lib "gdi32" _
    (ByVal hdc As Long, ByVal iMode As Long) As Long
  Private Declare Function SelectClipRgn Lib "gdi32" _
    (ByVal hdc As Long, ByVal hRgn As Long) As Long


  Dim Res As Long
  Dim Sav As Long

  Sav = SaveDC(picOut.hdc)
  Call SelectClipRgn(picOut.hdc, 0)
  Res = BeginPath(picOut.hdc)
 
  picOut.Circle (100, 100), 40, vbBlack

  Res = EndPath(picOut.hdc)
  Res = SelectClipPath(picOut.hdc, RGN_COPY)
 
  Call picOut.PaintPicture(picBG.Picture, _
    40, 55, picBG.ScaleWidth, _
    picBG.ScaleHeight, 0, 0, _
    picBG.ScaleWidth, picBG.ScaleHeight)
 
  Res = RestoreDC(picOut.hdc, Sav)


Если надо, могу отмылить пример.

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 30.04.2003 (Ср) 21:05

Попробуи так :

Создаи форму и размести TextBox и назави его например "Box1"
потом размести на форме два ListBox'а один назави например "lst1" другои "lst2" Затем пиши в форму такои код:
Код: Выделить всё
Private Sub Form_Load()
'Инициализация раскрывающегося списка lst1
lst1.AddItem "1 - Oval"
lst1.AddItem "2 - Square"
'Инициализация раскрывающегося списка  lst2
lst2.AddItem "1 - Solid"
lst2.AddItem "2 - Transparent"
lst2.AddItem "3 - Horizontal Line"
lst2.AddItem "4 - Vertical Line"
lst2.AddItem "5 - Cross"
'Установим начальные значения для каждого сиска
lst1.ListIndex = 0
lst2.ListIndex = 0

Потом нажми два раза на lst2 и в правом раскрывающемся окне выбери событие Click и пеши такои код:
'Изменить вид в соответствии с выбором
Private Sub lst2_Click()
shpSample.FillStyle = lst2.ListIndex
End Sub

Вот и всё! :wink:
Max!

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 30.04.2003 (Ср) 21:22

Ах да забыл код для lst1 ! :oops:
Вот
Код: Выделить всё
Сделаи ту же операцию что и в первом , правом раскрывающемся окне выбери событие Click!
Private Sub lst1_Click()
shpSample.Shape = lst1.ListIndex
End Sub



:wink:
Max!

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 01.05.2003 (Чт) 17:49

Извини за мою не внимательность ! На форме вместо TextBox'a надо создать(разместить) PictureBox! Sorry! :oops: :oops: :oops: :!:
Max!

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 01.05.2003 (Чт) 22:48

Спасибо, help я читать умею :wink: Если бы задача состояла в том, чтобы закрасить рисунок стандартной vb-шной штриховкой, я бы не стал тратить дисковое пространство сервера VBStreets :)

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 01.05.2003 (Чт) 23:28

Если ты про help который в VB есть то я если честно не знал что там даётся такои пример !
Max!


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

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

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

    TopList