Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Вывод текста в PictureBox Добавлено: 24.10.06 23:05  

Автор вопроса:  Сергей Юдин
Никак не получается вывести текст в рисунок, т.к. никак не могу правильно задать шрифт. Что здесь не правильно
Dim GG As Graphics
Dim SysFont As New System.Drawing.Font("ARIAL", 10)
GG = Picture1.CreateGraphics()
GG.DrawString("Info", SysFont, Pens.Red, 3, 5)
GG.DrawString("Info", Font("ARIAL", 10), Pens.Red, 3, 5)
Кстати графика работает и рисует квадрат, т.е. точку
GG.FillRectangle(Brushes.Black, XG, YG, 1, 1)

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 25.10.06 01:38
    ''' <summary>
    ''' Ошибка в том, что вызывать метод <c>Graphics.DrawString</c> необходимо
    ''' в событии <c>Paint</c> того объекта, на котором рисуешь!
    ''' </summary>
    ''' <remarks>
    ''' В противном случае изображение тут же будет перерисовано
    ''' полностью или частично при любом обновлении экрана
    ''' </remarks>
    Private Sub PictureBox1_Paint(ByVal sender As Object, _
                                  ByVal e As System.Windows.Forms.PaintEventArgs) _
                                  Handles PictureBox1.Paint


        e.Graphics.DrawString("GDI+ Test VS 2005", _
                     New Font("Arial", 12, FontStyle.Italic Or FontStyle.Bold), _
                     Brushes.Red, 2, 2)

    End Sub

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 25.10.06 02:04
Если же необходимо это сделать в каком - либо другом событии, то как правило поступают следующим образом:
- Создается объект Bitmap из картинки, которая находится в PictureBox, либо из файла
- Рисуешь,пишешь,чертишь там что душе угодно
- Потом загоняешь всю эту эту прелесть в Image своего PictureBox'а...

При таком подходе твоя картинка будет статична и никакие обновления экрана ее не сотрут и не изменят..

Ответить

Номер ответа: 3
Автор ответа:
 Сергей Юдин



Вопросов: 8
Ответов: 81
 Профиль | | #3 Добавлено: 28.10.06 22:04
Если же необходимо это сделать в каком - либо другом событии, то как правило поступают следующим образом:
- Создается объект Bitmap из картинки, которая находится в PictureBox, либо из файла
- Рисуешь,пишешь,чертишь там что душе угодно
- Потом загоняешь всю эту эту прелесть в Image своего PictureBox'а...

 'Спасибо за помощь. Переделал все с Bitmap, но остался вопрос.
        'А зачем тогда метод Graphics.DrawString для PictureBox и как
        'его вызывать в событии Paint, т.к. он у меня срабатывает сразу
        'как я начинаю работать PictureBox, т.е. уже при загрузке формы.

        'Dim bmp As Bitmap
        'Dim gg As Graphics
        'Dim Info As String
        'Private Sub Form1_Load(ByVal eventSender As System.Object, _
        'ByVal eventArgs As System.EventArgs) Handles MyBase.Load
        'bmp = New Bitmap(Picture1.Width, Picture1.Height)
        'gg = Graphics.FromImage(bmp)
        'Info = "Закрыта программа SpuskSi"
        'Picture1String(Info, 10, 40)
        'End Sub

        'Private Sub Picture1String(ByVal Inform As String, _
        'ByVal Xs As Integer, ByVal Ys As Integer)
        ' gg.DrawString(Inform, New Font("Arial", 12, FontStyle.Italic _
        'Or FontStyle.Bold), Brushes.Black, Xs, Ys)
        ' Picture1.Image = bmp
        'End Sub

        'С наилучшими пожеланиями Сергей Юдин

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 28.10.06 22:36
'А зачем тогда метод Graphics.DrawString для PictureBox

Чтобы рисовать на картинке в PictureBox
и как его вызывать в событии Paint

смотри ответ №1

Ответить

Номер ответа: 5
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 28.10.06 23:11
Public Class Form1

    Private infoString As String = ""
    Private stringPosition As PointF

    Private Sub PictureBox1_Paint(ByVal sender As Object, _
                                  ByVal e As System.Windows.Forms.PaintEventArgs) _
                                  Handles PictureBox1.Paint

        If Not String.IsNullOrEmpty(infoString) And _
           Not stringPosition.IsEmpty Then

            e.Graphics.DrawString(infoString, _
                 New Font("Arial", 12, FontStyle.Italic Or FontStyle.Bold), _
                 Brushes.Red, stringPosition)

        End If


    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, _
                                ByVal e As System.Windows.Forms.MouseEventArgs) _
                                Handles Me.MouseMove, PictureBox1.MouseMove

        infoString = String.Format("Cursor position is X={0} Y={1}", _
                                    e.X.ToString, _
                                    e.Y.ToString)

        stringPosition = New PointF(5, 5)
        PictureBox1.Invalidate()

    End Sub

End Class

Ответить

Номер ответа: 6
Автор ответа:
 Сергей Юдин



Вопросов: 8
Ответов: 81
 Профиль | | #6 Добавлено: 01.11.06 23:22
Спасибо. Все работает. И метод Picture1_Paint действительно отличается от вывода текста в bitmap помещенного в PictureBox, т.к. в bitmap новые изображения накладываютя на старые и скоро в этом месте появляется просто темное пятно, а изображение выведенное с помощью Picture1_Paint постоянно обновляется не затрагивая моего изображения в bitmap.

С наилучшими пожеланиями Сергей Юдин.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам