Проблема с сохранением picturebox

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

Проблема с сохранением picturebox

Сообщение David » 30.09.2017 (Сб) 11:42

День добрый,
Заранее извиняюсь за мой русский, уже имел неприятный опыт.
Есть форма Picturebox, назовём А, и четыре вложенных в неё Picturebox, назовём Б1, Б2, Б3, Б4.
В Picturebox-е рисую ну что-то вроде градусника, на белом фоне пишу числа тем же цветом что и фон градусника. Как только часть фона градусника попадает на часть цифры использую другой Picturebox, назовём Б1, для того чтобы написать те же цифры, но теперь белым цветом на фоне цвета фона градусника. Надеюсь понятно, на всякий случай текст формы
Код: Выделить всё
Private Sub Form_Load()
   Dim PenColor2(2) As Long, PenTxt(2) As Long, lngTerm As Double, Index2 As Integer
   
   Height = 5000: Width = 0.5 * Screen.Width
   Picture2.Left = 0: Picture2.Top = 0
   Picture2.Height = 0.8 * Height: Picture2.Width = Width
   ht2 = Picture2.Height: lng2 = Picture2.Width - 0.2 * ht2
   PenColor2(0) = RGB(90, 175, 155):  PenTxt(0) = PenColor2(0)    'RGB(70, 145, 130)
   PenColor2(1) = RGB(230, 125, 35): PenTxt(1) = PenColor2(1)     'RGB(200, 110, 30)
   PenColor2(2) = RGB(240, 75, 95): PenTxt(2) = PenColor2(2)      'RGB(195, 60, 80)

   Progres2 = 24  ' в программе это значение передается из другой процедуры

   Picture2.DrawStyle = vbSolid: Picture2.FillStyle = vbFSSolid: Picture2.AutoRedraw = True
   Picture2.ForeColor = RGB(155, 155, 155): Picture2.FillColor = RGB(155, 155, 155)
   Picture2.Line (0.5 * ht2, 0.3 * ht2)-(lng2, 0.7 * ht2), RGB(155, 155, 155), BF
   Picture2.Circle (0.5 * ht2, 0.5 * ht2), 0.5 * ht2
   Picture2.Circle (lng2, 0.5 * ht2), 0.2 * ht2

   Picture2.FillColor = vbWindowBackground: Picture2.ForeColor = vbWindowBackground
   Picture2.Line (0.5 * ht2, 0.33 * ht2)-(lng2, 0.67 * ht2), vbWindowBackground, BF
   Picture2.Circle (0.5 * ht2, 0.5 * ht2), 0.47 * ht2
   Picture2.Circle (lng2, 0.5 * ht2), 0.17 * ht2

   alfa = 180 * Atn((0.15 * ht2) / (0.44 * ht2)) / 3.15
   Picture2.Circle (0.5 * ht2, 0.5 * ht2), 0.45 * ht2, RGB(155, 155, 155), 3.14 * alfa / 180, 3.14 * (360 - alfa) / 180
   Picture2.Line (0.93 * ht2, 0.35 * ht2)-(lng2, 0.35 * ht2), RGB(155, 155, 155)
   Picture2.Line (0.93 * ht2, 0.65 * ht2)-(lng2, 0.65 * ht2), RGB(155, 155, 155)
   Picture2.Circle (lng2, 0.5 * ht2), 0.15 * ht2, RGB(155, 155, 155), 3.14 * 270 / 180, 3.14 * 90 / 180

   Select Case Progres2
      Case Is < 40: Index2 = 2
      Case Is < 70: Index2 = 1
      Case Else: Index2 = 0
   End Select

   Picture2.FillColor = PenColor2(Index2): Picture2.ForeColor = PenColor2(Index2)
   Picture2.Circle (0.5 * ht2, 0.5 * ht2), 0.45 * ht2

   lngTerm = 0.94 * ht2 + Progres2 * (Picture2.Width - 0.05 * ht2 - 0.94 * ht2) / 100
   Picture2.Line (0.9 * ht2, 0.35 * ht2)-(lngTerm - 0.15 * ht2, 0.65 * ht2), PenColor2(Index2), BF
   Picture2.Circle (lngTerm - 0.15 * ht2, 0.5 * ht2), 0.15 * ht2

   Picture2.ForeColor = vbWindowBackground
   Picture2.FontName = "Gotham Book": Picture2.FontSize = 20 * ht2 / 2000
   tmpTxt = Format(Progres2, "0.0")
   hTxt = Picture2.TextHeight(tmpTxt): wTxt = Picture2.TextWidth(tmpTxt)
   Picture2.CurrentX = 0.5 * (ht2 - wTxt): Picture2.CurrentY = 0.5 * (ht2 - hTxt):
   Picture2.Print tmpTxt

   Picture2.FontSize = 8 * ht2 / 2000: Picture2.FontBold = False
   hTxt = Picture2.TextHeight("%")
   Picture2.DrawWidth = 3: delt2 = (Picture2.Width - 0.05 * ht2 - 0.94 * ht2) / 5
   For iiTmp = 1 To 4
      Picture2.ForeColor = PenTxt(Index2)
      Picture2.Line (0.94 * ht2 + iiTmp * delt2, 0.45 * ht2)-(0.94 * ht2 + iiTmp * delt2, 0.55 * ht2), PenTxt(Index2)
      Picture2.CurrentX = 0.96 * ht2 + iiTmp * delt2: Picture2.CurrentY = 0.5 * (ht2 - hTxt): Picture2.Print Format(iiTmp * 20, "0") & "%"
      wTxt = Picture2.TextWidth(Format(iiTmp * 20, "0") & "%")
      If 0.96 * ht2 + iiTmp * delt2 < lngTerm Then

         ValeurCadre(iiTmp - 1).Left = 0.94 * ht2 + iiTmp * delt2: ValeurCadre(iiTmp - 1).Top = 0.45 * ht2
         ValeurCadre(iiTmp - 1).BackColor = Picture2.FillColor: ValeurCadre(iiTmp - 1).BorderStyle = 0
         ValeurCadre(iiTmp - 1).Height = 0.1 * ht2: ValeurCadre(iiTmp - 1).AutoRedraw = True
         If lngTerm - (0.94 * ht2 + iiTmp * delt2) > wTxt Then ValeurCadre(iiTmp - 1).Width = 0.02 * ht2 + wTxt _
            Else ValeurCadre(iiTmp - 1).Width = lngTerm - (0.94 * ht2 + iiTmp * delt2)
         ValeurCadre(iiTmp - 1).Font.Size = Picture2.FontSize: ValeurCadre(iiTmp - 1).ForeColor = RGB(255, 255, 255)
         ValeurCadre(iiTmp - 1).DrawWidth = 3: ValeurCadre(iiTmp - 1).Line (0, 0)-(0, ValeurCadre(iiTmp - 1).Height), RGB(255, 255, 255)
         ValeurCadre(iiTmp - 1).CurrentX = 0.02 * ht2: ValeurCadre(iiTmp - 1).CurrentY = 0
         ValeurCadre(iiTmp - 1).Print Format(iiTmp * 20, "0") & "%"

      Else: ValeurCadre(iiTmp - 1).Visible = False
      End If
   Next iiTmp
   SavePicture Picture2.Image, "C:\Picture2.bmp"
End Sub

В общем на экране всё получается
А вот когда использую SavePicture, картинка сохраняется, но без, Picturebox-ов Б1, Б2, Б3, Б4
Заранее благодарю

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

Re: Проблема с сохранением picturebox

Сообщение Mikle » 30.09.2017 (Сб) 21:18

David писал(а):когда использую SavePicture, картинка сохраняется, но без, Picturebox-ов Б1, Б2, Б3, Б4

Так и должно быть. Можно отобразить Б1, Б2, Б3, Б4 на Picturebox А:
Код: Выделить всё
А.PaintPicture Б1.Image, Б1.Left, Б1.Top
А.PaintPicture Б2.Image, Б2.Left, Б2.Top
А.PaintPicture Б3.Image, Б3.Left, Б3.Top
А.PaintPicture Б4.Image, Б4.Left, Б4.Top
Последний раз редактировалось Mikle 01.10.2017 (Вс) 9:16, всего редактировалось 1 раз.

David
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 10.03.2004 (Ср) 20:41
Откуда: FRANCE

Re: Проблема с сохранением picturebox

Сообщение David » 01.10.2017 (Вс) 0:24

Спасибо, я получил ожидаемый результат.


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

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

Сейчас этот форум просматривают: AhrefsBot, Mail.ru [бот] и гости: 5

    TopList  
cron