الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اضف إلى معلوماتك : تلميحات و خدع

مثبّترائج
بدأه محمد رضى في 12 سبتمبر 2009 · 69 رد · 30,544 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله تعالى و بركاته,,,

لتسهيل تصفح هذا الموضوع, سأقوم بزيادة الروابط نحو الردود التي تحتوي على التلميحات و الخدع المهمة :

كيف تقوم بعملية سحب/إفلات ملفات من و إلى مستكشف ويندوز؟

كيف ننسخ و نقص ملفا إلى Clipboard؟

كيف تخفي أي URL عن الأعين؟

كيف نظهر نافذة بالقرب من شريط المهام مهما كان مكانه؟

كيف تفتح ملفا و تترك للمستخدم حرية اختيار البرنامج المضيف عن طريق النافذة Open As؟

كيف نستعلم عن سلة المهملات و كيف نفرغها؟

كيف نحذف نحو سلة المهملات, ننسخ, ننقل ملفات أو مجلدات كما يفعل مستكشف ويندوز مع إمكانية إلغاء العملية من على قائمة Explorer و سطح المكتب؟

كيف تقوم بعملية بحث عن ملف داخل مجلد و المجلدات الداخلية بكل سهولة؟

كيف تظهر نص مساعدة على مربع نص؟

كيف تظهر مربع حوار Properties للملفات, المجلدات و وحدات التخزين؟

أبسط طريقة لضغط محتوى مجلد إلى ملف ZIP؟

كيف تربط Enum بمربعات من نوع Combo box أو ListBox؟

كيف تظهر الصور المتحركة على مشاريع الدوت نت؟

التلميحة القديمة الجديدة : كيف تنشئ مجلدا مشخصا بأيقونة و وصف؟

كيف تغير قيمة الخصائص و الحقول المقروءة فقط؟

استعمالات متقدمة للمعامل If بواسطة Muhammad alaa

كيف تعرف الدالة التي قامت بالنداء على الدالة الحالية؟

كيف تتجاهل دوال محددة وقت تنفيذ الكود جملة جملة على Debugger؟

مربع بروجرس بار عمودي لمشاريعكم

كيف تظهر الصور المتحركة على مشاريع الدوت نت؟ (طريقة أخرى)

كيف تظهر محتوى البيانات المسحوبة أثناء عملية سحب و إفلات؟

كيف تتحكم في وقت تنفيذ Blocking Methods؟

كيف تصل إلى دالة محمية (Private و Protected) و تنادي عليها؟

أبسط طريقة لفك ضغط ملف مضغوط من نوع ZIP؟

كيف تحصل على صورة صفحة ويب؟

كيف تستعمل مدقق وورد اللغوي لتصحيح النصوص على مشاريعك؟

كيف تحمل ملف MS EXCEL إلى DataGridView؟

كيفية الحصول على نسخة من الفئه RegistryKey من Native Registry Handle بواسطة Muhammad alaa

كيف تتحقق من صحة سيناريو T-SQL قبل تنفيذه؟

كيف تدمج ترجمة النصوص إلى مشاريعك؟ (Google Translator)

كيف تدعم ترجمة النصوص على مشروعك؟ (Bing Translator)

كيف تقوم بتحميل جزء أو مقطع من ملف من على موقع؟

كيف تنادي على دالة حدث من مسلك مغاير للمسلك الرئيسي للتطبيق؟

كيف تحصل على اقتراحات google كما هو الحال على شريط العناوين لمتصفح google chrome؟

كيف تحصل على أيبي الأنترنت من جهاز مرتبط بشبكة محلية؟

كيف تفك برمجيا ضغط رابط مضغوط (التعرف على الرابط الأصلي)؟

----------------------------------------------------------------------------------

باسم الله نبدأ مع أول تلميحة :

كيف تقوم بعملية سحب/إفلات ملفات من و إلى مستكشف ويندوز؟

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

post-207152-1252725939_thumb.jpg

سحب الملفات من مستكشف ويندوز و إفلاتها على مربع على واجهة المستخدم :

أولا, سنحتاج إلى تحديد خاصية قبول سحب و إفلات العناصر من المربع المعد لهذا العمل. في موضوعنا هذا سيكون لائحة من نوع ListView.

	  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		  ' تنشيط خاصية قبول إفلات الأشياء على اللائحة
		  ListView1.AllowDrop = True
	  End Sub

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

	  ' يحدث عندما يسحب المستخدم شيئا فوق الائحة على النموذج
	  Private Sub ListView1_DragOver(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragOver
		  ' التأكد من أن العملية عملية إفلات ملفات
		  If e.Data.GetDataPresent(DataFormats.FileDrop) Then
			  ' نعلم المستخدم و النظام أننا فقط سننسخ الملف عن طريق الكيرسور الملائم
			  e.Effect = DragDropEffects.Copy
		  Else
			  ' لا نتعامل إلا مع الملفات
			  e.Effect = DragDropEffects.None
		  End If
	  End Sub

الخطوة الثانية, نقوم بها في الدالة المشتركة في الحدث DragDrop. داخل الدالة, نقوم بالوصول إلى الملف أو الملفات المسحوبة التي تم إفلاتها. نتأكد من أنها ملفات موجودة ثم نقوم بزيادة مساراتها إلى اللائحة.

	  ' يحدث عندما يفلت المستخدم ملف على اللائحة
	  Private Sub ListView1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragDrop
		  ' التأكد من أن العملية عملية إفلات ملفات
		  If e.Data.GetDataPresent(DataFormats.FileDrop) Then
			  ' الوصول إلى لائحة الملفات التي تم إفلاتها على اللائحة
			  Dim files As String() = e.Data.GetData(DataFormats.FileDrop)
			  ' زيادة مسارات الملفات على اللائحة
			  For Each s As String In files
				  If IO.File.Exists(s) Then
					  ListView1.Items.Add(s)
				  Else
					  MsgBox("العنصر الذي تم إفلاته غير مقبول : " + s, MsgBoxStyle.Critical)
				  End If
			  Next
		  End If
		  ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent)
	  End Sub

سحب الملفات من برنامجنا نحو مستكشف ويندوز :

الآن و بعد تحميل اللائحة ListView1 بمجموعة من مسارات الملفات عن طريق سحبها و إفلاتها من مستكشف ويندوز, دعونا نتكلم الآن عن العملية المعاكسة ألا وهي سحب عناصر اللائحة – مسارات الملفات – و إفلاتها على مستكشف ويندوز. هذه العملية تتم في خطوة واحدة داخل الحدث ItemDrag للائحة ListView1. داخل الدالة المشتركة في الحدث, نقوم بالحصول على عناصر اللائحة التي قام المستخدم بتحديدها. بعد ذلك, نقوم ببدء عملية سحب الملفات المتمثلة في المسارات على اللائحة مع تحديد نوعية العملية في سحب و إفلات للنسخ.

	  ' يحدث عندما يتم سحب عنصر من عناصر اللائحة
	  Private Sub ListView1_ItemDrag(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles ListView1.ItemDrag
		  ' الحصول على عدد العناصر
		  Dim files(ListView1.SelectedItems.Count - 1) As String
		  ' تحميل لائحة العناصر/الملفات لتوصيلها إلى مستكشف ويندوز
		  Dim i As Integer = 0
		  For Each lvi As ListViewItem In ListView1.SelectedItems
			  files(i) = lvi.Text
			  i = i + 1
		  Next
		  ' بدء عملية السحب
		  ' تحديد عملية السحب/الإفلات في النسخ فقط
		  DoDragDrop(New DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy)
	  End Sub

حددنا عملية السحب والإفلات في النسخ فقط حتى لا يتم نقل الملفات أثناء تجريب البرنامج المرفق. إذا حددنا العملية في نسخ و نقل الملفات, سيقوم مستكشف ويندوز باختيار عملية النقل أولا و سيحتاج المستخدم إلى الضغط على الزر كنترول أثناء العملية لتعديل العملية إلى نسخ.

تحياتي...

dragdrop.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 19 ديسمبر 2011 في 20:36 — السبب: زيادة رابط تلميحة جديدة

#2

يا سلام عليك اخي كود و معلومة جديدة رائعة , و كما يقال .......... اضف الى معلوماتك هذه المعلومة يا assaf_abdullah ,

محمد رضى مر من هنا .... :lol:

1

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#3

جميل يامحمد وفى انتظار باقى الخدع ;)

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#4

السلام عليكم و رحمة الله تعالى و بركاته,,,

شكرا أخوي الكريمين...

كيف ننسخ و نقص ملفا إلى Clipboard؟

post-207152-1252937579_thumb.jpg

لنسخ أو قص ملف نحو Clipboard, نقوم بنسخ مسار و اسم الملف عن طريق كائن من نوع DataObject نحو Clipboard. و هذه هي الخطوات :

نقوم أولا بتعريف ثابتي تعريف العملية. لنقل الآن أن Shell تعرف عملية النسخ بالعدد 5 أي الثابت SHELL_COPY و أنها تعرف عملية القص بالعدد 2 أي المعرف SHELL_CUT و سنرى فائدتهما فيما بعد.

	  ' ثابت لإعلام شيل بعملية نسخ الملف
		 Private Const SHELL_COPY As Byte = 5
		 ' ثابت لإعلام الشيل بعملية قص الملف
		 Private Const SHELL_CUT As Byte = 2

سنقوم بكتابة كود واحد يقوم بكلتا العمليتين. لأنهما يتمان بنفس الطريقة ما يفرق النسخ عن القص هو معرف العملية الذي تكلمنا عنه سابقا. سنقوم بإنشاء كائن من نوع الفئة DataObject. هذا الكائن يقوم بدور نقل البيانات بغض النظر عن صيغة هذه البيانات و يستعمل كثيرا مع Windows clipboard في عمليات النسخ و القص و اللصق و كذا عمليات السحب و الإفلات التي تكلمنا عليها في الموضوع السابق. بعد ذلك سنحتاج إلى كتابة كود العملية على الذاكرة باستعمال كائن من نوع MemoryStream لتخزين الكود على ذاكرة مشتركة بين برنامجنا و البرامج الأخرى يسيرها نظام التشغيل. كود العملية مكون من أربع بايت الأول سنحدد محتواه على معرف SHELL_CUT لإعلام Shell بأن الملف موضوع في حالة قص أو على المعرف SHELL_COPY لإعلامه بأن الملف موضوع في حالة نسخ. الثلاثة بايت الباقية نحددها على الصفر. بعد ذلك سنحمل الكائن من نوع DataObject بمصفوفة بها اسم أو اسماء الملفات تحت الصيغة DataFormats.FileDrop و بعدها سنحتاج إلى تظمين كود العملية أي الكائن من نوع MemoryStream تحت الصيغة "Preferred DropEffect" التي تعتبر المعرف الذي يمكن البرامج من التعرف على محتوى Clipboard من ملفات للصق. الكود تالي يلخص العملية بالتعليق :

	  Private Sub CopyFileToClipboard(ByVal cut As Boolean)
			 ' إنشاء كائن نقل البيانات
			 Dim data As IDataObject = New DataObject()
			 ' على الذاكرة stream إنشاء 
			 Dim ms = New MemoryStream(4)
			 ' كتابة كود العملية : نسخ أو القص
			 Dim bytes As Byte() = New Byte() {IIf(cut, SHELL_CUT, SHELL_COPY), 0, 0, 0}
			 ms.Write(bytes, 0, bytes.Length)
			 ms.SetLength(bytes.Length)
			 ' Clipboard نسخ أو قص الملف نحو
			 data.SetData(DataFormats.FileDrop, True, New String() {TextBox1.Text})
			 data.SetData("Preferred DropEffect", ms)
			 Clipboard.Clear()
			 Clipboard.SetDataObject(data, True)
		 End Sub

في الملف المرفق ستجدون مشروعا صغيرا يبين عمليتي النسخ و اللصق. التطبيق يقوم فقط بنسخ أو قص الملف الذي اخترتم و بعد ذلك يمكنكم لصقه عن طريق مستكشف ويندوز.

تحياتي...

shellcopycut.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 14 سبتمبر 2009 في 17:14

#5

موضوع جميل جدا

بارك الله فيك

#6

شكرا أخي النبهاني...

كيف تخفي أي URL عن الأعين؟

معلومات قيمة عن كيفية إخفاء أو حجب الـ URL. لأول وهلة قد يبدو خروجا عن الموضوع, لكننا قد نحتاج هكذا معلومات للزيادة في درجة حماية برامجنا ضد الهندسة العكسية و غيرها. يمكن لكم الحكم بأنفسكم. هاهو الموضوع :

How to Obscure Any URL

تحياتي...

#7

مشكوور اخي محمد على مواضيعك المفيده جدا

حاولت تطبيق النسخ والقص من الكليبورد

لكن يطلع لي ان الكليببورد غير معرف

هل هناك نيم سبيس متخصص بهذا

حاولت اعمل imports clipboard

:unsure: لكن لا يوجد فائده.

ارجو الافاده

ولك جزيل الشكر

#8
incomplete كتب:
مشكوور اخي محمد على مواضيعك المفيده جدا

حاولت تطبيق النسخ والقص من الكليبورد

لكن يطلع لي ان الكليببورد غير معرف

هل هناك نيم سبيس متخصص بهذا

حاولت اعمل imports clipboard

:unsure: لكن لا يوجد فائده.

ارجو الافاده

ولك جزيل الشكر

نعم أخي الكريم. لقد تم تحرير المواضيع و رفع الملفات المرفقة الموجودة الآن رهن إشارة الأعضاء للتحميل عبر المنتدى.

تحياتي...

تم تعديل هذه المشاركة بواسطة محمد رضى في 14 سبتمبر 2009 في 17:24

#9

السلام عليكم و رحمة الله تعالى و بركاته,,,

كيف نظهر نافذة بالقرب من شريط المهام مهما كان مكانه؟

post-207152-1252937763_thumb.jpg

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

أولا سنحتاج كما المعتاد لبعض التعاريف...

	  ' اسم فئة نافذة شريط المهام
	   Private TrayWndClassName As String = "Shell_TrayWnd"
	   ' المساحة الخالية بين نافذة المهام و النافذة
	   Private WndPosBlank As Integer = 10

الأول يمثل اسم فئة نافذة شريط المهام. هذا الإسم سنمرره لدالة WinAPI FindWindow للوصول إلى نافذة شريط المهام. الثاني يمثل المساحة الخالية التي سنتركها بين نافذة شريط المهام و نافذة برنامجنا.

في إطار التعريفات كذلك, سنحتاج لتعريف دوال WinAPI التي سنحتاج إليها للوصول إلى نافذة شريط المهام و مكانه :

	  ' الحصول على النافذة من خلال اسم فئتها
	   <DllImport("user32.dll")> _
	   Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
	   End Function

	   ' الوصول إلى المربع الذي تحتله نافذة
	   <DllImport("user32.dll")> _
	   Private Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef lpRect As Rectangle) As Boolean
	   End Function

لحساب مكان نافذة نريد إظهارها بالقرب من نافذة شريط المهام, نحتاج أولا للوصول إلى نافذة شريط المهام و ذلك عبر المناداة على الدالة FindWindow و نمرر لها اسم فئة نافذة شريط المهام :

		  ' الحصول على النافذة من خلال اسم فئتها
		   Dim hwnd As IntPtr = FindWindow(TrayWndClassName, Nothing)

بعد ذلك سنحتاج إلى الحصول على المربع الذي يحتله شريط المهام على الشاشة :

		  ' الوصول إلى المربع الذي تحتله نافذة
		   Dim rc As Rectangle
		   GetWindowRect(hwnd, rc)

بعد ذلك سنحتاج للوصول إلى الشاشة التي يظهر عليها شريط المهام :

		  ' الوصول إلى الشاشة التي عليها مربع المهام
		   Dim scr As Screen = Screen.FromHandle(hwnd)

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

		  ' تحديد مكان النافذة
		   '' أعلى أو أسفل الشاشة
		   If rc.Width = scr.Bounds.Width Then
			   Left = rc.Width - Width - WndPosBlank
			   If rc.Top <= 0 Then
				   Top = rc.Height + WndPosBlank
				   If rc.Height = scr.Bounds.Height Then
					   Top = 0 + WndPosBlank
					   Left = rc.Left - Width - WndPosBlank
				   End If
			   Else
				   Top = rc.Top - Height - WndPosBlank
			   End If
			   '' يمين أو يسار الشاشة
		   ElseIf rc.Height = scr.Bounds.Height Then
			   Top = WndPosBlank
			   If rc.Left <= 0 Then
				   Left = rc.Width + WndPosBlank
			   Else
				   Left = rc.Left - Width - WndPosBlank
			   End If
		   End If

في الملف المرفق تجدون مشروعا صغيرا يشغل الكود الذي تكلمنا عليه الآن ليظهر النافذة بالقرب من شريط المهام عند التشغيل.

traypos.rar

تحياتي...

traypos.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 14 سبتمبر 2009 في 17:17

#10
محمد رضى كتب:
نعم أخي الكريم. هذا رابط خارجي نحو مشروع VB.NET المرفق بالموضوع :

كيف ننسخ و نقص ملفا إلى Clipboard؟

تحياتي...

الرابط مو راضي يفتح اخي محمد

اذا في امكانيه ترفعه لموقع اخر

معليش اتعبتك

جزاك الله عني خير الجزاء

وشكرا

#11

لقد تم رفع الملفات المرفقة للمواضيع السابقة بالطريقة العادية أي عبر روابط داخلية للمنتدى.

عاود الكرة أخي incomplete و سيتم التحميل بنجاح إن شاء الله.

تحياتي...

#12

تــــــــم التحميل بنجاح

جزاك الله خير اخي محمد ع المواضيع المفيده جدا

تحياتي

#13

السلام عليكم و رحمة الله تعالى و بركاته,,,

كيف تفتح ملفا و تترك للمستخدم حرية اختيار البرنامج المضيف عن طريق النافذة Open As؟

post-207152-1252979496_thumb.jpg

الكود بسيط جدا. نقوم بإنشاء كائن Process ثم نقوم بتهيئته بالشكل التالي :


Dim imgFile As String = "file.ext"
' Process إنشاء الكائن
Dim prc As New Process()
' Open As تحديد البرنامج الذي سيقوم بفتح النافذة
prc.StartInfo.FileName = "rundll32.exe"
' Open As بارامتر خاص لفتح الملف عن طريق النافذة
prc.StartInfo.Arguments = "shell32.dll,OpenAs_RunDLL " + imgFile
' نريد فتح ملف و ليس برنامجا تنفيديا
prc.StartInfo.UseShellExecute = True
' فتح الملف
prc.Start()
		' اسم و مسار الملف المراد فتحه

عند تنفيذ الكود سيتم فتح النافذة Open As لترك الحرية للمستخدم لاختيار البرنامج الذي سيفتح الملف.

تحياتي...

#14

السلام عليكم و رحمة الله تعالى و بركاته,,,

كيف نستعلم عن سلة المهملات و كيف نفرغها؟

post-207152-1253591624_thumb.jpg

عملية استعلام سلة المهملات تتم عن طريق دالة Shell المسمات SHQueryRecycleBin و المعرفة كالتالي :

	' استعلام معلومات عن سلة المهملات
	<DllImport("Shell32")> _
	Private Shared Function SHQueryRecycleBin(ByVal pszRootPath As String, ByVal pSHQueryRBInfo As SHQUERYRBINFO) As Integer
	End Function

تستقبل اثنان من البارامتر, الأول مسار وحدة التخزين التي توجد بها سلة المهملات التي نريد طلب الإستعلام عنها إذا كان محتوى هذا البارامتر فراغ فسوف نطلب استعلاما حول كل سلات المهملات على كل وحدات التخزين. الثاني هي بنية بيانات من نوع SHQUERYRBINFO التي سترجع لنا محملة بالمعلومات حول سلة المهملات. SHQUERYRBINFO معرفة كالتالي :

	' بنية المعلومات التي ترجع إلينا بالمعلومات حول سلة المهملات
	<StructLayout(LayoutKind.Sequential, Pack:=1)> _
	Private Class SHQUERYRBINFO
		Public cbSize As UInteger ' حجم بنية المعلومات
		Public i64Size As Int64 ' حجم الملفات المحذوفة
		Public i64NumItems As Int64 ' عدد الملفات و المجلدات المحذوفة
	End Class

فيما يلي كود الزر المكلف بالاستعلام عن سلات المهملات في المشروع المرفق :

		' تجهيز بنية البيانات
		Dim query As New SHQUERYRBINFO()
		query.cbSize = Marshal.SizeOf(query)
		' استعلام معلومات عن سلة المهملات
		If SHQueryRecycleBin(Nothing, query) = S_OK Then
			' عرض المعلومات المرجعة
			Label1.Text = "حجم الملفات المحذوفة : " + (query.i64Size / (1024 * 1024)).ToString("N02") + "Mb" + vbCrLf
			Label1.Text = Label1.Text + "عدد الملفات المحذوفة : " + query.i64NumItems.ToString() + vbCrLf
			' إتاحة إمكانية طلب إفراغ سلة المهملات
			EmptyButton.Enabled = query.i64NumItems > 0
		Else
			MsgBox("فشلت العملية.", MsgBoxStyle.Critical)
			Label1.Text = "إضغط على الزر معلومات..."
		End If

أما بالنسبة لطلب إفراغ سلة المهملات فالأمر سهل و لا يحتاج إلا المناداة على الدالة SHEmptyRecycleBin المعرفة كالتالي :

	' طلب إفراغ سلة المهملات
	<DllImport("Shell32")> _
	Private Shared Function SHEmptyRecycleBin(ByVal hwnd As IntPtr, ByVal pszRootPath As String, ByVal dwFlags As UInteger) As Integer
	End Function

حيث البارامتر الأول هو هاندل نحو النافذة التي ستكون أما لنافذة طلب تأكيد عملية الإفراغ. البارامتر الثاني هو مسار نحو وحدة التخزين التي توجد عليها سلة المهملات التي نريد إفراغها أما البارامتر الثالث فهو يحدد طرق التعامل مع الطلب وفي حالتنا هذه تركناه على الصفر حتى يتم التعامل مع الطلب كما لو قمنا بطلب الإفراغ من على أيقونة سلة المهملات حيث سيطلب منا ويندوز تأكيد الطلب و يصدر صوتا بعد عملية الإفراغ. و للمزيد من المعلومات البحث عن الدالتين على MSDN.

في الملف المرفق مع هذه التلميحة, ستجدون مشروعا صغيرا يقوم بإضهار عدد الملفات المهملة و حجمها إضافة إلى إمكانيته في طلب إفراغ سلات المهملات.

تحياتي...

recyclebin.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 22 سبتمبر 2009 في 07:01

#15

مشكور على هذا المشروع الجبار :hmm: , و ياريت تزيدنا اكثر و اكثر , و تعطينا مما اعطاك الله :P

و كما يقال بالمصطلح الاردني بين دبل كوتيشن " كسرتني بحجار لطفك , و فسختني بشلاليت حنانك" ;)

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#16

مشكووور اخي محمد رضى

ماشاء الله عليك دروس في قمه الروعه

ونتبع كل مواضيعك

عن جد اسلووب في قمه الرزعه من افكار وطرح للمواضيع واكواد بعد

جزاك الله الف خيـــــــــر

بس عندي سوال في الجزئيه

اقتباس
كيف تفتح ملفا و تترك للمستخدم حرية اختيار البرنامج المضيف عن طريق النافذة Open As؟

هنا فقط يظهر لنا النافذه كيف افتح الملف بعد اجتيار البرنامج المختار م قبل المستخدم ؟؟؟؟

ومشكوووور مره اخرى

مزيدا من الخدع الرهيبه

تحياتي....

#17

شكرا لكما أخوي الغاليين الكريمين عساف و incomplete على تفاعلكما معي في هذا الموضوع :)

بالنسبة لسؤالك أخي الكريم incomplete فالكود فقط يظهر نافذة Open As و يترك الحرية للمستخدم في اختيار البرنامج المضيف الذي سيقوم بفتح الملف عند اختيار الزر OK و يترك له كذلك حرية إلغاء أمر الفتح بالضغط على الزر Cancel. يعني أنه لا حول لنا و لا قوة بعد ظهور نافذة Open As :D

تحياتي...

تم تعديل هذه المشاركة بواسطة محمد رضى في 23 سبتمبر 2009 في 04:39

#18

السلام عليكم و رحمة الله تعالى و بركاته,,,

كيف نحذف نحو سلة المهملات, ننسخ, ننقل ملفات أو مجلدات كما يفعل مستكشف ويندوز مع إمكانية إلغاء العملية من على قائمة Explorer و سطح المكتب؟

المميز في الموضوع هو أنه عند حذف ملف أو مجلد يتم طلب تأكيد من المستخدم قبل نقل الملف نحو سلة المهملات و ليس الحذف النهائي. عند نسخ أو نقل ملفات كبيرة أو كثيرة سيظهر للمستخدم نافذة بها معلومات العملية و بروجرس بار بحالة العملية و تمكن المستخدم من إلغاء العملية أثناءها باختيار الزر Cancel وبعد اتمام العملية باختيار أمر الإلغاء من قائمة مستكشف ويندوز و سطح المكتب...

post-207152-1253667616_thumb.jpg

كما هو الحال بالنسبة للتلميحات في هذا الموضوع, العملية سهلة جدا و كل العمليات المذكورة في السؤال تقوم بها دالة واحدة ألا و هي الدالة SHFileOperation المعرفة كالتالي :

	' نجمة الموضوع, الدالة التي تقوم بالعمل كله
	<DllImport("Shell32")> _
	Private Shared Function SHFileOperation(ByVal lpFileOp As SHFILEOPSTRUCT) As Integer
	End Function

و قبل المناداة على الدالة SHFileOperation, نحتاج و كما العادة إلى بعض التعريفات :

	' تفعيل إمكانية إلغاء العملية من خلال قائمة مستكشف ويندوز أو سطح المكتب
	Private Const FOF_ALLOWUNDO As Int32 = &H40
	' معرف عملية نسخ
	Private Const FO_COPY As Int32 = &H2
	' معرف عملية الحذف
	Private Const FO_DELETE As Int32 = &H3
	' معرف عملية النقل
	Private Const FO_MOVE As Int32 = &H1

بعد التعريفات, و جب الذكر كما لاحظتم أن الدالة SHFileOperation تقبل كبرامتر (أحدكم يخبرني مقابل كلمة Parameter أو Argument باللغة العربية :D) بنية البيانات SHFILEOPSTRUCT التي تحتوي على كل المعلومات اللازمة لتقوم الدالة SHFileOperation بعملها كما يجب :

	' بنية البيانات التي نهيئها و نمررها للدالة SHFileOperation
	<StructLayout(LayoutKind.Sequential, Pack:=1)> _
	Private Class SHFILEOPSTRUCT
		Public hwnd As IntPtr ' النافذة الأم لنوافد التأكيد و بروجرس بار
		Public wFunc As UInteger ' العملية المطلوبة
		Public pFrom As String ' مسار ملف أو مجلد الذي ستتم عليه العملية
		Public pTo As String ' في حالة نقل أو نسخ, مسار المجلد المستقبل
		Public fFlags As UInteger ' خيارات العمليات
		Public fAnyOperationsAborted As Boolean ' صحيح في حالة إلغاء العملية بعد بدئها
		Public hNameMappings As IntPtr ' فقط في حالة تعديل اسم مجلد أو ملف
		Public lpszProgressTitle As String ' عنوان نافذة البروجرس بار التي تظهر في حالة كبر الملف أو المجلد
	End Class

فيما يلي كود بسيط لتهيئة بنية البيانات SHFILEOPSTRUCT و المناداة على الدالة SHFileOperation :

	Private Sub DoFileOperation(ByVal FileOp As UInteger, ByVal SrcPath As String, ByVal DstPath As String)
		' إنشاء بنية البيانات
		Dim shfo As New SHFILEOPSTRUCT()
		' تحديد النافذة الأم لنوافد التأكيد و البروجرس بار
		shfo.hwnd = Me.Handle
		' تفعيل إمكانية إلغاء العملية بعد إتمامها
		shfo.fFlags = FOF_ALLOWUNDO
		' تحديد معرف العملية الحالية
		shfo.wFunc = FileOp
		' الملف أو المجلد الذي ستتم عليه العملية
		shfo.pFrom = SrcPath
		' المجلد المستقبل في حالة نسخ أو نقل
		shfo.pTo = DstPath
		' تشغيل العملية
		SHFileOperation(shfo)
	End Sub

حيث البارامتر الأول يقبل معرف العملية من نوع FO_XXXX الذي يحدد العملية التي ستقوم بها الدالة SHFileOperation. البارامتر الثاني يقبل مسار ملف أو مجلد المصدر الذي ستتم عليه العملية. البارامتر الأخير يقبل مسار مجلد الذي سيستقبل الملف أو المجلد المصدر. إذا كانت العملية عملية حذف نحدد البارامتر الأخير في فراغ.

في النهاية و جب الذكر أنني تجاهلت عملية تغيير اسم ملف أو مجلد التي تقوم بها نفس الدالة بنفس بنية البيانات مع تحديد معرف العملية في :

Private Const FO_RENAME As Int32 = &H4

إسم ومسار المصدر محدد على العضو pFrom لبنية البيانات SHFILEOPSTRUCT و اسم و مسار الملف بالإسم الجديد على العضو pTo.

في الملف المرفق ستجدون مشروعا صغيرا يبين خصائص الدالة SHFileOperation.

تحياتي...

sampleproject.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 23 سبتمبر 2009 في 04:10

1
#19

السلام عليكم و رحمة الله تعالى و بركاته,,,

كيف تقوم بعملية بحث عن ملف داخل مجلد و المجلدات الداخلية بكل سهولة؟

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

post-207152-1254351044_thumb.jpg

الكود معلق عليه بالتفصيل :

	  ' الدالة العودية التي تقوم بعملية البحث عن الملفات
	  ' path : المجلد الذي ستبدأ فيه عملية البحث
	  Private Sub FindIntoNextFolder(ByVal path As String)
		  ' إنهاء عملية البحث إذا خطأ
		  If Not IsRunning Then Return
		  ' لتمكين المستخدم من إنهاء عملية البحث بالضغط على الزر إنهي
		  Application.DoEvents()
		  ' إعلام المستخدم بالمجلد الحالي الذي تتم فيه عملية البحث
		  StatusTextBox.Text = path
		  StatusTextBox.Update()
		  ' لتفادي المجلدات التي لا يمكننا الوصول إليها
		  Try
			  ' البحث عن الملفات الموجودة داخل المجلد الحالي
			  Dim files As String() = Directory.GetFiles(path)
			  If files.Length > 0 Then
				  For Each f As String In files
					  If IO.Path.GetFileName(f).ToLower().Contains(FindTextBox.Text) Then
						  ' زيادة اسم و مسار الملف على اللائحة
						  EntriesListBox.Items.Add(f)
					  End If
				  Next
			  End If

			  ' استعراض المجلدات التي يحويها المجلد الحالي للبحث فيها
			  Dim dirs As String() = Directory.GetDirectories(path)
			  If dirs.Length > 0 Then
				  For Each d As String In dirs
					  ' بدأ عملية بحث جديدة داخل المجلد الداخلي
					  FindIntoNextFolder(d)
				  Next
			  End If
		  Catch
		  End Try
	  End Sub

الكود لا يدعم البحث باستعمال الكاراكترز * و ? و غيرها. يمكن تحرير الكود لإعلام البرنامج بوجود ملف تتوفر فيه شروط البحث عن طريق Delegate أو event أو غيرها.

الملف المرفق به مشروع صغير يبين الكود و طريقة استخدامه.

تحياتي...

DirFind.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 1 أكتوبر 2009 في 01:56

#20
اقتباس
أحدكم يخبرني مقابل كلمة Parameter أو Argument باللغة العربية

وسيطة وجمعها وسائط :lol:

تابع

#21
النبهاني كتب:
وسيطة وجمعها وسائط :lol:

تابع

مشكور أخي النبهاني. سأضيفها إلى معلوماتي:D

تحياتي...

#22

السلام عليكم و رحمة الله تعالى و بركاته,,,

كيف تظهر نص مساعدة على مربع نص؟

post-207152-1254702943_thumb.jpg

كنت في موضوع سابق في منتدى مبرمجي C# قد وضعت كودا لأداة مربع نص تمكن من تحديد نص المساعدة. هذه الأداة قمت بتطويرها من الصفر تطلبت مني كودا من 192 سطرا و لكن و للأسف اكتشفت مؤخرا أنني يمكن أن أقوم بنفس العمل بأقل من عشرة أسطر و ذلك بالمناداة على دالة API واحدة مخصصة لهذا الغرض.

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

كما ذكرنا أعلاه, طريقة إظهار نص المساعدة تحتاج المناداة على دالة API واحدة و لهذا سنحتاج لبعض التعريفات كما هي العادة :

	  Private Const ECM_FIRST As Int32 = &H1500
	  ' رسالة ويندوز لتحديد نص المساعدة على مربع نص
	  Private Const EM_SETCUEBANNER As Int32 = (ECM_FIRST + 1)

	  'دالة إرسال رسائل ويندوز
	  <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
	  Private Shared Function SendMessage(ByVal hWnd As HandleRef, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As String) As IntPtr
	  End Function

تحديد نص المساعدة على مربع نص يتم عبر إرسال رسالة EM_SETCUEBANNER إلى المربع المعني بالأمر المحدد بالمرجع hWnd, نص المساعدة يتم تمريره عبر البارامتر lParam, أما wParam فيحدد لنا إذا كنا نريد من المربع إظهار نص المساعدة حتى بعد تنشيط المربع في هذه الحالة نمرر القيمة True أما للمحافظة على طريقة الاشتغال العادية, نمرر القيمة صفر.

و فيما يلي الدالة SetCueBanner التي تسهل هذه العملية :

	  ''' <summary>
	  ''' دالة تحدد نص المساعدة الذي سيضهر على مربع نص للدلالة على المحتوى المطلوب.
	  ''' </summary>
	  ''' <param name="TextControl">مربع النص المراد تحديد نص المساعدة عليه.</param>
	  ''' <param name="CueBannerText">نص المساعدة الذي سيظهر على مربع النص.</param>
	  ''' <remarks></remarks>
	  Private Sub SetCueBanner(ByVal TextControl As TextBox, ByVal CueBannerText As String)
		  SendMessage(New HandleRef(TextControl, TextControl.Handle), EM_SETCUEBANNER, 0, CueBannerText)
	  End Sub

البارامتر الأول نمرر من خلاله كائن مربع النص الذي نريد تحديد نص المساعدة عليه. البارامتر الثاني, نمرر من خلاله نص المساعدة الذي سيظهر على مربع النص. لتحديد نص المساعدة على أي مربع نص نقوم بالمناداة على الدالة السابقة بالطريقة التالية :

SetCueBanner(TextBox1, "نص المساعدة.")

ملاحظة : صراحة لم أجرب لكنني متأكد 99 بالمائة أن هذه الطريقة ستشتغل أيضا مع مربعات من نوع Combo box.

في الملف المرفق ستجدون مشروعا صغيرا به الكود الكامل لهذه الإضافة.

تحياتي...

CueBanner.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 5 أكتوبر 2009 في 03:54

#23

السلام عليكم و رحمة الله تعالى و بركاته...

القيمة الإفتراضية للخاصية FlatStyle لمربعات الأزرار Button تخفي أحد المؤثرات الخاصة لواجهة المستخدم.

لا أدري إن كنتم قد لاحظتم مثلي إخواني مستعملي نظام تشغيل ويندوز فيستا و ما بعده توهج لون الزر النشيط على نافذة ما للبرامج الأخرى غير أن واجهة المستخدم لبرامجنا المشتغلة على إطار الدوت نت لا تتمتع بهذا المؤثر الخاص. ذلك لأنه عند زيادة الأداة Button, الخاصية FlatStyle تأخد قيمة افتراضية هي Standard ما يلغي خاصية رسم نظام التشغيل للزر.

لكي نظيف هذا المؤثر الخاص الذي يتمثل في توهج الزر Button النشيط حاليا على نافذة من نوافذ برامجنا, يكفي أن نحدد الخاصية FlatStyle في القيمة System. بعدها, عند تنفيذ و تشغيل المشاريع المطورة لإطار الدوت نت, سنرى توهجا في لون خلفية الزر النشيط حاليا على النافذة أو الزر المحدد على الخاصية Form.AcceptButton بشرط أن يكون نظام التشغيل يدعم هذا المؤثر الخاص.

تحياتي...

#24

السلام عليكم و رحمة الله تعالى و بركاته...

كيف تظهر مربع حوار Properties للملفات, المجلدات و وحدات التخزين؟

post-207152-1255528928_thumb.jpg

في هذه التلميحة, سنتعرف, إن شاء الله, عن كيفية إظهار مربع حوار Properties للملفات و المجلدات و وحدات التخزين. و كما هي العادة في هذا الموضوع, الطريقة سهلة للغاية و لا تتعدى كتابة بعض التعاريف و المناداة على دالة API واحدة. لنبدأ بزيادة التعاريف :

لتسهيل عملية الفهم سوف نقوم بالتعامل مع الدالة SHObjectProperties عن طريق الثابت SHOP_FILEPATH الذي يعلم الدالة بأننا سنتعامل معها عن طريق مسارات العناصر فقط مهما كانت هذه العناصر ملفات, مجلدات أم وحدات تخزين :

 Private Const SHOP_FILEPATH As UInteger = &H2

بعد ذلك سنحتاج لتعريف دالة API SHObjectProperties للمناداة عليها من داخل مشروع VB.NET :

	  <System.Runtime.InteropServices.DllImportAttribute("shell32.dll", EntryPoint:="SHObjectProperties")> _
	  Public Shared Function SHObjectProperties( _
		  ByVal hwnd As System.IntPtr, _
		  ByVal shopObjectType As UInteger, _
		  <System.Runtime.InteropServices.InAttribute(), System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)> _
		  ByVal pszObjectName As String, _
		  <System.Runtime.InteropServices.InAttribute(), System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)> _
		  ByVal pszPropertyPage As String) As Boolean
	  End Function

عكس ما قد يترامى للأذهان, المناداة على الدالة SHObjectProperties عملية بسيطة للغاية :

 SHObjectProperties(Me.Handle, SHOP_FILEPATH, "path", "tab_name")

البارامتر الأول هو هاندل النافذة الأم لمربع الحوار Properties الذي سيظهر.

البارامتر الثاني هو معرف لنوعية قيمة البارامتر الثالث و القيمة SHOP_FILEPATH تدل على أن البارامتر التالي هو مسار لعنصر كان ملفا, مجلدا أو وحدة تخزين.

البارامتر الثالث هو مسار للعنصر الذي نريد إظهار مربع الحوار Properties لإظهار خصائصه و المعلومات المتعلقة به.

البارامتر الأخير هو اسم Tab الذي نريد إظهاره بمجرد ظهور مربع الحوار Properties. يمكننا تمرير كائن string فارغ "" لإظهار مربع الحوار على Tab الأول كما هي العادة عند اختيار Properties من مستكشف ويندوز أو سطح المكتب, كما يمكننا تحديد اسم Tab الذي نريد أن يظهر أولا ليتم إظهاره بمجرد ظهور مربع الحوار Properties.

في الملف المرفق مشروع صغير به الكود كاملا مع التعليق.

تحياتي,,,

ObjProp.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 14 أكتوبر 2009 في 17:14

#25
اقتباس
كيف تظهر نص مساعدة على مربع نص؟

كنت افعلها يدويا، و لم اكن اتوقع ان لها رساله خاصه بها

معلومه جديده اخى محمد، شكرا لك

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

مواضيع مشابهة