المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
26-07-15, 03:29 AM
(آخر تعديل لهذه المشاركة : 26-07-15, 03:32 AM {2} بواسطة silverlight.)
الحمد لله استطعت أحل لك المشكلة و ستجد المشروع في اللينك التالي و عموما انا لم أغير في الوان خلفية الفورم فأنت لا تحتاج الي ذلك
الفكرة عبارة عن التخلص من لون خلفية الصورة ثم ضبط Form Region لتناسب الصورة
Shaped Form
المشاركات : 1,733
المواضيع 147
الإنتساب : Sep 2012
السمعة :
215
الشكر: 8484
تم شكره 12163 مرات في 1145 مشاركات
شكرا للاخ المبدع سيلفارلايت على حل المشكلة
بس انا حاب اقول كلمة
تقنية الWindows forms ابدا غير مخصصة لهذا النوع من الواجهات فهي تسبب ثقل في رسم الفورم وتحديثه من خلال الcpu
لذلك فكر في انواع واجهات فعالة اكثر مثل الRibbon او الmetro وغيرها
اما اذا اردت الاختصاص اكثر في الرسوميات والواجهات المعقدة (كالثري دي) والانميشن وغيرها استعمل تقنية WPF فيمكنك حل هذه المشكلة في ثواني لان هناك توجد خصائص لتفعيل الشفافية بدون تعقيد (مثل الفوتشوب)
هذا رايي باختصار (اذا اردت التعامل مع واجهات معقدة وصور وانميشن اتجه لتقنية WPF ، اما ان اردت المواصلة على الWindows forms فعليك التفكير في واجهات فعالة لاترهقك في التصميم ولا تجعل الForms بطيئ والجهاز ايضا.
اضن اخي سيلفارلايت يوافقني الرأي بحكم انه يبدو انه تعامل مع تقنية siliverlight الاخت التوأم ل WPF
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
الأخ الفاضل الشاكي لله شكرا جزيلا لك
عموما انا من فترة و انا اعمل علي موضوع الشفافية و الشفافية في مفهومها تختلف تماما عن السؤال موضوع النقاش في هذا الموضوع
بالنسبة لتقنية Metro فاعتقد إنا الاساس فيها هو Windows Forms اما تقنية WPF فهي تقنية مماثلة للويندوز فورم ايضا
عموما انا بعد قضيت وقت كبير في دراسة هذا الموضوع استطعت بفضل الله أن احل جزء كبير جدا من المشاكل الخاصة ب الجرافكس و تطوير شكل الفورم بدون استخدام دوال API القديمة بل و الحمد لله استطعت تحويل بعض دوال API الخاصة بالويندوز الي Managed Code
و حاليا اعمل علي مكتبة تدعم الشفافية تماما في كل شئ و ساطرحها قريبا ان شاء لله في الموقع للإستخدام العام
عموما و بدون أن أطيل عليك في الحديث كل شئ في الويندوز فورم او اي تقنية اخري أساسه الألوان و الصور
و مرة اخري شكرا جزيلا لك
المشاركات : 1,733
المواضيع 147
الإنتساب : Sep 2012
السمعة :
215
الشكر: 8484
تم شكره 12163 مرات في 1145 مشاركات
26-07-15, 04:51 PM
(آخر تعديل لهذه المشاركة : 26-07-15, 05:06 PM {2} بواسطة الشاكي لله.)
بالنوفييق لك اخي سيلفرلايت
بعيدا عن الموضوع قليلا ، اقوى واجهة شفتها هي واجهة برنامج fruity loops
]
^ للعلم هذه ليست منصة اطلاق صواريخ بل واجهة تفاعلية 100%
رغم ان البرنامج يخص مهندسي الصوت وليس من اختصاصي الا ان نوافذ البرنامج اذهلتني جدا في تفاعلها مع المستخدم
انا اتسائل ماهي التقنية التي استطاعو بها رسم هذه الواجهات القوية رسوميا وتفاعليا
المشاركات : 340
المواضيع 119
الإنتساب : Jul 2013
السمعة :
6
الشكر: 599
تم شكره 466 مرات في 66 مشاركات
(26-07-15, 03:29 AM)silverlight كتب : الحمد لله استطعت أحل لك المشكلة و ستجد المشروع في اللينك التالي و عموما انا لم أغير في الوان خلفية الفورم فأنت لا تحتاج الي ذلك
الفكرة عبارة عن التخلص من لون خلفية الصورة ثم ضبط Form Region لتناسب الصورة
Shaped Form
شكرآ جزيلآ اخى لاكن يوجد مشكله الادوات لا تظهر
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
26-07-15, 05:23 PM
(آخر تعديل لهذه المشاركة : 26-07-15, 06:20 PM {2} بواسطة silverlight.)
دي منصة صواريخ فعلا ...... و لتنفيذ مثلها تحتاج الي مجهود غير عادي من مبرمجين و متخصصين ف برامج الجرافكس لكن للاسف انا اعمل وحدي و تنفيذ مثل تلك الواجهة يحتاج الي وقت طويل للاسف يا اخي الفاضل
لكن و علي كل حال إن الله لا يضيع أجر اي إنسان مثابر ....... و لو محتاج تصمم منصة صواريخ مثلها او واجهات مشابهة فأنا استطيع أن أمد لك يد العون في ذلك قيما يختص ب الجرافكس و الرسومات تحديدا
لكننا قد نحتاج أيضا الي شخص يجيد استخدام برنامج الفوتو شوب و لديه ذوق جيد في اختيار الألوان
الأخ أسامة
حاول تضيف الأدوات برمجيا و لنري ماذا سيحدث او عليك ان تقوم بتوريث هذا الفورم الي فورم أخر ثم تضيف له االأدول في مرحلة 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
بالتوفيق ان شاء الله
المشاركات : 340
المواضيع 119
الإنتساب : Jul 2013
السمعة :
6
الشكر: 599
تم شكره 466 مرات في 66 مشاركات
(26-07-15, 05:23 PM)silverlight كتب : دي منصة صواريخ فعلا ...... و لتنفيذ مثلها تحتاج الي مجهود غير عادي من مبرمجين و متخصصين ف برامج الجرافكس لكن للاسف انا اعمل وحدي و تنفيذ مثل تلك الواجهة يحتاج الي وقت طويل للاسف يا اخي الفاضل
لكن و علي كل حال إن الله لا يضيع أجر اي إنسان مثابر ....... و لو محتاج تصمم منصة صواريخ مثلها او واجهات مشابهة فأنا استطيع أن أمد لك يد العون في ذلك قيما يختص ب الجرافكس و الرسومات تحديدا
لكننا قد نحتاج أيضا الي شخص يجيد استخدام برنامج الفوتو شوب و لديه ذوق جيد في اختيار الألوان
الأخ أسامة
حاول تضيف الأدوات برمجيا و لنري ماذا سيحدث او عليك ان تقوم بتوريث هذا الفورم الي فورم أخر ثم تضيف له االأدول في مرحلة 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
بالتوفيق ان شاء الله
جزاك الله خير اخى اسف على تعبك
المشاركات : 1,733
المواضيع 147
الإنتساب : Sep 2012
السمعة :
215
الشكر: 8484
تم شكره 12163 مرات في 1145 مشاركات
28-07-15, 07:07 AM
(آخر تعديل لهذه المشاركة : 28-07-15, 08:31 AM {2} بواسطة الشاكي لله.)
(26-07-15, 05:23 PM)silverlight كتب : دي منصة صواريخ فعلا ...... و لتنفيذ مثلها تحتاج الي مجهود غير عادي من مبرمجين و متخصصين ف برامج الجرافكس لكن للاسف انا اعمل وحدي و تنفيذ مثل تلك الواجهة يحتاج الي وقت طويل للاسف يا اخي الفاضل
لكن و علي كل حال إن الله لا يضيع أجر اي إنسان مثابر ....... و لو محتاج تصمم منصة صواريخ مثلها او واجهات مشابهة فأنا استطيع أن أمد لك يد العون في ذلك قيما يختص ب الجرافكس و الرسومات تحديدا
لكننا قد نحتاج أيضا الي شخص يجيد استخدام برنامج الفوتو شوب و لديه ذوق جيد في اختيار الألوان
السلام عليكم ورحمة الله وبركاته
نعم صدقت اخي العزيز اهم شيئ يتوفر عندك مصمم جرافيك فنان
انا مصمم جرافيك ولكن لحد الان لا امتلك خبرة طويلة لان في الاساس انا مختص اكثر بالثري دي
انا فقط كنت متعجب كيف يصممون هذه الواجهات باستعمال الAPI الوندوز لوحده !!!
يبدو ان لديهم Framework او Engine خاص بهم يعمل مع DirectX لعمل هذه التصاميم
المهم احب اقولك ان الموضوع ليس صعبا ابدا ان استعملت تقنية WPF
فهذا الKnob اقتبست فكرته من واجهة الصواريخ ثم قمت بتنفيذه في WPF في ساعتين
اذا اردت الاطلاع اكثر هذا هو الموضوع
http://vb4arb.com/vb/thread-12838.html
انا برايي الابتعاد عن صناعة المكتبات وانشاء Engine خاص لإنشاء التصاميم المعقدة في الWindows Forms
والا فالاتجاه الى WPF افضل هذا رايي
تحياتي
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
01-08-15, 08:59 PM
(آخر تعديل لهذه المشاركة : 02-08-15, 03:56 PM {2} بواسطة silverlight.)
الأخ الفاضل الشاكي لله
بارك الله فيك و شكرا جزيلا لك علي مشاركة أفكارك مع الاعضاء في المنتدي
لكن أنا احبذ بناء المكتبات لأنه لدي قناعة انه من اهم الاشياء في البرمجة فهي تقلل من الوقت و المجهود و التكرار في كتابة الكود
أيضا لدي قناعة ان مايمكن صناعته باستخدام WPF يمكن صناعته بالويندوز فورم و لكن الأمر يحتاج الي مجهود اكبر قليلا من المبرمج
تمنياتي لك بالتوفيق سواء استخدمت WPF او اي شئ اخر .... عموما انا أحترم جدا المبدعين و خصوصا في الجرافيكس او في اي شئ اخر
|