تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] خلفيه شفافه
#11
الحمد لله استطعت أحل لك المشكلة و ستجد المشروع في اللينك التالي و عموما انا لم أغير في الوان خلفية الفورم فأنت لا تحتاج الي ذلك

الفكرة عبارة عن التخلص من لون خلفية الصورة ثم ضبط Form Region لتناسب الصورة

Shaped Form
الرد }}}
تم الشكر بواسطة: أسامة , ابو ابراهيم
#12
شكرا للاخ المبدع سيلفارلايت على حل المشكلة

بس انا حاب اقول كلمة

تقنية الWindows forms ابدا غير مخصصة لهذا النوع من الواجهات فهي تسبب ثقل في رسم الفورم وتحديثه من خلال الcpu

لذلك فكر في انواع واجهات فعالة اكثر مثل الRibbon او الmetro وغيرها


اما اذا اردت الاختصاص اكثر في الرسوميات والواجهات المعقدة (كالثري دي) والانميشن وغيرها استعمل تقنية WPF فيمكنك حل هذه المشكلة في ثواني لان هناك توجد خصائص لتفعيل الشفافية بدون تعقيد (مثل الفوتشوب)


هذا رايي باختصار (اذا اردت التعامل مع واجهات معقدة وصور وانميشن اتجه لتقنية WPF ، اما ان اردت المواصلة على الWindows forms فعليك التفكير في واجهات فعالة لاترهقك في التصميم ولا تجعل الForms بطيئ والجهاز ايضا.


اضن اخي سيلفارلايت يوافقني الرأي بحكم انه يبدو انه تعامل مع تقنية siliverlight الاخت التوأم ل WPF
الرد }}}
تم الشكر بواسطة: أسامة
#13
الأخ الفاضل الشاكي لله شكرا جزيلا لك

عموما انا من فترة و انا اعمل علي موضوع الشفافية و الشفافية في مفهومها تختلف تماما عن السؤال موضوع النقاش في هذا الموضوع

بالنسبة لتقنية Metro فاعتقد إنا الاساس فيها هو Windows Forms اما تقنية WPF فهي تقنية مماثلة للويندوز فورم ايضا

عموما انا بعد قضيت وقت كبير في دراسة هذا الموضوع استطعت بفضل الله أن احل جزء كبير جدا من المشاكل الخاصة ب الجرافكس و تطوير شكل الفورم بدون استخدام دوال API القديمة بل و الحمد لله استطعت تحويل بعض دوال API الخاصة بالويندوز الي Managed Code
و حاليا اعمل علي مكتبة تدعم الشفافية تماما في كل شئ و ساطرحها قريبا ان شاء لله في الموقع للإستخدام العام

عموما و بدون أن أطيل عليك في الحديث كل شئ في الويندوز فورم او اي تقنية اخري أساسه الألوان و الصور

و مرة اخري شكرا جزيلا لك
الرد }}}
تم الشكر بواسطة: أسامة
#14
بالنوفييق لك اخي سيلفرلايت

بعيدا عن الموضوع قليلا ، اقوى واجهة شفتها هي واجهة برنامج fruity loops





]

^ للعلم هذه ليست منصة اطلاق صواريخ  Big Grin  بل واجهة تفاعلية 100%



رغم ان البرنامج يخص مهندسي الصوت وليس من اختصاصي الا ان نوافذ البرنامج اذهلتني جدا في تفاعلها مع المستخدم
انا اتسائل ماهي التقنية التي استطاعو بها رسم هذه الواجهات القوية رسوميا وتفاعليا
الرد }}}
تم الشكر بواسطة: أسامة
#15
(26-07-15, 03:29 AM)silverlight كتب : الحمد لله استطعت أحل لك المشكلة و ستجد المشروع في اللينك التالي و عموما انا لم أغير في الوان خلفية الفورم فأنت لا تحتاج الي ذلك

الفكرة عبارة عن التخلص من لون خلفية الصورة ثم ضبط Form Region لتناسب الصورة

Shaped Form
شكرآ جزيلآ اخى لاكن يوجد مشكله الادوات لا تظهر
الرد }}}
تم الشكر بواسطة:
#16
دي منصة صواريخ فعلا ...... Smile  و لتنفيذ مثلها تحتاج الي مجهود غير عادي من مبرمجين و متخصصين ف برامج الجرافكس لكن للاسف انا اعمل وحدي Huh  و تنفيذ مثل تلك الواجهة يحتاج الي وقت طويل للاسف يا اخي الفاضل

لكن و علي كل حال إن الله لا يضيع أجر اي إنسان مثابر ....... و لو محتاج تصمم منصة صواريخ مثلها Smile او واجهات مشابهة فأنا استطيع أن أمد لك يد العون في ذلك قيما يختص ب الجرافكس و الرسومات تحديدا
لكننا قد نحتاج أيضا الي شخص يجيد استخدام برنامج الفوتو شوب و لديه ذوق جيد في اختيار الألوان

الأخ أسامة

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

الأخ أسامة

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


كود :
Public Class ShapedForm
   Inherits Form

   Private closeButton As Button

   Public Sub New()
       MyBase.FormBorderStyle = Windows.Forms.FormBorderStyle.None
       MyBase.StartPosition = FormStartPosition.CenterScreen
       Dim sourceBitmap As Bitmap = My.Resources.earth
       Dim pixelColor As Color = sourceBitmap.GetPixel(0, 0)
       Dim bmp As Bitmap = SetBitmapBackColor(sourceBitmap.Clone, pixelColor, SystemColors.Control)
       GetImageRegion(bmp)
       Me.BackgroundImage = bmp
       Me.BackgroundImageLayout = ImageLayout.Center
       MyBase.Size = New Size(bmp.Width, bmp.Height)

       ' add the close button & do not forget to dispose the button
       closeButton = New Button
       closeButton.Text = "Exit"
       closeButton.Location = New System.Drawing.Point(200, 200)
       AddHandler closeButton.Click, AddressOf closeButton_Click
       Me.Controls.Add(closeButton)

   End Sub

   Private Function ImageToRegion(source As Bitmap, colorBack As Color) As Region
       Dim clr As Color = Color.FromArgb(colorBack.R, colorBack.G, colorBack.B)
       Dim rgn As Region = New Region()
       rgn.MakeEmpty()
       Dim rect As New Rectangle(0, 0, 0, 0)
       Dim flag As Boolean = False
       For y As Integer = 0 To source.Height - 1
           For x As Integer = 0 To source.Width - 1
               If Not flag Then
                   If source.GetPixel(x, y) <> clr Then
                       flag = True
                       rect.X = x
                       rect.Y = y
                       rect.Height = 1
                   End If
               Else
                   If source.GetPixel(x, y) = clr Then
                       flag = False
                       rect.Width = x - rect.X
                       rgn.Union(rect)
                   End If
               End If
           Next
           If flag Then
               flag = False
               rect.Width = source.Width - rect.X
               rgn.Union(rect)
           End If
       Next
       Return rgn
   End Function

   Private Sub GetImageRegion(img As Bitmap)
       Dim bmp As Bitmap = img
       Dim rgn As Region = ImageToRegion(bmp, SystemColors.Control)
       Me.Region = rgn
   End Sub

   Private Function SetBitmapBackColor(source As Bitmap, sourceColor As Color, destinationColor As Color) As Bitmap

       Dim result As System.Drawing.Bitmap = CType(Nothing, Bitmap)
       Try
           Dim bmp As Bitmap = CType(source.Clone(), Bitmap)
           Dim rect As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height)
           Dim bmpData As Imaging.BitmapData = bmp.LockBits(rect, Imaging.ImageLockMode.ReadWrite, Imaging.PixelFormat.Format32bppArgb)

           ' Get the address of the first line.
           Dim ptr As IntPtr = bmpData.Scan0

           Dim length As Integer = Math.Abs(bmpData.Stride) * bmpData.Height
           Dim outputBytes = New Byte(length - 1) {}

           '  Copy the RGB values into the array.
           System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, outputBytes, 0, length)
           Dim bpp = bmpData.Stride \ bmpData.Width

           Dim i = 0
           While i < length
               Dim clr As Color = Color.FromArgb(If(bpp = 4, outputBytes(i + 3), 255), outputBytes(i + 2), outputBytes(i + 1), outputBytes(i))
               If clr = sourceColor Then
                   If bpp = 4 Then
                       outputBytes(i + 3) = destinationColor.A
                   End If
                   outputBytes(i + 2) = destinationColor.R
                   outputBytes(i + 1) = destinationColor.G
                   outputBytes(i) = destinationColor.B
               End If
               i += bpp
           End While
           ' Copy the RGB values back to the bitmap
           System.Runtime.InteropServices.Marshal.Copy(outputBytes, 0, ptr, length)
           bmp.UnlockBits(bmpData)
           result = bmp
       Catch ex As Exception
           result = source
       End Try
       Return result
   End Function

   Private Sub closeButton_Click(sender As Object, e As EventArgs)
       Application.Exit()
   End Sub

End Class
الكود التالي يوضح لك كيفية عمل dispose للكونترول الذي قمنا بإضافته
عليك ان تضيفه الي الفورم أعلاه

كود :
   Private Sub DisposeObjects()
       If Me.closeButton IsNot Nothing Then
           RemoveHandler closeButton.Click, AddressOf closeButton_Click
           closeButton.Dispose()
           closeButton = Nothing
       End If
   End Sub

   Protected Overrides Sub Dispose(disposing As Boolean)
       DisposeObjects()
       MyBase.Dispose(disposing)
   End Sub

بالتوفيق ان شاء الله
الرد }}}
تم الشكر بواسطة: أسامة
#17
(26-07-15, 05:23 PM)silverlight كتب : دي منصة صواريخ فعلا ...... Smile  و لتنفيذ مثلها تحتاج الي مجهود غير عادي من مبرمجين و متخصصين ف برامج الجرافكس لكن للاسف انا اعمل وحدي Huh  و تنفيذ مثل تلك الواجهة يحتاج الي وقت طويل للاسف يا اخي الفاضل

لكن و علي كل حال إن الله لا يضيع أجر اي إنسان مثابر ....... و لو محتاج تصمم منصة صواريخ مثلها Smile او واجهات مشابهة فأنا استطيع أن أمد لك يد العون في ذلك قيما يختص ب الجرافكس و الرسومات تحديدا
لكننا قد نحتاج أيضا الي شخص يجيد استخدام برنامج الفوتو شوب و لديه ذوق جيد في اختيار الألوان

الأخ أسامة

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

الأخ أسامة

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


كود :
Public Class ShapedForm
   Inherits Form

   Private closeButton As Button

   Public Sub New()
       MyBase.FormBorderStyle = Windows.Forms.FormBorderStyle.None
       MyBase.StartPosition = FormStartPosition.CenterScreen
       Dim sourceBitmap As Bitmap = My.Resources.earth
       Dim pixelColor As Color = sourceBitmap.GetPixel(0, 0)
       Dim bmp As Bitmap = SetBitmapBackColor(sourceBitmap.Clone, pixelColor, SystemColors.Control)
       GetImageRegion(bmp)
       Me.BackgroundImage = bmp
       Me.BackgroundImageLayout = ImageLayout.Center
       MyBase.Size = New Size(bmp.Width, bmp.Height)

       ' add the close button & do not forget to dispose the button
       closeButton = New Button
       closeButton.Text = "Exit"
       closeButton.Location = New System.Drawing.Point(200, 200)
       AddHandler closeButton.Click, AddressOf closeButton_Click
       Me.Controls.Add(closeButton)

   End Sub

   Private Function ImageToRegion(source As Bitmap, colorBack As Color) As Region
       Dim clr As Color = Color.FromArgb(colorBack.R, colorBack.G, colorBack.B)
       Dim rgn As Region = New Region()
       rgn.MakeEmpty()
       Dim rect As New Rectangle(0, 0, 0, 0)
       Dim flag As Boolean = False
       For y As Integer = 0 To source.Height - 1
           For x As Integer = 0 To source.Width - 1
               If Not flag Then
                   If source.GetPixel(x, y) <> clr Then
                       flag = True
                       rect.X = x
                       rect.Y = y
                       rect.Height = 1
                   End If
               Else
                   If source.GetPixel(x, y) = clr Then
                       flag = False
                       rect.Width = x - rect.X
                       rgn.Union(rect)
                   End If
               End If
           Next
           If flag Then
               flag = False
               rect.Width = source.Width - rect.X
               rgn.Union(rect)
           End If
       Next
       Return rgn
   End Function

   Private Sub GetImageRegion(img As Bitmap)
       Dim bmp As Bitmap = img
       Dim rgn As Region = ImageToRegion(bmp, SystemColors.Control)
       Me.Region = rgn
   End Sub

   Private Function SetBitmapBackColor(source As Bitmap, sourceColor As Color, destinationColor As Color) As Bitmap

       Dim result As System.Drawing.Bitmap = CType(Nothing, Bitmap)
       Try
           Dim bmp As Bitmap = CType(source.Clone(), Bitmap)
           Dim rect As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height)
           Dim bmpData As Imaging.BitmapData = bmp.LockBits(rect, Imaging.ImageLockMode.ReadWrite, Imaging.PixelFormat.Format32bppArgb)

           ' Get the address of the first line.
           Dim ptr As IntPtr = bmpData.Scan0

           Dim length As Integer = Math.Abs(bmpData.Stride) * bmpData.Height
           Dim outputBytes = New Byte(length - 1) {}

           '  Copy the RGB values into the array.
           System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, outputBytes, 0, length)
           Dim bpp = bmpData.Stride \ bmpData.Width

           Dim i = 0
           While i < length
               Dim clr As Color = Color.FromArgb(If(bpp = 4, outputBytes(i + 3), 255), outputBytes(i + 2), outputBytes(i + 1), outputBytes(i))
               If clr = sourceColor Then
                   If bpp = 4 Then
                       outputBytes(i + 3) = destinationColor.A
                   End If
                   outputBytes(i + 2) = destinationColor.R
                   outputBytes(i + 1) = destinationColor.G
                   outputBytes(i) = destinationColor.B
               End If
               i += bpp
           End While
           ' Copy the RGB values back to the bitmap
           System.Runtime.InteropServices.Marshal.Copy(outputBytes, 0, ptr, length)
           bmp.UnlockBits(bmpData)
           result = bmp
       Catch ex As Exception
           result = source
       End Try
       Return result
   End Function

   Private Sub closeButton_Click(sender As Object, e As EventArgs)
       Application.Exit()
   End Sub

End Class
الكود التالي يوضح لك كيفية عمل dispose للكونترول الذي قمنا بإضافته
عليك ان تضيفه الي الفورم أعلاه

كود :
   Private Sub DisposeObjects()
       If Me.closeButton IsNot Nothing Then
           RemoveHandler closeButton.Click, AddressOf closeButton_Click
           closeButton.Dispose()
           closeButton = Nothing
       End If
   End Sub

   Protected Overrides Sub Dispose(disposing As Boolean)
       DisposeObjects()
       MyBase.Dispose(disposing)
   End Sub

بالتوفيق ان شاء الله
جزاك الله خير اخى اسف على تعبك Angel
الرد }}}
تم الشكر بواسطة:
#18
(26-07-15, 05:23 PM)silverlight كتب : دي منصة صواريخ فعلا ...... Smile  و لتنفيذ مثلها تحتاج الي مجهود غير عادي من مبرمجين و متخصصين ف برامج الجرافكس لكن للاسف انا اعمل وحدي Huh  و تنفيذ مثل تلك الواجهة يحتاج الي وقت طويل للاسف يا اخي الفاضل

لكن و علي كل حال إن الله لا يضيع أجر اي إنسان مثابر ....... و لو محتاج تصمم منصة صواريخ مثلها Smile او واجهات مشابهة فأنا استطيع أن أمد لك يد العون في ذلك قيما يختص ب الجرافكس و الرسومات تحديدا
لكننا قد نحتاج أيضا الي شخص يجيد استخدام برنامج الفوتو شوب و لديه ذوق جيد في اختيار الألوان
السلام عليكم ورحمة الله وبركاته
نعم صدقت اخي العزيز اهم شيئ يتوفر عندك مصمم جرافيك فنان
انا مصمم جرافيك ولكن لحد الان لا امتلك خبرة طويلة لان في الاساس انا مختص اكثر بالثري دي
انا فقط كنت متعجب كيف يصممون هذه الواجهات باستعمال الAPI الوندوز لوحده !!!
يبدو ان لديهم Framework او Engine خاص بهم يعمل مع DirectX لعمل هذه التصاميم
المهم احب اقولك ان الموضوع ليس صعبا ابدا ان استعملت تقنية WPF
فهذا الKnob اقتبست فكرته من واجهة الصواريخ Big Grin  ثم قمت بتنفيذه في WPF في ساعتين

اذا اردت الاطلاع اكثر هذا هو الموضوع
http://vb4arb.com/vb/thread-12838.html

انا برايي الابتعاد عن صناعة المكتبات وانشاء Engine خاص لإنشاء التصاميم المعقدة في الWindows Forms
والا فالاتجاه الى WPF افضل هذا رايي

تحياتي
الرد }}}
تم الشكر بواسطة: silverlight , ابو ابراهيم
#19
الأخ الفاضل الشاكي لله

بارك الله فيك و شكرا جزيلا لك علي مشاركة أفكارك مع الاعضاء في المنتدي

لكن أنا احبذ بناء المكتبات لأنه لدي قناعة انه من اهم الاشياء في البرمجة فهي تقلل من الوقت و المجهود و التكرار في كتابة الكود
أيضا لدي قناعة ان مايمكن صناعته باستخدام WPF يمكن صناعته بالويندوز فورم و لكن الأمر يحتاج الي مجهود اكبر قليلا من المبرمج

تمنياتي لك بالتوفيق سواء استخدمت WPF او اي شئ اخر .... عموما انا أحترم جدا المبدعين و خصوصا في الجرافيكس او في اي شئ اخر
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] لون خلفيه label محمد مسافر 3 1,863 27-02-19, 06:59 PM
آخر رد: elgokr
  جلب خلفيه سطح المكتب nin9e 10 4,751 24-01-14, 03:39 PM
آخر رد: nin9e
  برنامج تغيير خلفيه سطح المكتب nin9e 22 11,387 20-01-14, 04:24 PM
آخر رد: nin9e
  استفسار عن تغير خلفيه المشروع nin9e 27 8,612 24-08-13, 03:01 AM
آخر رد: MSDOS

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


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