1. ★ قبعة القش ★

    ★ قبعة القش ★ V • I • P

    الأنتساب:
    ‏10 مايو 2014
    المشاركات:
    447
    الإعجابات المتلقاة:
    16
    نقاط الجائزة:
    18
    سلام عليكم ورحمة الله تعالى وبركاته


    شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروع VB..NET

    أول شي نحتاج هذا كلاس

    كود PHP:

    Imports System
    Imports System
    .Collections
    Imports System
    .Drawing
    Imports System
    .Drawing.Imaging
    Imports System
    .Runtime.InteropServices
    Imports System
    .Windows.Forms
    Public Class XaY_Tn
        Inherits System
    .Windows.Forms.Panel

        
    Private effectTimer As System.Windows.Forms.Timer
        
    Private tmrBalance As System.Windows.Forms.Timer
        
    Private components As System.ComponentModel.IContainer

        
    Private _bmp As Bitmap
        
    Private _waves As Short(,,)
        Private 
    _waveWidth As Integer
        
    Private _waveHeight As Integer
        
    Private _activeBuffer As Integer 0
        
    Private _weHaveWaves As Boolean
        
    Private _bmpHeight As Integer_bmpWidth As Integer
        
    Private _bmpBytes As Byte()
        Private 
    _bmpBitmapData As BitmapData
        
    Private _scale As Integer

        
    Private __IsBusy As Boolean

        
    Private Sub InitializeComponent()
            
    Me.components = New System.ComponentModel.Container()
            
    Me.effectTimer = New System.Windows.Forms.Timer(Me.components)
            
    Me.tmrBalance = New System.Windows.Forms.Timer(Me.components)

            
    AddHandler Me.effectTimer.TickAddressOf Me.effectTimer_Tick
            AddHandler Me
    .tmrBalance.TickAddressOf Me.tmrBalance_Tick

            AddHandler Me
    .PaintAddressOf Me.WaterEffectControl_Paint
            AddHandler Me
    .MouseMoveAddressOf Me.WaterEffectControl_MouseMove

        End Sub

        
    Public Sub New()
            
    InitializeComponent()
            
    effectTimer.Enabled True
            effectTimer
    .Interval 100
            tmrBalance
    .Interval 1000
            SetStyle
    (ControlStyles.UserPaintTrue)
            
    SetStyle(ControlStyles.AllPaintingInWmPaintTrue)
            
    SetStyle(ControlStyles.DoubleBufferTrue)
            
    Me.BackColor Color.Transparent
            _weHaveWaves 
    False
            _scale 
    1
        End Sub

        
    Public Sub New(ByVal bmp As Bitmap)
            
    Me.New()
            
    Me.ImageBitmap bmp
        End Sub

        
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If 
    disposing Then
                
    If components IsNot Nothing Then
                    components
    .Dispose()
                
    End If
            
    End If
            
    MyBase.Dispose(disposing)
        
    End Sub

        
    Private Sub effectTimer_Tick(ByVal sender As ObjectByVal e As System.EventArgs)
            If 
    _weHaveWaves Then
                Invalidate
    ()
                
    ProcessWaves()
            
    End If
        
    End Sub
        
    Private Sub tmrBalance_Tick(ByVal sender As ObjectByVal e As System.EventArgs)
            
    __IsBusy Not __IsBusy
        End Sub

        
    Public Sub WaterEffectControl_Paint(ByVal sender As ObjectByVal e As System.Windows.Forms.PaintEventArgs)

            If 
    IsNothing(_bmpThen Return
            
    Dim tmp As Bitmap Nothing

            On Error Resume Next

            tmp 
    DirectCast(_bmp.Clone(), Bitmap)
            
    Dim xOffset As IntegeryOffset As Integer
            Dim alpha 
    As Byte

            
    If _weHaveWaves Then
                Dim tmpData 
    As BitmapData tmp.LockBits(New Rectangle(00_bmpWidth_bmpHeight), ImageLockMode.ReadWritePixelFormat.Format32bppArgb)

                
    Dim tmpBytes As Byte() = New Byte(_bmpWidth _bmpHeight 1) {}

                
    Marshal.Copy(tmpData.Scan0tmpBytes0_bmpWidth _bmpHeight 4)

                For 
    As Integer 1 To _bmpWidth 2
                    
    For As Integer 1 To _bmpHeight 2
                        Dim waveX 
    As Integer CInt(x) >> _scale
                        Dim waveY 
    As Integer CInt(y) >> _scale

                        
    If waveX <= 0 Then
                            waveX 
    1
                        End 
    If
                        If 
    waveY <= 0 Then
                            waveY 
    1
                        End 
    If
                        If 
    waveX >= _waveWidth 1 Then
                            waveX 
    _waveWidth 2
                        End 
    If
                        If 
    waveY >= _waveHeight 1 Then
                            waveY 
    _waveHeight 2
                        End 
    If

                        
    xOffset = (_waves(waveX 1waveY_activeBuffer) - _waves(waveX 1waveY_activeBuffer)) >> 3
                        yOffset 
    = (_waves(waveXwaveY 1_activeBuffer) - _waves(waveXwaveY 1_activeBuffer)) >> 3

                        
    If (xOffset <> 0OrElse (yOffset <> 0Then
                            
    If xOffset >= _bmpWidth 1 Then
                                xOffset 
    _bmpWidth 1
                            End 
    If
                            If 
    yOffset >= _bmpHeight 1 Then
                                yOffset 
    _bmpHeight 1
                            End 
    If
                            If 
    xOffset 0 Then
                                xOffset 
    = -x
                            End 
    If
                            If 
    yOffset 0 Then
                                yOffset 
    = -y
                            End 
    If
                            If 
    xOffset <= 0 Then xOffset 0

                            alpha 
    CByte(200 xOffset)
                            If 
    alpha 0 Then
                                alpha 
    0
                            End 
    If
                            If 
    alpha 255 Then
                                alpha 
    254
                            End 
    If

                            
    tmpBytes(* (_bmpWidth)) = _bmpBytes(* (xOffset + (yOffset) * _bmpWidth))
                            
    tmpBytes(* (_bmpWidth) + 1) = _bmpBytes(* (xOffset + (yOffset) * _bmpWidth) + 1)
                            
    tmpBytes(* (_bmpWidth) + 2) = _bmpBytes(* (xOffset + (yOffset) * _bmpWidth) + 2)
                            
    tmpBytes(* (_bmpWidth) + 3) = alpha

                        End 
    If

                    
    Next
                    
    If Not Err.Number 0 Then Exit For

                
    Next

                Marshal
    .Copy(tmpBytes0tmpData.Scan0_bmpWidth _bmpHeight 4)
                
    tmp.UnlockBits(tmpData)

            
    End If

            
    e.Graphics.DrawImage(tmp00Me.ClientRectangle.WidthMe.ClientRectangle.Height)

            If 
    Not Err.Number 0 Then Debug.WriteLine("WaterEffectControl_Paint: " Err.Description)

            If 
    Not IsNothing(tmpThen tmp.Dispose()

        
    End Sub

        
    Private Sub ProcessWaves()

            
    Dim newBuffer As Integer = If((_activeBuffer 0), 10)
            
    Dim wavesFound As Boolean False
            
    If newBuffer 0 Then newBuffer 1

            On Error Resume Next
            
    For As Integer 1 To _waveWidth 2
                
    For As Integer 1 To _waveHeight 2
                    _waves
    (xynewBuffer) = CShort((((_waves(11_activeBuffer) + _waves(x1_activeBuffer) + _waves(11_activeBuffer) + _waves(1y_activeBuffer) + _waves(1y_activeBuffer) + _waves(11_activeBuffer) + _waves(x1_activeBuffer) + _waves(11_activeBuffer)) >> 2) - _waves(xynewBuffer)))
                    
    'damping
                    If _waves(x, y, newBuffer) <> 0 Then
                        _waves(x, y, newBuffer) -= CShort((_waves(x, y, newBuffer) >> 4))
                        wavesFound = True
                    End If
                    If Not Err.Number = 0 Then Exit For
                Next
                If Not Err.Number = 0 Then Exit For
            Next

            _weHaveWaves = wavesFound
            _activeBuffer = newBuffer

        End Sub

        Private Sub PutDrop(ByVal x As Integer, ByVal y As Integer, ByVal height As Short)
            _weHaveWaves = True
            Dim radius As Integer = 20
            Dim dist As Double
            On Error Resume Next
            For i As Integer = -radius To radius
                For j As Integer = -radius To radius
                    If ((x + i >= 0) AndAlso (x + i < _waveWidth - 1)) AndAlso ((y + j >= 0) AndAlso (y + j < _waveHeight - 1)) Then
                        dist = Math.Sqrt(i * i + j * j)
                        If dist < radius Then
                            _waves(x + i, y + j, _activeBuffer) = CShort((Math.Cos(dist * Math.PI / radius) * height))
                        End If
                    End If
                    If Not Err.Number = 0 Then Return
                Next
                If Not Err.Number = 0 Then Return
            Next
        End Sub

        Private Sub WaterEffectControl_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            On Error Resume Next
            If Not __IsBusy Then
                Dim realX As Integer = CInt(((e.X / CDbl(Me.ClientRectangle.Width)) * _waveWidth))
                Dim realY As Integer = CInt(((e.Y / CDbl(Me.ClientRectangle.Height)) * _waveHeight))
                If Not Err.Number = 0 Then Return
                PutDrop(realX, realY, 200)
            End If
            If Not tmrBalance.Enabled Then tmrBalance.Start()
        End Sub

    #Region "Properties"
        Public Property ImageBitmap() As Bitmap
            Get
                Return _bmp
            End Get
            Set(ByVal value As Bitmap)
                _bmp = value
                If IsNothing(_bmp) Then
                    effectTimer.Stop()
                    tmrBalance.Stop()
                    Return
                Else
                    effectTimer.Start()
                    __IsBusy = False
                End If
                _bmpHeight = _bmp.Height
                _bmpWidth = _bmp.Width

                _waveWidth = _bmpWidth >> _scale
                _waveHeight = _bmpHeight >> _scale
                _waves = New Int16(_waveWidth - 1, _waveHeight - 1, 1) {}

                _bmpBytes = New Byte(_bmpWidth * _bmpHeight * 4 - 1) {}
                _bmpBitmapData = _bmp.LockBits(New Rectangle(0, 0, _bmpWidth, _bmpHeight), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb)
                Marshal.Copy(_bmpBitmapData.Scan0, _bmpBytes, 0, _bmpWidth * _bmpHeight * 4)
            End Set
        End Property
        Public Shadows Property Scale() As Integer
            Get
                Return _scale
            End Get
            Set(ByVal value As Integer)
                _scale = value
            End Set
        End Property
    #End Region
    End Class



    والآن شاهد هذا شرح
    لتحميل




    [DOWNLOAD]
    Download

    [/DOWNLOAD]

    في أمان الله

    )5:")5:")5:")5:")5:")5:"
     
  2. Hitman

    Hitman Developer

    الأنتساب:
    ‏22 فبراير 2013
    المشاركات:
    44
    الإعجابات المتلقاة:
    0
    نقاط الجائزة:
    6
    الوظيفة:
    Student
    الإقامة:
    مصرنا الحبيب
    رد: شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروعvb.net

    يعطيك العافيه ’ {:{7}: واصل :{7}:}
     
  3. ★ قبعة القش ★

    ★ قبعة القش ★ V • I • P

    الأنتساب:
    ‏10 مايو 2014
    المشاركات:
    447
    الإعجابات المتلقاة:
    16
    نقاط الجائزة:
    18
    رد: شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروعvb.net

    الله يعافيك يا غالي
    نوريت موضوع )5:")5:")5:"
     
  4. DJ_HacKeR

    DJ_HacKeR <b><font color="silver" size="4" face="Arial">ṤạĻỖ Developer

    الأنتساب:
    ‏9 ديسمبر 2011
    المشاركات:
    40
    الإعجابات المتلقاة:
    0
    نقاط الجائزة:
    6
    الوظيفة:
    ::.طالب.::
    الإقامة:
    ::.مكه المكرمه.::
    رد: شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروعvb.net

    آلله يعَطيكَِ الفَ عآفيهةَ

    مَوضعك جَميلَ و بآنتظآرَ القآدمَ بآذنِ آلله

    دمممَ ـتت
     
  5. M!st3я Y0u

    M!st3я Y0u Developer

    الأنتساب:
    ‏19 ديسمبر 2011
    المشاركات:
    76
    الإعجابات المتلقاة:
    2
    نقاط الجائزة:
    8
    الوظيفة:
    تـلـمـيـذ
    الإقامة:
    TuNiSiA
    رد: شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروعvb.net

    تسلم الأيادي التي كتبت هالحروف

    ونثرت عبير الورد بين السطور

    لا أروع من هذة الجمل ولا هذة التراكيب

    شكرا لك علي الطرح الرائع والمميز

    تحياتي لك ^:"
     
  6. ★ قبعة القش ★

    ★ قبعة القش ★ V • I • P

    الأنتساب:
    ‏10 مايو 2014
    المشاركات:
    447
    الإعجابات المتلقاة:
    16
    نقاط الجائزة:
    18
    رد: شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروعvb.net

    والله يعافيك حبيبي )5:")5:")5:")5:"
     
  7. ★ قبعة القش ★

    ★ قبعة القش ★ V • I • P

    الأنتساب:
    ‏10 مايو 2014
    المشاركات:
    447
    الإعجابات المتلقاة:
    16
    نقاط الجائزة:
    18
    رد: شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروعvb.net

    كلماتك جميلة و تشعرني بالخجل
    هههههه
    تسلم إيدك حبيبي)5:")5:")5:")5:")5:")5:"​
     
  8. TeePlow

    TeePlow V • I • P

    الأنتساب:
    ‏12 مارس 2014
    المشاركات:
    400
    الإعجابات المتلقاة:
    9
    نقاط الجائزة:
    18
    رد: شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروعvb.net

    السلام عليكم
    مشكور على الشرح الرائع واصل يا بطل :{10}:
     
  9. DeeF

    DeeF Developer

    الأنتساب:
    ‏15 نوفمبر 2012
    المشاركات:
    16
    الإعجابات المتلقاة:
    4
    نقاط الجائزة:
    3
    الإقامة:
    I Q - T E A M
    رد: شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروعvb.net

    مشكوور يا بطل علي هذا الشرح الاكثر من رائع

    تسلم الايادي
     
  10. ★ قبعة القش ★

    ★ قبعة القش ★ V • I • P

    الأنتساب:
    ‏10 مايو 2014
    المشاركات:
    447
    الإعجابات المتلقاة:
    16
    نقاط الجائزة:
    18
    رد: شرح للمبتدئين و كيفية وضع تأثيرات ماء في مشروعvb.net

    الله يسلمك حبيبي :{10}::{10}::{10}:
     

مشاركة هذه الصفحة