метод DrawString

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

метод DrawString

Сообщение AnarCky » 01.10.2007 (Пн) 13:32

можно ли как-то стереть с экрана строки выведенные туда этим методом?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 01.10.2007 (Пн) 13:44

Зарисовать?

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 01.10.2007 (Пн) 13:55

э-ээ.... :D а как это вообще можно сделать? у меня при событии ресайз происходит изменение размера шрифта этих строк и они перерисовываются заново на новых координатах. но позади старого, маленького рисунка.
может можно как-то установить чтоб новый рисунок появлялся как бы сверху?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 01.10.2007 (Пн) 14:34

ну как бы зарисовуешь все, что было раньше. и потом заново рисуешь

Private Sub Label1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Label1.Paint
Dim g As Graphics = e.Graphics
'Сначала все заливаем
g.FillRectangle(New SolidBrush(Label1.BackColor), Label1.ClientRectangle)
'Затем рисуем
Dim f As Font = New Font("Arial", Label1.Height / 2)
g.DrawString("Text here", f, Brushes.Black, 1, 1)
End Sub

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 01.10.2007 (Пн) 16:30

я оказывается маленько ступил :D у меня и раньше все работало, но только при обновлении.
поясню: в режиме запуска я переключился на другое окно, а потом вернулся в программу и картинка была закрашена нормально.
Отсюда вопрос: а как можно обновить/перерисовать или что-то в этом роде объект из кода?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 01.10.2007 (Пн) 16:46

Рисуй в правильных местах, можешь показать код рисования?

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 01.10.2007 (Пн) 17:03

Код: Выделить всё

    Dim gr As Graphics = Me.CreateGraphics

    Private cv1, cv2 As Color, _
            namElem, simElem, num1Elem, num2Elem, lneElem, nomElem As String, _
            bol As Boolean, _
            MeWidth As Integer = Me.Width, MeHeight As Integer = Me.Height

    Private t1 As New Point(0, 0), t2 As New Point(Me.Width, Me.Height)
    Private ts1, ts2, ts3, ts4, ts5, ts6 As New Point

    Private neFont As New Font("Franklin Gothic Medium", 8, FontStyle.Regular), _
            seFont As New Font("Franklin Gothic Medium", 12, FontStyle.Bold), _
            lneFont As New Font("Franklin Gothic Medium", CSng(77 / 10), FontStyle.Italic), _
            nomFont As New Font("Franklin Gothic Medium", CSng(84 / 10), FontStyle.Regular), _
            numFont As New Font("Franklin Gothic Medium", 9, FontStyle.Regular), _
            num2Font As New Font("Franklin Gothic Medium", 8, FontStyle.Regular)

    Private grad = New LinearGradientBrush(t1, t2, cv1, cv2)
    Private textElem As SolidBrush
    Private recGr As New Rectangle(0, 0, Me.Width, Me.Height)


    Private Sub MeResize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
        t2 = New Point(Me.Width, Me.Height)
        recGr = New Rectangle(0, 0, Me.Width, Me.Height)
        grad = New LinearGradientBrush(t1, t2, cv1, cv2)
    End Sub

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim t1x As Integer = CInt(Me.Width / 235), _
            t1y As Integer = CInt(Me.Height / 112.5), _
            t2x As Integer = CInt(Me.Width / 235), _
            t2y As Integer = CInt(Me.Height / 1.55175), _
            t3x As Integer = CInt(Me.Width / 940), _
            t3y As Integer = CInt(Me.Height / 2.25), _
            t4x As Integer = CInt(Me.Width / 1.402985), _
            t4y As Integer = CInt(Me.Height / 1.60714), _
            t5x As Integer = CInt(Me.Width / 2.848485), _
            t5y As Integer = CInt(Me.Height / 112.5), _
            t6x As Integer = CInt(Me.Width / 1.67857), _
            t6y As Integer = CInt(Me.Height / 4.0909091)

        ts1.X = t1x : ts1.Y = t1y
        ts2.X = t2x : ts2.Y = t2y
        ts3.X = t3x : ts3.Y = t3y
        ts4.X = t4x : ts4.Y = t4y
        ts5.X = t5x : ts5.Y = t5y
        ts6.X = t6x : ts6.Y = t6y

        e.Graphics.FillRectangle(grad, recGr)

        e.Graphics.DrawString(simElem, seFont, textElem, ts1.X, ts1.Y)
        e.Graphics.DrawString(namElem, neFont, textElem, ts2.X, ts2.Y)
        e.Graphics.DrawString(lneElem, lneFont, textElem, ts3.X, ts3.Y)
        e.Graphics.DrawString(nomElem, nomFont, textElem, ts4.X, ts4.Y)
        e.Graphics.DrawString(num1Elem, numFont, textElem, ts5.X, ts5.Y)
        e.Graphics.DrawString(num2Elem, num2Font, textElem, ts6.X, ts6.Y)

    End Sub


ну, собственно вот
А что значит "в правильных местах"?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 01.10.2007 (Пн) 17:30

попробуй это
Private recGr As New Rectangle(0, 0, Me.Width, Me.Height)
заменить на
Private recGr As Rectangle = me.ClientRectangle
для начала

и строку эту перенеси прямо в процедуру OnPaint

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 01.10.2007 (Пн) 20:37

сделал, но тем не менее прорисовывается по человечески токо при смене окон.
тогда как я понимаю следующая строка из события MeResize
recGr = New Rectangle(0, 0, Me.Width, Me.Height)
просто теряет смысл... да?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 01.10.2007 (Пн) 22:01

Код: Выделить всё
Imports System.Drawing.Drawing2D

Public Class Class2
  Inherits Control

  Dim cv1 As Color = Color.AliceBlue
  Dim cv2 As Color = Color.Blue
  Dim namElem As String = "namElem", simElem As String = "Cu"
  Dim num1Elem As String = "num1Elem", num2Elem As String = "num2Elem"
  Dim lneElem As String = "lneElem", nomElem As String = "nomElem"
  Dim bol As Boolean
  Dim ts1, ts2, ts3, ts4, ts5, ts6 As New Point
  Dim t1x, t1y, t2x, t2y, t3x, t3y, t4x, t4y, t5x, t5y, t6x, t6y As Integer
  Dim grad As LinearGradientBrush
  Const fname As String = "Franklin Gothic Medium"
  Dim neFont As New Font(fname, 8.0!, FontStyle.Regular), _
          seFont As New Font(fname, 12.0!, FontStyle.Bold), _
          lneFont As New Font(fname, 77.0! / 10.0!, FontStyle.Italic), _
          nomFont As New Font(fname, 84.0! / 10.0!, FontStyle.Regular), _
          numFont As New Font(fname, 9.0!, FontStyle.Regular), _
          num2Font As New Font(fname, 8.0!, FontStyle.Regular)


  Private Sub Class1_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) _
  Handles Me.HandleCreated
    Me.DoubleBuffered = True
    Me.SetStyle(ControlStyles.ResizeRedraw, True)
  End Sub

  Private Sub Class1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) _
  Handles Me.Paint
    Draw(e.Graphics)
  End Sub

  Sub Draw(ByVal G As Graphics)
    t1x = CInt(Me.Width / 235.0!)
    t1y = CInt(Me.Height / 112.5!)
    t2x = CInt(Me.Width / 235.0!)
    t2y = CInt(Me.Height / 1.55175!)
    t3x = CInt(Me.Width / 940.0!)
    t3y = CInt(Me.Height / 2.25!)
    t4x = CInt(Me.Width / 1.402985!)
    t4y = CInt(Me.Height / 1.60714!)
    t5x = CInt(Me.Width / 2.848485!)
    t5y = CInt(Me.Height / 112.5!)
    t6x = CInt(Me.Width / 1.67857!)
    t6y = CInt(Me.Height / 4.090909!)

    ts1.X = t1x : ts1.Y = t1y
    ts2.X = t2x : ts2.Y = t2y
    ts3.X = t3x : ts3.Y = t3y
    ts4.X = t4x : ts4.Y = t4y
    ts5.X = t5x : ts5.Y = t5y
    ts6.X = t6x : ts6.Y = t6y

    grad = New LinearGradientBrush(Me.ClientRectangle, Color.AliceBlue, Color.Blue, 0.0!)

    G.FillRectangle(grad, Me.ClientRectangle)
    G.DrawString(simElem, seFont, Brushes.Black, ts1.X, ts1.Y)
    G.DrawString(namElem, neFont, Brushes.Black, ts2.X, ts2.Y)
    G.DrawString(lneElem, lneFont, Brushes.Black, ts3.X, ts3.Y)
    G.DrawString(nomElem, nomFont, Brushes.Black, ts4.X, ts4.Y)
    G.DrawString(num1Elem, numFont, Brushes.Black, ts5.X, ts5.Y)
    G.DrawString(num2Elem, num2Font, Brushes.Black, ts6.X, ts6.Y)
  End Sub

End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 02.10.2007 (Вт) 11:35

синтаксическая ошибка в строке "Me.DoubleBuffered = True"
" 'DoubleBuffered' is not a member of 'ChemElemCell.ChemElemCell' "
а что это за свойство? чем его можно заменить?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 02.10.2007 (Вт) 12:48

удали его :)
а
Me.SetStyle(ControlStyles.ResizeRedraw, True)
замени на
me.SetStyle(ControlStyles.ResizeRedraw or ControlStyles.OptimizedDoubleBuffer or ControlStyles.UserPaint, true)

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 02.10.2007 (Вт) 13:12

работает :D Спасибо!
еще вопрос: что значит символ '!' после каждой числовой константы?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 02.10.2007 (Вт) 13:31

значит, что это float


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89

    TopList