Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Вместо курсора Gifовский рисунок поэтому два вопро Добавлено: 30.03.06 22:06  

Автор вопроса:  Nikolai
С Эросом написали код (То есть я писал он диктовал),
но как обычно без проблем не бывает

Первый вопрос:
Почему моргает (мерцает)?

Второй вопрос:
ЦП забит на все 100% почему?

Public Class Form1
    Inherits System.Windows.Forms.Form
'После
#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

'Добавить в ручную:
' по идее в GDI+ это для того чтоб не мерцала картинка
'для курсора не действует

        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        Me.SetStyle(ControlStyles.DoubleBuffer, True)
        Me.UpdateStyles()
  
#End Region
    'В папку Bin любой Gifовский рисунок
    Public MyGif As Bitmap = New Bitmap("SharStop.gif")
    Private Animating As Boolean = False
    Private GifRectangle As New Rectangle

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Задаем начальные координаты и размеры прямоугольника для вывода анимации
        With GifRectangle
            .X = 400
            .Y = 30
            .Width = MyGif.Width
            .Height = MyGif.Height
        End With
    End Sub
    Public Sub StartAnimate()
        If Not Animating Then
            'Запускаем анимацию только 1 раз
            ImageAnimator.Animate(MyGif, New EventHandler(AddressOf Me.NewAnimatedFrame))
            'Устанавливаем флаг
            Animating = True
        End If
    End Sub
    Private Sub NewAnimatedFrame(ByVal o As Object, ByVal e As EventArgs)
        'Инициируем перерисовку экрана в заданной области
        Me.Invalidate(GifRectangle)
    End Sub
    Private Sub frmTany_DoubleClick1(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.DoubleClick
        'выход
        Me.Close()
    End Sub
    Private Sub frmShar_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        'Запускаем Анимацию
        StartAnimate()
        'Меняем кадр анимации
        ImageAnimator.UpdateFrames()
        'Создаем новую картинку из текущего кадра
        Me.Cursor = New Cursor(MyGif.GetHicon)
    End Sub
End Class

Ответить

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

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



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #1
Добавлено: 31.03.06 16:11
Me.SetStyle не поможет. Прорисовка не на форме.

Ответить

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



Вопросов: 60
Ответов: 808
 Профиль | | #2 Добавлено: 31.03.06 17:08
Тут надо юзать старый добрый BitBlt со всеми его заморочками при сохранении. Как я понимаю гиф еще и прозрачный...

Ответ на оба вопроса прост: фигня это а не код!

Ответить

Номер ответа: 3
Автор ответа:
 mich



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #3
Добавлено: 31.03.06 17:14
Нормальный сырой код. Но для этой цели не пойдет

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 01.04.06 00:43
У тебя тут грубейшай ошибка!! ЗАЧЕМ ПЕРЕРИСОВЫВАТЬ форму при смене курсора???
Me.Invalidate(GifRectangle)

Тут совершенно не уместна! Достаточно сделать другую процедуру с любым названием и код из Paint перенести в нее. И далее в NewAnimatedFrame
Вызывать эту процедуру.Также при загрузке формы надо будет стартовать анимацию. Я думаю, тебе стоит более детально изучить класс ImageAnimator.
И еще..
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        Me.SetStyle(ControlStyles.DoubleBuffer, True)
        Me.UpdateStyles()

в данном случае абсолютно не нужна.
И впредь,ссылаясь на меня будь добр добавлять,что этот код ты переделал из моего примера предназначенного для совершенно других целей, дабы не вводить людей в заблуждение. Если самостоятельно сделать не получится-дай знать... я приведу полный код, как это можно сделать.

Fever..
А Вам, уважаемый, я бы весьма рекомендовал воздерживаться от подобного рода высказываний:
Ответ на оба вопроса прост: фигня это а не код!

Либо,раз уж вы позволяете себе подобное, приводить код, который по вашему мнению является более рациональным и правильным. В противном случае ваши слова выглядят не более,чем пустой трёп! Обхаять чужой код много ума не надо, гораздо сложнее помочь делом.
И BitBlt в этом случае абсолютно не нужен.. Тем более для человека с таким уровнем знаний..

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 01.04.06 01:19
Кстати..
        With GifRectangle
            .X = 400
            .Y = 30
            .Width = MyGif.Width
            .Height = MyGif.Height
        End With

тут тоже теперь не нужна.. это было необходимо при рисовании на форме..

Ответить

Номер ответа: 6
Автор ответа:
 mich



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #6
Добавлено: 02.04.06 00:22
Правильно EROS
А зачем делать из Gif курсор?

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 02.04.06 01:30
ну хочется человеку сделать нестандартный,красивый анимированный курсор.. мало ли для чего.. может для игры.. или еще чего нибудь..

Ответить

Номер ответа: 8
Автор ответа:
 Nikolai



Вопросов: 23
Ответов: 58
 Профиль | | #8 Добавлено: 02.04.06 09:32
 
Ну вот переделал

'В папку Bin любой Gifовский рисунок
    Public MyGif As Bitmap = New Bitmap("SharStop.gif";)
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Запускаем анимацию только 1 раз
        ImageAnimator.Animate(MyGif, New EventHandler(AddressOf Me.NewAnimatedFrame))
    End Sub
    Private Sub NewAnimatedFrame(ByVal o As Object, ByVal e As EventArgs)
        Any()
    End Sub
    Private Sub frmTany_DoubleClick1(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.DoubleClick
        'выход
        Me.Close()
    End Sub
    Private Sub Any()
        'Меняем кадр анимации
        ImageAnimator.UpdateFrames()
        'Создаем новую картинку из текущего кадра
        Me.Cursor = New Cursor(MyGif.GetHicon)
    End Sub
End Class

ЦП 10%
а мерцает очень сильно
причём В VB6 на APIшках можно сделать нормально

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 02.04.06 12:53
ЦП 10%
а мерцает очень сильно

ЦП забит и мерцает потому,что твой SharStop.gif весит около 500 кб.. чего ты хотел с такими размерами? Ты где видел курсоры в 500 кб?
причём В VB6 на APIшках можно сделать нормально

А вот это врядли! Я не думаю, что на APIшках кому-то удастся сделать анимированный курсор из Gif!
Если же тебя интересует использование анимированного курсора (*.ani) то вот код:

Public Class frmCursorTest

    Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Integer
    Private Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Integer) As Integer

    Dim hCursor As Integer

    Private Sub frmCursorTest_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        ;DestroyCursor(hCursor)

    End Sub

    Private Sub frmCursorTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        hCursor = LoadCursorFromFile("C:\WINDOWS\Cursors\drum.ani";)
        Me.Cursor = New Cursor(New IntPtr(hCursor))

    End Sub

End Class

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #10 Добавлено: 02.04.06 13:51
И кстати, я проверил твой код на прозрачном Gif'e размером 141х113 и весом 13кб,результаты вполне приличные.. ЦП-0% и мерцания никакого. Молодец!

Ответить

Номер ответа: 11
Автор ответа:
 Nikolai



Вопросов: 23
Ответов: 58
 Профиль | | #11 Добавлено: 02.04.06 17:47
Знали бы другие во сколько времени мне это обошлось, а нервов...
Спасибо!!!!!!!!!!!!!!!!!!!!

Ответить

Номер ответа: 12
Автор ответа:
 mich



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #12
Добавлено: 02.04.06 21:03
Про время программистам можешь не рассказывать

Ответить

Страница: 1 |

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



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