22-09-15, 02:21 PM
(آخر تعديل لهذه المشاركة : 22-09-15, 02:50 PM {2} بواسطة silverlight.)
السلام عليكم ورحمة الله وبركاته
مقدمة:
هذا الموضوع الهدف منه هو توضيح كيفية بناء برنامج يقوم بإلتقاط صور من شاشة الكمبيوتر باستخدام Timer و تحويلها بعد ذلك الي ملف يمكن ان يتم عرضه داخل PictureBox مثل شريط فيديو
فكرة المشروع تعتمد علي إعطاء المستحدم إمكانية تحديد مكان التصوير علي شاشة الكمبيوتر عن طريق رسم مستطيل يستطيع المستخدم تحريكه وضبط أبعاده كما يحلو له ثم بعد ذلك يبدأ البرنامج و باستخدام Timer في التقاط صور بشكل مستمر للمكان الذي قام مستخدم البرنامج بتحديده علي سطح جهاز الكمبيوتر حيث سكون هناك إمكانية لحفظ الصور في ملف او استعراض هذا الملف داخل PictureBox مثل شريط فيديو
لذلك سوف يتم تنفيذ هذا المشروع علي مرحلتين كالأتي
1- كتابة بعض الكلاسات التي سوف نستخدمها في رسم المستطيل و تحريكه علي شاشة الكمبيوتر
2- كتابة الطرق و الدوال التي سيتم استخدامها في تصوير شاشة الكمبيوتر و حفظ الصور في ملف واحد ثم عرض الصور مثل شريط فيديو
رسم و تحريك مستطيل علي شاشة الكمبيوتر:
الأسلوب المستخدم هنا هو نفس الأسلوب الذي يتم استخدامه في رسم و تحريك الفورم العادي علي شاشة الكمبيوتر وكما هو معلوم للجميع الفورم العادي به ثمانية مناطق يتم من خلالها تغيير أبعاد الفورم و هناك منطقة واحدة لتحريك الفورم
الكلاسات و Interface و Enum المستخدمة لرسم و تحريك المستطيل هي كالأتي:
1- IBeltGlyph
يمثل Interface المسئول عن تعريف و رسم اي مستطيل يتم رسمه علي الفورم و هو الأساس لبعض الكلاسات الخاصة بتحريك ورسم المستطيل
2- IBeltBehaviour
يمثل Interface المسئول عن كل العمليات الخاصة بتحريك و رسم المستطيل و به الحسابات الخاصة بحساب مكان المستطيل علي شاشة الكمبيوتر حتي يتمكن مستخدم البرنامج من تحريك المستطيل و تغيير أبعاده
3- BeltGlyphHitPosition
يمثل Enum الذي يحدد مجموعة من المناطق سيتم الضغط عليها بالماوس
4- BeltLocationChangedEventArgs
يمثل الكلاس الي سيخبرنا متي يتغير مكان المستطيل علي الفورم
5- BeltSizeChangedEventArgs
يمثل الكلاس الي سيخبرنا متي تتغير ابعاد المستطيل علي الفورم
6- SizingGlyph
يمثل الكلاس المسئول عن رسم المستطيلات التي ستستخدم لتغيير أبعاد المستطيل علي شاشة الكمبيوتر
7- ClientGlyph
يمثل الكلاس المسئول عن رسم المنطقة الخاصة بمستخدم البرنامج علي شاشة الكمبيوتر
8- CaptionGlyph
يمثل الكلاس المسئول عن رسم و تحريك المستطيل علي شاشة الكمبيوتر
9- GhostWindow
يمثل الفورم الذي تحدث عليه عمليات الرسم الخاصة بالمستطيل الي سيتمكن مستخدم البرنامج من تحريكه و تغيير ابعاده كيفما شاء لتحديد المكان الذي يريد أن يلتقط صورا له من علي سطح شاشة الكمبيوتر
10- BeltButton
هو باتون له شكل مختلف قليلا عن الباتون العادي الموجود في الفيجوال استوديو حيث سنستخدمه لإغلاق الفورم او بدء التصوير من علي سطح شاشة الكمبيوتر
عموما و نظرا لحجم الكود المكتوب سيصعب توضيح و شرح كل شئ لكن علي المهتمين بالأمر أن يسألوا كيفما شاءوا و ساوضح لهم لاحقا بالرد علي استفساراتهم
و بهذا تنتهي المرحلة الأولي من المشروع الذي نريد كتابته
أخي الفاضل TheGhost عذرا للتأخير في كتابة الكود لك و لكن كان لدي ظروف طارئة منعتني من أن أضع الكود لك قبل هذا اليوم تقبل تحياتي
بالنهاية الفكرة المستخدمة في هذه المرحلة تم كتابتها بالشكل الذي يجعلنا نستطيع تطويرها لاحقا لتستخدم في رسم فورم مثل الفورم الخاص بمايكروسوفت
الكود الخاص ب المرحلة الأولي موجود ب المرفقات
تقبلوا تحياتي و كل عام و أنتم بخير
مقدمة:
هذا الموضوع الهدف منه هو توضيح كيفية بناء برنامج يقوم بإلتقاط صور من شاشة الكمبيوتر باستخدام Timer و تحويلها بعد ذلك الي ملف يمكن ان يتم عرضه داخل PictureBox مثل شريط فيديو
فكرة المشروع تعتمد علي إعطاء المستحدم إمكانية تحديد مكان التصوير علي شاشة الكمبيوتر عن طريق رسم مستطيل يستطيع المستخدم تحريكه وضبط أبعاده كما يحلو له ثم بعد ذلك يبدأ البرنامج و باستخدام Timer في التقاط صور بشكل مستمر للمكان الذي قام مستخدم البرنامج بتحديده علي سطح جهاز الكمبيوتر حيث سكون هناك إمكانية لحفظ الصور في ملف او استعراض هذا الملف داخل PictureBox مثل شريط فيديو
لذلك سوف يتم تنفيذ هذا المشروع علي مرحلتين كالأتي
1- كتابة بعض الكلاسات التي سوف نستخدمها في رسم المستطيل و تحريكه علي شاشة الكمبيوتر
2- كتابة الطرق و الدوال التي سيتم استخدامها في تصوير شاشة الكمبيوتر و حفظ الصور في ملف واحد ثم عرض الصور مثل شريط فيديو
رسم و تحريك مستطيل علي شاشة الكمبيوتر:
الأسلوب المستخدم هنا هو نفس الأسلوب الذي يتم استخدامه في رسم و تحريك الفورم العادي علي شاشة الكمبيوتر وكما هو معلوم للجميع الفورم العادي به ثمانية مناطق يتم من خلالها تغيير أبعاد الفورم و هناك منطقة واحدة لتحريك الفورم
الكلاسات و Interface و Enum المستخدمة لرسم و تحريك المستطيل هي كالأتي:
1- IBeltGlyph
يمثل Interface المسئول عن تعريف و رسم اي مستطيل يتم رسمه علي الفورم و هو الأساس لبعض الكلاسات الخاصة بتحريك ورسم المستطيل
كود :
Public Interface IBeltGlyph
Property Bounds As Rectangle
Property Visible As Boolean
ReadOnly Property GlyphCursor As Cursor
ReadOnly Property GlyphPosition As BeltGlyphHitPosition
Function HitBeltGlyph(pt As Point) As Boolean
Sub PaintBeltGlyph(g As Graphics, glyphBackColor As Color, glyphBorderColor As Color, glyphGradientColor As Color)
End Interface ' IBeltGlyph
2- IBeltBehaviour
يمثل Interface المسئول عن كل العمليات الخاصة بتحريك و رسم المستطيل و به الحسابات الخاصة بحساب مكان المستطيل علي شاشة الكمبيوتر حتي يتمكن مستخدم البرنامج من تحريك المستطيل و تغيير أبعاده
كود :
Public Interface IBeltBehaviour
Property BeltBackColor As Color
Property BeltBorderColor As Color
Property BeltGradientColor As Color
Property BeltBounds As Rectangle
Property BeltDisplayBounds As Rectangle
Property BetlText As String
ReadOnly Property BeltDefaultLocation As Point
ReadOnly Property BeltDefaultSize As Size
ReadOnly Property BeltMinimumSize As Size
ReadOnly Property BeltMinimumThickness As Single
ReadOnly Property BeltMaximumThickness As Single
Function GetBeltScreenBounds() As Rectangle
Function GetBeltWorkingBounds() As Rectangle
Function IsBeltOnMaximum(rect As Rectangle) As Boolean
Function IsBeltOnMinimum(rect As Rectangle) As Boolean
Function TranslateBelt(pt As Point, rect As Rectangle) As Rectangle
Function BeltToClient(rect As Rectangle) As Rectangle
Function BeltToClient(rect As Rectangle, minWidth As Single, maxWidth As Single) As Rectangle
Function BeltToScreen(rect As Rectangle, beltWidth As Single) As Rectangle
Function BeltToScreen(rect As Rectangle) As Rectangle
Function GetBeltDeskTopPosition(x As Integer, y As Integer, w As Integer, h As Integer) As Rectangle
Sub DisoposeBeltButtons()
Sub UpdateBeltButtons()
Sub AttachBeltButtons()
Sub ReSizeDragBelt(position As BeltGlyphHitPosition, pt As Point)
Sub ReSizeDragBelt(position As BeltGlyphHitPosition, dx As Integer, dy As Integer)
Sub UpdateBeltGlyph(rect As Rectangle)
Sub InitializeBeltWindow()
Sub OnBeltLocationChanged(beltLocation As Point)
Sub OnBeltSizeChanged(beltSize As Point)
Sub BeltCloseButtonClick(sender As Object, e As EventArgs)
Sub BeltCaptureButtonClick(sender As Object, e As EventArgs)
Sub BeltStopCaptureButtonClick(sender As Object, e As EventArgs)
Sub BeltMouseMove(e As MouseEventArgs)
Sub BeltMouseDown(e As MouseEventArgs)
Sub BeltMouseUp(e As MouseEventArgs)
Sub BeltPaint(e As PaintEventArgs)
End Interface
3- BeltGlyphHitPosition
يمثل Enum الذي يحدد مجموعة من المناطق سيتم الضغط عليها بالماوس
4- BeltLocationChangedEventArgs
يمثل الكلاس الي سيخبرنا متي يتغير مكان المستطيل علي الفورم
5- BeltSizeChangedEventArgs
يمثل الكلاس الي سيخبرنا متي تتغير ابعاد المستطيل علي الفورم
6- SizingGlyph
يمثل الكلاس المسئول عن رسم المستطيلات التي ستستخدم لتغيير أبعاد المستطيل علي شاشة الكمبيوتر
7- ClientGlyph
يمثل الكلاس المسئول عن رسم المنطقة الخاصة بمستخدم البرنامج علي شاشة الكمبيوتر
8- CaptionGlyph
يمثل الكلاس المسئول عن رسم و تحريك المستطيل علي شاشة الكمبيوتر
9- GhostWindow
يمثل الفورم الذي تحدث عليه عمليات الرسم الخاصة بالمستطيل الي سيتمكن مستخدم البرنامج من تحريكه و تغيير ابعاده كيفما شاء لتحديد المكان الذي يريد أن يلتقط صورا له من علي سطح شاشة الكمبيوتر
10- BeltButton
هو باتون له شكل مختلف قليلا عن الباتون العادي الموجود في الفيجوال استوديو حيث سنستخدمه لإغلاق الفورم او بدء التصوير من علي سطح شاشة الكمبيوتر
عموما و نظرا لحجم الكود المكتوب سيصعب توضيح و شرح كل شئ لكن علي المهتمين بالأمر أن يسألوا كيفما شاءوا و ساوضح لهم لاحقا بالرد علي استفساراتهم
و بهذا تنتهي المرحلة الأولي من المشروع الذي نريد كتابته
أخي الفاضل TheGhost عذرا للتأخير في كتابة الكود لك و لكن كان لدي ظروف طارئة منعتني من أن أضع الكود لك قبل هذا اليوم تقبل تحياتي
بالنهاية الفكرة المستخدمة في هذه المرحلة تم كتابتها بالشكل الذي يجعلنا نستطيع تطويرها لاحقا لتستخدم في رسم فورم مثل الفورم الخاص بمايكروسوفت
الكود الخاص ب المرحلة الأولي موجود ب المرفقات
تقبلوا تحياتي و كل عام و أنتم بخير