تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Blend Form
#1
مقدمــــة :

كلمة Blend ترجمتها من الإنجليزية الي العربية تعني مزيج من شيئان أو خليط من شيئان لتخرج في النهاية بشئ فيه انسجام أو تخرج بتوليفة مناسبة من عذا المزيج
ولكي تقوم بعمل Blend للفورم يجب أن تدرس و تفهم التالي :
شفافية الألوان
خلط الألوان
فصل الألوان
استخلاص لون من لون أخر

وعلي ما أعتقد أن مايكروسوفت قد استخدمت هذا الأسلوب في Windows Presentation Foundation (WPF) لكي تحصل علي فورم شكله لطيف و جميل
طبعا هناك بعضا من الناس قد يعتقدون أن WPF أفضل من الناحية الجمالية بكثيير عن الويندوز فورم وبالتاكيد هذا الاعتقاد له احترامه ولكني أختلق تماما مع هذا الرأي
وهذا الموضوع هو إثبات بسيط لما يمكن أن تفعله في الويندوز فورم Windows Forms
وعلي ما أظن و الله أعلم أنك تستطيع أن تفعل في الويندوز فورم الكثيير و الكثيير بشرط أن تكون متفهما لما تفعله

أهم شئ في فكرة Blend هو أن تتعلم كيفية استخلاص لون من لون أخر أو حساب شفافية الألوان
المعادلات الرياضية التي توضح كيفية حساب Blend موجودة في اللينك التالي

Blend Function

والمعادلات مصممة للتعامل مع الصور أصلا
لكن علينا أن لا ننسي أن الصور مكوناتها عبارة عن ألوان و بالتالي نفس المعادلات يمكن استخدامها مع الألوان
أيضا لا يجب أن لا ننسي أن الفورم أصله صورة
الكود التالي عبارة عن مثال توضيحي لكيفية استخدام معادلات مايكروسوفت

مثال:

PHP كود :
  Private Function CalculateColor(sca As Integersrc As Colordst As Color) As Color
        Dim dstRed 
As Double src.* (sca 255.0) + dst.* (1.0 - (sca 255.0))
 
       Dim dstGreen As Double src.* (sca 255.0) + dst.* (1.0 - (sca 255.0))
 
       Dim dstBlue As Double src.* (sca 255.0) + dst.* (1.0 - (sca 255.0))
 
       Dim dstAlpha As Double src.* (sca 255.0) + dst.* (1.0 - (sca 255.0))
 
       Return Color.FromArgb(CByte(dstAlpha), CByte(dstRed), CByte(dstGreen), CByte(dstBlue))
 
   End Function 

يمكن استخدام الدالة كالأتي:
PHP كود :
   Dim sca As Integer 84
        Dim src 
As Color Color.Blue
        Dim dst 
As Color Me.BackColor
        Dim alpha 
As Byte 32

      
        Dim clr 
As Color CalculateColor(scasrcdst)
 
       Dim blended As Color Color.FromArgb(alphaclr

حاول عزيزي القارئ أن تغير قيمة المتغير sca و المتغير alpha  و تلاحظ اللون الذي ستحصل عليه

بالطبع المعادلات قد تكون تقليدية و معروفة لمعظم المبرمجين و لو بحثت جيدا علي النت ستجد موضوعات كثيرة  تتخدث عن Color Blend
لكن ما لم تقوله مايكروسوفت صراحة وتركت للمبرمج أن يكتشفه بنفسه من الموضوع الموجود في اللينك التالي

SetLayeredWindowAttributes function

هو أنه يمكن حساب قيمة Alpha من أي لون
ثم بعد ذلك يتم استخدام هذه القيمة لحساب قيمة Opacity او لحساب قيمة الشفافية الخاصة بالفورم

و الدالة التالية توضح كيفية حساب قيمة الشفافية من لون خلفية الفورم مثلا

PHP كود :
  Private Function GetOpacity(sca As BytesourceColor As Color) As Double
        sca 
Byte.MaxValue sca
        Dim dest 
As Color Color.FromArgb(CInt((- (sca Byte.MaxValue)) * Byte.MaxValue), sourceColor)
 
       Return CDbl(CByte(If(dest.255255, If(dest.00dest.A))) / Byte.MaxValue)
 
   End Function 

الكود التالي يوضح كيفية استخدام الدالة في تخصيص قيمة الشفافية للفروم

PHP كود :
Me.Opacity GetOpacity(100Me.BackColor

يمكن تطبيق الفكرة أعلاه في تغيير شكل الفورم تماما لكن للأسف عليك أن ترسم الفورم كاملا
والكود التالي عبارة عن مثال سريع لتغيير شكل الفورم

PHP كود :
Public Class Form1

    Private _alpha 
As Byte 160
    Private _shadowColor 
As Color

    Public Property Allpha 
As Byte
        Get
            Return Me
._alpha
        End Get
        Set
(value As Byte)
 
           Me._alpha value
            Me
.Opacity GetOpacity(_alphaMyBase.BackColor)
 
           Me.Refresh()
 
       End Set
    End Property

    Public Property ShadowColor 
As Color
        Get
            Return Me
._shadowColor
        End Get
        Set
(value As Color)
 
           Me._shadowColor value
            Me
.Refresh()
 
       End Set
    End Property

    Private 
Function GetOpacity(sca As BytesourceColor As Color) As Double
        sca 
Byte.MaxValue sca
        Dim dest 
As Color Color.FromArgb(CInt((- (sca Byte.MaxValue)) * Byte.MaxValue), sourceColor)
 
       Return CDbl(CByte(If(dest.255255, If(dest.00dest.A))) / Byte.MaxValue)
 
   End Function

 
   Protected Overrides Sub OnPaint(As PaintEventArgs)
 
       MyBase.OnPaint(e)
 
       Dim r As Rectangle = New Rectangle(22Me.Width 4Me.Height 4)
 
       Using sb As SolidBrush = New SolidBrush(Color.FromArgb(Me._alpha_shadowColor))
 
           e.Graphics.FillRectangle(sbr)
 
       End Using

        Using sb 
As New SolidBrush(Color.FromArgb(Me._alpha_shadowColor))
 
           Dim caption As Rectangle = New Rectangle(33Me.Width 628)
 
           e.Graphics.FillRectangle(sbcaption)
 
           e.Graphics.DrawString(Me.TextMe.Font, New SolidBrush(Color.White), New Point(44))
 
       End Using
    End Sub

    Protected Overrides Sub OnLoad
(As EventArgs)
 
       MyBase.OnLoad(e)
 
       MyBase.BackColor Color.Blue
        MyBase
.StartPosition FormStartPosition.Manual
        MyBase
.FormBorderStyle FormBorderStyle.None
        MyBase
.ShowInTaskbar False
        MyBase
.ShowIcon False
        MyBase
.Size = New Size(300300)
 
       Me.DoubleBuffered True
        Me
._shadowColor Color.Black
        Me
.Opacity GetOpacity(_alphaMyBase.BackColor)
 
   End Sub

End 
Class 

أتمني أن يكون الموضوع مقيدا للبعض منكم
تقبلوا تحياتي
Retired
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  Retrieve Owner and Form of a Control silverlight 0 370 12-12-15, 05:28 AM
آخر رد: silverlight
  [كود] تأثيرات على Form او على Objects HASAN6.0 4 774 30-11-15, 10:36 PM
آخر رد: Bettayeb
  [مقال] Fun with Windows Forms & Graphics - Spy Form silverlight 1 717 23-06-15, 09:33 PM
آخر رد: silverlight
  إيجاد جميع الكونترول الموجودة في الفورم Recursively Find All Controls in Form silverlight 0 820 26-05-15, 12:31 AM
آخر رد: silverlight
  معلومة ::: How to resize Windows form to fit Windows screen ::: RaggiTech 0 534 06-10-12, 09:53 PM
آخر رد: RaggiTech
  معلومة ::: Open Form As Single RaggiTech 0 515 06-10-12, 09:28 PM
آخر رد: RaggiTech
  How To Move Borderless Form RaggiTech 1 365 01-10-12, 03:57 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم