تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] إنشاء فورم على شكل صورة PNG
#1
السلام عليكم ورحمة الله وبركاته

أخوتي المبرمجين الأعزاء أود المساعدة في مشكلة لم أستطع حلّها وهي,

جعل الفورم يأخذ نفس شكل الصورة , هذا مثال على كلامي

 
الرد
تم الشكر بواسطة:
#2
ضع خلفية الفورم صورة واجعل خاصية الصورة strech
الرد
تم الشكر بواسطة: ابراهيم ايبو
#3
السلام عليكم ورحمة الله وبركاته
اخي الكريم 
1 -انشئ فورم واجعل الخاصية FormBorderStyle =none 
 2 -في الخاصية BackgroundImage اختر الصورة التي تريد ويجب ان تكون خلفية الصورة بلون مصمت (اي لون واحد غير متدرج ولايكون هذا اللون داخل الصورة نفسها لانه هوالذي سيتم جعله شفافا وبذلك يأخذ الفورم شكل الصورة)
3 - الخاصية التي اسفلها مباشرة BackgroundImageLayuot اختر منها Stretch 
4 - الان الخاصية  TransparencyKey هنا ستضع فيها قيمة لون الخلفية التي ستكون شفافة وبذلك سيتم قص الفورم علىشطل الصورة الداخلي

يمكنك التجربة بدون صورة اعمل الاتي :
FormBorderStyle =none
Backcolor=White
ضع بانل وسط الفورم لونه احمر اصغر من الفورم
الان  TransparencyKey=White
شغل الفورم ستجد ان الفورم اخذت شكل البانل واختفى كل ماحولها من لون ابيض
اعمل الخير واجرك لاتنتظره فالله خير من اليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد
تم الشكر بواسطة: asmarsou , ZoRRo
#4
لكن ماراح أقدر أحرك الفورم يا أستاذ
الرد
تم الشكر بواسطة:
#5
السلام عليكم ورحمة الله وبركاته
اخي الكريم لو تلاحظ توقيعي 
(البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات)
الان انت وضعت صورة  في خلفية الفورم قم باضافة Panel اعلى وسط الصورة بشكل مستطيل يشبه شريط عنوان الفورم 
واجعل لون الخلفية له Transparent حتى لايظهر (هو موجود فوق الصورة )
الان اكتب له هذا الكود 

كود :
Dim a As Integer
   Dim b As Integer
   Private Sub planel1_MouseDown(sender As Object, e As MouseEventArgs) Handles Panel1.MouseDown

       a = Panel.MousePosition.X - Me.Location.X
       b = Panel.MousePosition.Y - Me.Location.Y

   End Sub
   Private Sub panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove

       Dim newPoint As New System.Drawing.Point()
       If e.Button = MouseButtons.Left Then

           newPoint = Panel.MousePosition
           newPoint.X = newPoint.X - (a)
           newPoint.Y = newPoint.Y - (b)
           Me.Location = newPoint
       End If
   End Sub
او يمكتك تجريب هذا الكود على الفورم  نفسها
كود :
Dim x, y As Integer
Dim newpoint As New Point

   Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
       x = Control.MousePosition.X - Me.Location.X
       y = Control.MousePosition.Y - Me.Location.Y
   
   End Sub

   Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
       'في الماوس موف للفورم نكتب الكود التالي
       If e.Button = Windows.Forms.MouseButtons.Left Then
           newpoint = Control.MousePosition
           newpoint.X -= x
           newpoint.Y -= y
           Me.Location = newpoint
           Application.DoEvents()
       End If
   End Sub
اعمل الخير واجرك لاتنتظره فالله خير من اليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد
تم الشكر بواسطة: asmarsou , asmarsou
#6
(14-01-22, 11:48 PM)ابراهيم ايبو كتب :
السلام عليكم ورحمة الله وبركاته
اخي الكريم لو تلاحظ توقيعي 
(البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات)
الان انت وضعت صورة  في خلفية الفورم قم باضافة Panel اعلى وسط الصورة بشكل مستطيل يشبه شريط عنوان الفورم 
واجعل لون الخلفية له Transparent حتى لايظهر (هو موجود فوق الصورة )
الان اكتب له هذا الكود 

كود :
Dim a As Integer
   Dim b As Integer
   Private Sub planel1_MouseDown(sender As Object, e As MouseEventArgs) Handles Panel1.MouseDown

       a = Panel.MousePosition.X - Me.Location.X
       b = Panel.MousePosition.Y - Me.Location.Y

   End Sub
   Private Sub panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove

       Dim newPoint As New System.Drawing.Point()
       If e.Button = MouseButtons.Left Then

           newPoint = Panel.MousePosition
           newPoint.X = newPoint.X - (a)
           newPoint.Y = newPoint.Y - (b)
           Me.Location = newPoint
       End If
   End Sub

وهذه طريقة اخرى فقط غير المسميات (اسم البانل).... يتضمنها حدث رفع الماوس من على البنل
كود :
Private MouseOffset As Point
   Private IsLeftButtonDown As Boolean = False
Private Sub PlayerPanel_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PlayerPanel.MouseDown
       If e.Button = MouseButtons.Left Then
           IsLeftButtonDown = False
       End If
       Dim xOffset As Integer
       Dim yOffset As Integer
       If e.Button = MouseButtons.Left Then
           xOffset = -e.X - SystemInformation.FrameBorderSize.Width
           yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height
           MouseOffset = New Point(xOffset, yOffset)
           IsLeftButtonDown = True
       End If
   End Sub


   Private Sub PlayerPanel_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PlayerPanel.MouseMove
       If IsLeftButtonDown Then
           Dim MousePosition As Point = Control.MousePosition
           MousePosition.Offset(MouseOffset.X, MouseOffset.Y)
           Location = MousePosition - PlayerPanel.Location
       End If
   End Sub

   Private Sub PlayerPanel_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PlayerPanel.MouseUp
       If e.Button = MouseButtons.Left Then
           IsLeftButtonDown = False
       End If
   End Sub
الرد
تم الشكر بواسطة: ابراهيم ايبو , ابراهيم ايبو , ZoRRo
#7
السلام عليكم ورحمة الله وبركاته
تعجبني المشاركات جدا جدا
لأنها تنم عن التفاعل الإيجابي  في هذا المنتدى الرائع
شكرا لك أخي asmarsou 
اعمل الخير واجرك لاتنتظره فالله خير من اليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد
تم الشكر بواسطة: asmarsou
#8
(15-01-22, 12:11 AM)ابراهيم ايبو كتب :
السلام عليكم ورحمة الله وبركاته
تعجبني المشاركات جدا جدا
لأنها تنم عن التفاعل الإيجابي  في هذا المنتدى الرائع
شكرا لك أخي asmarsou 

العفو استاذ ... فخيركم من تعلم علما و علمه
الرد
تم الشكر بواسطة: ابراهيم ايبو
#9
شكرا أستاذ إبراهيم ,,

لكني وجد حل أسهل Big Grin
نعرف المتغيران كالتالي
كود :
    Private Property MoveForm As Boolean

    Private Property MoveForm_MousePos As Point

ثم نضع الكود التالي في الإفنت التالية


كود :
       
    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
        If e.Button = MouseButtons.Left Then
            MoveForm = True
            Me.Cursor = Cursors.Hand
            MoveForm_MousePos = e.Location
        End If
    End Sub

    Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
        If MoveForm Then
            Me.Location = Me.Location + (e.Location - MoveForm_MousePos)
        End If
    End Sub

    Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
        If e.Button = MouseButtons.Left Then
            MoveForm = False
            Me.Cursor = Cursors.Default

        End If
    End Sub


أحببت المشاركة للفائدة Smile
الرد
تم الشكر بواسطة: سعود , سعود , asmarsou , ابراهيم ايبو



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


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