نرى عن القيام بعمل حذف او نقل لملفات من مكان لمكان تظهر لنا شاشة الويندوز التي تحتوي على progressbar
لتعرض لنا الوقت المتبقي للانتهاء من العملية فهل يمكن ان نستخدمها او نصنع شي مشابه لها؟
نرى عن القيام بعمل حذف او نقل لملفات من مكان لمكان تظهر لنا شاشة الويندوز التي تحتوي على progressbar
لتعرض لنا الوقت المتبقي للانتهاء من العملية فهل يمكن ان نستخدمها او نصنع شي مشابه لها؟
<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>
نعم يمكنك ذلك باستخدام Windows API
ابحث في مكتبة MSDN المرفقة مع فيجول ستوديو عن SHFileOperation حيث يمكنك من خلال هذا الامر حذف و نقل ولإعادة تسمية أي ملف أو مجلد
أو إذا أردت شيئا أسهل
يمكنك الاستعانة بمكتبة كنت قد وضعتها في إجابة لأحد الإخوة إجابة على سؤاله في الموضوع
كيف أعطل عمل Ctrl + Alt + Delete ففيها الاجرائية المذكورة مغلفة وجاهزة الاستخدام وذلك من أجل عملية النسخ
تم تعديل هذه المشاركة بواسطة samerselo في 21 ديسمبر 2005 في 17:04
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
و إليك التعريفات الكاملة الخاصة بالأمر SHFileOperation
Public Const FO_COPY As Short = &H2S Public Const FO_DELETE As Short = &H3S Public Const FO_MOVE As Short = &H1S Public Const FO_RENAME As Short = &H4S Public Const FOF_ALLOWUNDO As Short = &H40S Public Const FOF_CONFIRMMOUSE As Short = &H2S Public Const FOF_FILESONLY As Short = &H80S Public Const FOF_MULTIDESTFILES As Short = &H1S Public Const FOF_NOCONFIRMATION As Short = &H10S Public Const FOF_NOCONFIRMMKDIR As Short = &H200S Public Const FOF_RENAMEONCOLLISION As Short = &H8S Public Const FOF_SILENT As Short = &H4S Public Const FOF_SIMPLEPROGRESS As Short = &H100S Public Const FOF_WANTMAPPINGHANDLE As Short = &H20S <StructLayout(LayoutKind.Auto, CharSet:=CharSet.Auto)> Public Structure SHFILEOPSTRUCT Dim hwnd As Integer Dim wFunc As Integer Dim pFrom As String Dim pTo As String Dim fFlags As Short Dim fAnyOperationsAborted As Integer Dim hNameMappings As Integer Dim lpszProgressTitle As String ' only used if FOF_SIMPLEPROGRESS End Structure Public Declare Function SHFileOperation Lib "shell32.dll" Alias " SHFileOperationA" (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
ولكنك ستحتاج إلى الاستيراد التالي في بداية الملف
Imports System.Runtime.InteropServices
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
اخي الكريم كيف يمكن الاستفادة منها؟؟
هل ممكن عمل مثال؟
<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>
الشغلة سهلة بس أنت دخل المعلومات يللي بدك ايها على متغير من نوع SHFILEOPSTRUCT ثم مرره الإجرائية SHFileOperation فقط بكل سهولة
على كل حال بحاول اعمل مثال قريبا
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
و بالنسبة لعمليات النقل والحذف نفس العملية بس بتختلف القيم التي نخصصها لـمتغير من نوع SHFILEOPSTRUCT الذي سنمرره للإجرائية SHFileOperation
على فكرة أثناء عمل المثال عدلت شوي على التعريفات يللي حطيتها سابقا بهذا الموضوع وهي التعريفات الجديدة
Public Structure SHFILEOPSTRUCT Dim hwnd As Integer Dim wFunc As Integer Dim pFrom As String Dim pTo As String Dim fFlags As Short Dim fAnyOperationsAborted As Integer Dim hNameMappings As Integer Dim lpszProgressTitle As String ' only used if FOF_SIMPLEPROGRESS End Structure Public Declare Ansi Function SHFileOperation Lib "shell32.dll" (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
وما عاد في داعي لاستخدام الاستيراد
Imports System.Runtime.InteropServices
في بداية الملف
تم تعديل هذه المشاركة بواسطة samerselo في 22 ديسمبر 2005 في 23:05
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
الف شكر اخوي
زبطت معايا بس فيه سؤال
في مثال 2005 طبعا انا غيرت المسارات تبعك
بس المشكلة اني لازم اكتب له اسم المسار ولو حطيت اسم الملف ماتشتغل
وانا ما ابغى انقل المجلد كله فقط ملف معين
<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>
هون لازم تعطيه اسم الملف مع المسار كامل مثلا
إذا كان الملف samer.txt موجود في المجلد Text Files ضمن السواقة c لازم تعطيه مسار الملف كامل
C:\Text Files\samer.txt
بعدين لازم تستخدم الثابت FOF_FILESONLY في fFlags
dim shf as SHFILEOPSTRUCT shf.fFlags = FOF_FILESONLY
وإذا احتجت إلى استخدام أكثر من ثابت ضمن fFlags لازم تجمعهم باستخدام or مثل
shf.fFlags = FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR
خياراتك وشو بدك تشتغل هي في fFlags وأنا حطيت حالة خاصة واحدة كمثال فقط
تم تعديل هذه المشاركة بواسطة samerselo في 24 ديسمبر 2005 في 12:29
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
وهذا كود الزر الموجود في المثال معدل لنسخ ملف وحيد
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Fst As SHFILEOPSTRUCT With Fst .hwnd = Me.Handle.ToInt32 .wFunc = FO_COPY .pFrom = "C:\SQL Server 2000 Sample Databases\PUBS_LOG.LDF" & ControlChars.NullChar .pTo = "d:\temp\" & ControlChars.NullChar .fFlags = FOF_FILESONLY .fAnyOperationsAborted = 0 .hNameMappings = 0 .lpszProgressTitle = "" End With SHFileOperation(Fst) End Sub
أو مجموعة ملفات
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Fst As SHFILEOPSTRUCT With Fst .hwnd = Me.Handle.ToInt32 .wFunc = FO_COPY .pFrom = "C:\SQL Server 2000 Sample Databases\*.LDF" & ControlChars.NullChar .pTo = "d:\temp\" & ControlChars.NullChar .fFlags = FOF_FILESONLY .fAnyOperationsAborted = 0 .hNameMappings = 0 .lpszProgressTitle = "" End With SHFileOperation(Fst) End Sub
كما تلاحظ يمكن استخدام الـ * و الـ ؟ كبدائل للمحارف لاختيار مجموعة معينة من الملفات
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
أو حتى نسخ أكثر من ملف بسرد مساراتها الكاملة
وهذا كود الزر في المثال يوضح هذه الفكرة
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Fst As SHFILEOPSTRUCT With Fst .hwnd = Me.Handle.ToInt32 .wFunc = FO_COPY .pFrom = "C:\SQL Server 2000 Sample Databases\NORTHWND.MDF" & ControlChars.NullChar & _ "C:\SQL Server 2000 Sample Databases\NORTHWND.LDF" & ControlChars.NullChar & _ "C:\SQL Server 2000 Sample Databases\NORTHWND_log.ldf" & ControlChars.NullChar & ControlChars.NullChar .pTo = "d:\temp\" & ControlChars.NullChar .fFlags = FOF_FILESONLY .fAnyOperationsAborted = 0 .hNameMappings = 0 .lpszProgressTitle = "" End With SHFileOperation(Fst) End Sub
كما تلاحظ أخي من الأمثلة الأخيرة
في هذا الموضوع لاحدود للإمكانيات التي تريدها نسخ - حذف - نقل ملف - عدة ملفات - مجلد - عدة مجلدات .... الخ
يمكنك الحصول على ما تريد ببساطة تامة فقط تعديلات طفيفة في الكود وسيقوم بأي مهمة تريدها
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
في ملاحظة متعلقة بالكود الأخير
وقت عم نستخدم اسم ملف واحد لازم ننهي بـالمحرف لاشئ null لاحظ نهائية كود سطر اسم الملف في الكودين في المشاركة 11
وقت بدك تحط اسم أكثر من ملف لازم تفصلهون بالمحرف لا شئ Null و من هنا جاء استخدام ControlChars.NullChar للفصل بين أسماء الملفات بس هون صار لازم تنهي السلسة بـ 2 Null لاحظ الكود جيدا في المشاركة 12
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
هذا الموضوع مغلق.