أسامة أحمد كتب :هذا هو بعد التعديل الست تقصد ان الصورة تتغير ولما تنتهي الصور يفتح الفورم
[ATTACH]823[/ATTACH]
استاذي الغالي أسامة تحيه
مع الاسف شغلت المشروع وتظهر نفس رسالة الخطأ
حتى بعدما حذفت حضرتك الكلاس ووضعت كل الكود داخل الفورم
انا اعمل على اصدار 2010 وانت تعمل على اصدار 2008
هل تتوقع هذا سبب الخطأ ؟
اخر مرشوع وضعه اخي المبدع Raggi Tech يعمل بدون اي خطأ ونفس الذي انا ابغى تمام
بس عندما احاول اطبق المشروع على مشروع جديد لا يعمل المشروع الجديد
انا الان انتظر اخي Raggi Tech لكي يشرح لنا طريقة عمل المشروع
اكيد فيه خطوات تجهلني بطريقة إنشاء المشروع
المشروع من رفع المبدع Raggi Tech على الرابط التالي ويعمل تمام بس احتاج شرح طريقة عمل المشروع خطوة خطوة
Private mParent As Form
Public ReadOnly Property Parentt() As Form
Get
Return mParent
End Get
End Property
Private mMovable As Boolean = True
Public Property Movable() As String
Get
Return mMovable
End Get
Set(ByVal value As String)
mMovable = value
End Set
End Property
Public Sub SetImage(ByVal frm As Form, ByVal btm As Bitmap)
Try
mParent = frm
Dim exStyle As Int32 = APIs.GetWindowLong(frm.Handle.ToInt32, APIs.GWL_EXSTYLE)
APIs.SetWindowLong(frm.Handle.ToInt32, APIs.GWL_EXSTYLE, exStyle Or APIs.WS_EX_LAYERED)
If Not (Bitmap.IsCanonicalPixelFormat(btm.PixelFormat)) Or Not (Bitmap.IsAlphaPixelFormat(btm.PixelFormat)) Then
Throw New ApplicationException("The picture must be 32bit picture with alpha channel.")
End If
Dim hDC As Int32 = APIs.GetDC(0)
Dim hBtm As Int32
Dim memDC As Int32 = APIs.CreateCompatibleDC(hDC)
Dim Bits As Int32
Dim dstPos As New APIs.POINTAPI(frm.Left, frm.Top)
Dim srcPos As New APIs.POINTAPI(0, 0)
Dim Siz As New APIs.SizeAPI(btm.Width, btm.Height)
Dim Opt As New APIs.BLEND_OPTIONS
APIs.UpdateLayeredWindow(frm.Handle, hDC, dstPos, Siz, memDC, srcPos, 0, Opt, 2)
Catch ex As Exception
End Try
If hBtm <> 0 Then
APIs.SelectObject(memDC, Bits)
APIs.DeleteObject(hBtm)
End If
APIs.ReleaseDC(0, hDC)
APIs.DeleteDC(memDC)
Catch ex As Exception
End Try
End Sub
Private mLastLocation As Point
Private Class APIs
Public Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Int32) As Int32
Public Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Int32) As Int32
Public Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Int32, ByVal hObject As Int32) As Int32
Public Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Int32, ByVal hdc As Int32) As Int32
Public Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Int32) As Int32
Public Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Int32) As Int32
Public Declare Function UpdateLayeredWindow Lib "user32.dll" (ByVal hWnd As Int32, ByVal hdcDst As Int32, ByRef pptDst As POINTAPI, ByRef psize As SizeAPI, ByVal hdcSrc As Int32, ByRef pptSrc As POINTAPI, ByVal crKey As Int32, ByRef pblend As BLEND_OPTIONS, ByVal dwFlags As Int32) As Int32
Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongW" (ByVal hwnd As Int32, ByVal nIndex As Int32) As Int32
Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongW" (ByVal hwnd As Int32, ByVal nIndex As Int32, ByVal dwNewLong As Int32) As Int32
Public Const GWL_EXSTYLE As Int32 = -20
Public Const WS_EX_LAYERED As Int32 = &H80000
<StructLayout(LayoutKind.Sequential, Pack:=1)> _
Public Structure BLEND_OPTIONS
Public BlendOp As Byte
Public BlendFlags As Byte
Public SourceConstantAlpha As Byte
Public AlphaFormat As Byte
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure SizeAPI
Public cx As Int32
Public cy As Int32
Sub New(ByVal cx As Int32, ByVal cy As Int32)
Me.cx = cx
Me.cy = cy
End Sub
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure POINTAPI
Public x As Int32
Public y As Int32
Sub New(ByVal x As Int32, ByVal y As Int32)
Me.x = x
Me.y = y
End Sub
End Structure
Public Declare Function ExtCreateRegion Lib "gdi32.dll" ( _
ByRef lpXform As XFORM, _
ByVal nCount As Int32, _
ByRef lpRgnData As RGNDATA) As Int32
<StructLayout(LayoutKind.Sequential)> _
Public Structure XFORM
Public eM11 As Single
Public eM12 As Single
Public eM21 As Single
Public eM22 As Single
Public eDx As Single
Public eDy As Single
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure RGNDATA
Public rdh As RGNDATAHEADER
Public Buffer As Byte
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure RGNDATAHEADER
Public dwSize As Int32
Public iType As Int32
Public nCount As Int32
Public nRgnSize As Int32
Public rcBound As RECT
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure RECT
Public Left As Int32
Public Top As Int32
Public Right As Int32
Public Bottom As Int32
End Structure
End Class
ثم ضع هذا الكود أعلى الكلمة
كود :
Imports System.Runtime.InteropServices
ثم في الحدث form load
كود :
Dim Layer As New Form1
Layer.SetImage(Me, Me.BackgroundImage)
ثم أجعل خاصية الفورم formborderstyle إلى none
ثم غير خلفية الفورم وأجعلها الصورة الpng الي حضرتك عايزها
أنتهى أنا آسف الشرح مش كويس بس علشان مستعجل أنا آسف أخي الحبيب
10-10-12, 08:19 AM (آخر تعديل لهذه المشاركة : 10-10-12, 08:22 AM {2} بواسطة محمود رغمان.)
السلام عليكم ورحمة الله وبركاته
يجب ان نشكر الاخ أسامة أحمد لانه هو من كتب الموضوع و ترك لنا الباب مفتوحاً للنقاش
وله جزيل الشكر على تقديم المساعدة
نبدأ الان بالشرح المطلوب :
اصنع مشروع جديد به فورمين Form1 و Form2 ثم غير الخاصية
FormBorderStyle للفورم إلى None
كما هو موضح في الصورة
[*=right]قم بتغير خاصية StartPosition الى CenterScreen
كما هو موضح في الصورة
[*=right]ثم لاضافة الصور نتبع الخطوات التالية:-
نقوم بفتح خصائص المشروع
نقوم باختيار Resources من على يسار الشاشه
ثم Add Resource ومنها نختار Add Existing File ونضيف الملفات المطلوبه
[*=right]ثم يأتي دور اضافة الاكواد
رقم 1
كود :
Imports System.Runtime.InteropServices
رقم 2
كود :
Dim picnum = 0
Private mParent As Form
Public ReadOnly Property Parentt() As Form
Get
Return mParent
End Get
End Property
Private mMovable As Boolean = True
Public Property Movable() As String
Get
Return mMovable
End Get
Set(ByVal value As String)
mMovable = value
End Set
End Property
Public Sub SetImage(ByVal frm As Form, ByVal btm As Bitmap)
Try
mParent = frm
Dim exStyle As Int32 = APIs.GetWindowLong(frm.Handle.ToInt32, APIs.GWL_EXSTYLE)
APIs.SetWindowLong(frm.Handle.ToInt32, APIs.GWL_EXSTYLE, exStyle Or APIs.WS_EX_LAYERED)
If Not (Bitmap.IsCanonicalPixelFormat(btm.PixelFormat)) Or Not (Bitmap.IsAlphaPixelFormat(btm.PixelFormat)) Then
Throw New ApplicationException("The picture must be 32bit picture with alpha channel.")
End If
Dim hDC As Int32 = APIs.GetDC(0)
Dim hBtm As Int32
Dim memDC As Int32 = APIs.CreateCompatibleDC(hDC)
Dim Bits As Int32
Dim dstPos As New APIs.POINTAPI(frm.Left, frm.Top)
Dim srcPos As New APIs.POINTAPI(0, 0)
Dim Siz As New APIs.SizeAPI(btm.Width, btm.Height)
Dim Opt As New APIs.BLEND_OPTIONS
APIs.UpdateLayeredWindow(frm.Handle, hDC, dstPos, Siz, memDC, srcPos, 0, Opt, 2)
Catch ex As Exception
End Try
If hBtm <> 0 Then
APIs.SelectObject(memDC, Bits)
APIs.DeleteObject(hBtm)
End If
APIs.ReleaseDC(0, hDC)
APIs.DeleteDC(memDC)
Catch ex As Exception
End Try
End Sub
Private mLastLocation As Point
Private Class APIs
Public Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Int32) As Int32
Public Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Int32) As Int32
Public Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Int32, ByVal hObject As Int32) As Int32
Public Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Int32, ByVal hdc As Int32) As Int32
Public Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Int32) As Int32
Public Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Int32) As Int32
Public Declare Function UpdateLayeredWindow Lib "user32.dll" (ByVal hWnd As Int32, ByVal hdcDst As Int32, ByRef pptDst As POINTAPI, ByRef psize As SizeAPI, ByVal hdcSrc As Int32, ByRef pptSrc As POINTAPI, ByVal crKey As Int32, ByRef pblend As BLEND_OPTIONS, ByVal dwFlags As Int32) As Int32
Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongW" (ByVal hwnd As Int32, ByVal nIndex As Int32) As Int32
Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongW" (ByVal hwnd As Int32, ByVal nIndex As Int32, ByVal dwNewLong As Int32) As Int32
Public Const GWL_EXSTYLE As Int32 = -20
Public Const WS_EX_LAYERED As Int32 = &H80000
<StructLayout(LayoutKind.Sequential, Pack:=1)> _
Public Structure BLEND_OPTIONS
Public BlendOp As Byte
Public BlendFlags As Byte
Public SourceConstantAlpha As Byte
Public AlphaFormat As Byte
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure SizeAPI
Public cx As Int32
Public cy As Int32
Sub New(ByVal cx As Int32, ByVal cy As Int32)
Me.cx = cx
Me.cy = cy
End Sub
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure POINTAPI
Public x As Int32
Public y As Int32
Sub New(ByVal x As Int32, ByVal y As Int32)
Me.x = x
Me.y = y
End Sub
End Structure
Public Declare Function ExtCreateRegion Lib "gdi32.dll" ( _
ByRef lpXform As XFORM, _
ByVal nCount As Int32, _
ByRef lpRgnData As RGNDATA) As Int32
<StructLayout(LayoutKind.Sequential)> _
Public Structure XFORM
Public eM11 As Single
Public eM12 As Single
Public eM21 As Single
Public eM22 As Single
Public eDx As Single
Public eDy As Single
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure RGNDATA
Public rdh As RGNDATAHEADER
Public Buffer As Byte
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure RGNDATAHEADER
Public dwSize As Int32
Public iType As Int32
Public nCount As Int32
Public nRgnSize As Int32
Public rcBound As RECT
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure RECT
Public Left As Int32
Public Top As Int32
Public Right As Int32
Public Bottom As Int32
End Structure
End Class
رقم 3
كود :
Dim Layer As New Form1
Layer.SetImage(Me, My.Resources.Programs)[/COLOR][color=#008000] ' باي اسم صورة تم دمجها بالمشروع Programs استبدل كلمة [/color][COLOR=#000080]
[*=right]نقوم باضافة Timer1 و نغير قيمة interval الى 5000 اي الى 5 ثواني
بس اساذي الفاضل لم يعمل معي البرنامج ووالله عملت كل ما موجود بالشرح خطوة خطوة
واعتقد سبب المشكلة هو دمج الصورة بالفورم وانا سبق قلت ارجوك لاتجعل اي صورة مدموجة بالفورم
والان شاهد الخطأ بهذه الصورة المرفقة
استاذي الكريم ممكن لو سمحت تحذف الكود الذي سبب المشكلة وهو اعتقد كود دمج صورة بالفورم
وتجعل فقط الكود يشغل الصور التي جوه ملف المصدر فقط حتى يعمل معي الكود إن شاء الله
شي غريب استاذي المبدع عملت التغيير على الكود كما وضعت لي
وعند تشغيل البرنامج لم تظهر لي اي رسالة خطأ
ولم تظهر الصور وعند مرور تقريبا 20 ثانية تظهر الفورم رقم 2