Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Как использовать ocx написанный на VB6 Добавлено: 29.12.06 20:02  

Автор вопроса:  -АлександР- | Web-сайт: sham.clan.su

Ответить

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

Номер ответа: 16
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #16
Добавлено: 01.01.07 18:45
И еще
1)я не понял, что здесь за размер:
    Protected Overrides ReadOnly Property DefaultSize() As Size
        Get
            '// Переопределяем начальный размер
            Return New Size(100, 100)
        End Get
    End Property
для чего он?

2)строчку Inherits Control пришлось заменить на Inherits System.Windows.Forms.UserControl, т. к. комп. выдал ошибку

3)
'// Перерисовываем родителя, а он перерисует наш контрол
        If Parent IsNot Nothing Then Parent.Refresh()

тож не догнал...

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #17 Добавлено: 01.01.07 20:26
Все, получилось, спасибо

Ничего у тебя не получилось... фигню ты сделал.. кривую.. (сорри за прямоту)Ты так и не понял то, что я тебе пытался объяснить.. :-((( Зачем ты создаешь объект Graphics?? Он тебе нафик не нужен! Он есть в событии Paint!!
Создай новый проект и скопируй этот код.. и разберись как он работает.. Без понимания того, что ты делаешь даже браться за GDI не стоит..
Public Class Form1

    Private _mouse As Point
    Private _font As New Font("Tahoma", 8)

    Private Sub Form1_Load(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) Handles MyBase.Load
        '// Избавляемся от мерцания при перерисовках
        Me.DoubleBuffered = True
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, _
                                ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        '// Запоминаем положение мыши
        _mouse = e.Location
        '// Перерисовываемся
        Me.Invalidate()
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, _
                            ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        '// Формируем текст
        Dim _text As String = String.Format("X = {0}" & vbNewLine & "Y = {1}", _
                                            _mouse.X, _
                                            _mouse.Y)
        '// Узнаем размеры прямоугольника, в который можно вписать текст
        Dim layoutSize As SizeF = e.Graphics.MeasureString(_text, _font)
        '// Создаем базовый прямоугольник
        Dim layoutRect As New Rectangle(_mouse.X + 20, _
                                        _mouse.Y, _
                                        layoutSize.Width, _
                                        layoutSize.Height)
        '// Смещаем его(прямоугольник) на 5 пикселов для вывода тени
        layoutRect.Offset(5, 5)
        '// Заливаем тень
        e.Graphics.FillRectangle(New SolidBrush(Color.FromArgb(30, Color.RoyalBlue)), _
                                 layoutRect)
        '// Возвращаем прямоугольник обратно
        layoutRect.Offset(-5, -5)
        '// Заливаем фон
        e.Graphics.FillRectangle(Brushes.White, _
                                 layoutRect)
        '// Рисуем рамку
        e.Graphics.DrawRectangle(Pens.RoyalBlue, _
                                 layoutRect)
        '// Рисуем текст
        e.Graphics.DrawString(_text, _
                              _font, _
                              Brushes.Black, _
                              layoutRect)
    End Sub

End Class


Запусти его и посмотри что получится..

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #18 Добавлено: 01.01.07 20:49
И работает и так и так без метода invalidate, кстати для чего он нужен?

Invalidate так же как и Refresh перерисовывают форму или контрол для которого он(метод) был вызван.. Другими словами эти методы запускают процедуру Paint..
я не понял, что здесь за размер

Это размер, который принимает контрол при добавлении его на форму.. (начальный размер) Не обращай на него внимания.. можешь эту часть вообще удалить, это не принципиально
строчку Inherits Control пришлось заменить на Inherits System.Windows.Forms.UserControl, т. к. комп. выдал ошибку

Зря ты это зделал, заменить надо было на System.Windows.Forms.Control

'// Перерисовываем родителя, а он перерисует наш контрол
        If Parent IsNot Nothing Then Parent.Refresh()

тож не догнал...

Дело в том, у нас нет фона и если мы нарисуем линию с толщиной 7 пикс, а потом с толщиной 2 пикс, то визуально никаких изменений ты не увидишь, она так и останется толщиной в 7 пикс, потому что нам надо перерисовать то, что находится ПОД нашим контролом, а значит перерисовать надо родителя..

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #19 Добавлено: 01.01.07 20:56
Тебе вообще какая линия нужны??? Вертикальная? Горизонтальная? или она может принимать любой угол наклона? Какие требования ты предъвляешь к этой линии?? И для чего вообще она тебе нужна, опиши задачи этого контрола..

Ответить

Номер ответа: 20
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #20
Добавлено: 02.01.07 15:37
сорри за прямоту
Прямота - самое верное лекарство от невежества

Да я понял :-) , идея такая:

    Private Sub pctMain_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pctMain.MouseMove

        x = e.X
        y = e.Y

        pctMain.Invalidate()

    End Sub

    Private Sub pctMain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles pctMain.Paint

        e.Graphics.DrawLine(Pens.Blue, p.X, p.Y, x, y)

    End Sub

Ответить

Номер ответа: 21
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #21
Добавлено: 02.01.07 15:42
Тебе вообще какая линия нужны??? Вертикальная? Горизонтальная? или она может принимать любой угол наклона? Какие требования ты предъвляешь к этой линии?? И для чего вообще она тебе нужна, опиши задачи этого контрола..
1)она должна принимать любой угол
2)обрабатывать события mouse-m/d
3)фон прозрачен (само собой)
4)положение ее координат будет зависеть от текущих координат мыши... (то есть она должна быть еще и маневренной в любую сторону). В вб6 была проблема, что топ и лефт не могут быть отрицательными, поэтому контрол приходится растягивать на все пространство рисования...
5)вроде все, см. пункт 1-4 :)
6)на всякий случай, если я чего-то забыл... :-)

Ответить

Номер ответа: 22
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #22
Добавлено: 02.01.07 15:46
Еще вопрос, если можно:
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)

        e.Graphics.DrawLine(Pens.Blue, p.X, p.Y, x, y)

    End Sub
как также определить процедуру OnPaint для PicterBox?

p.s. Хм, топик надо было назвать gdi+ для чайников

Ответить

Номер ответа: 23
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #23 Добавлено: 02.01.07 15:54
как также определить процедуру OnPaint для PicterBox?

Либо унаследовать свой контрол от PictureBox, либо попробуй отлавливать событие Paint.

p.s. Хм, топик надо было назвать gdi+ для чайников

Я бы даже сказал gdi++

Ответить

Номер ответа: 24
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #24
Добавлено: 02.01.07 20:24
Либо унаследовать свой контрол от PictureBox
А смысл?

либо попробуй отлавливать событие Paint
это я сделал (см. пост 20), хочу понять различие между ними

Ответить

Страница: 1 | 2 |

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



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