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

سؤال هل يمكن اتسخدام الProgrressBar تتبع الويندوز

مغلق
بدأه Romantic_touch في 21 ديسمبر 2005 · 12 رد · 843 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

نرى عن القيام بعمل حذف او نقل لملفات من مكان لمكان تظهر لنا شاشة الويندوز التي تحتوي على progressbar

لتعرض لنا الوقت المتبقي للانتهاء من العملية فهل يمكن ان نستخدمها او نصنع شي مشابه لها؟

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#2

نعم يمكنك ذلك باستخدام Windows API

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

أو إذا أردت شيئا أسهل

يمكنك الاستعانة بمكتبة كنت قد وضعتها في إجابة لأحد الإخوة إجابة على سؤاله في الموضوع

كيف أعطل عمل Ctrl + Alt + Delete ففيها الاجرائية المذكورة مغلفة وجاهزة الاستخدام وذلك من أجل عملية النسخ

تم تعديل هذه المشاركة بواسطة samerselo في 21 ديسمبر 2005 في 17:04

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

و إليك التعريفات الكاملة الخاصة بالأمر 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

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#4

اخي الكريم كيف يمكن الاستفادة منها؟؟

هل ممكن عمل مثال؟

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#5

الشغلة سهلة بس أنت دخل المعلومات يللي بدك ايها على متغير من نوع SHFILEOPSTRUCT ثم مرره الإجرائية SHFileOperation فقط بكل سهولة

على كل حال بحاول اعمل مثال قريبا

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#6

تفضل هذا مثال لعملية النسخ على VB2005

مرفق

WindowsApplication3.zip

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#7

و ليلي عم يشتغل على Vb2003

كمان هي نفس مثال عملية النسخ مرفق

WindowsApplication4.zip

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#8

و بالنسبة لعمليات النقل والحذف نفس العملية بس بتختلف القيم التي نخصصها لـمتغير من نوع 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

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#9

الف شكر اخوي

زبطت معايا بس فيه سؤال

في مثال 2005 طبعا انا غيرت المسارات تبعك

بس المشكلة اني لازم اكتب له اسم المسار ولو حطيت اسم الملف ماتشتغل

وانا ما ابغى انقل المجلد كله فقط ملف معين

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#10

هون لازم تعطيه اسم الملف مع المسار كامل مثلا

إذا كان الملف 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

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#11

وهذا كود الزر الموجود في المثال معدل لنسخ ملف وحيد

    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

كما تلاحظ يمكن استخدام الـ * و الـ ؟ كبدائل للمحارف لاختيار مجموعة معينة من الملفات

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#12

أو حتى نسخ أكثر من ملف بسرد مساراتها الكاملة

وهذا كود الزر في المثال يوضح هذه الفكرة

    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

كما تلاحظ أخي من الأمثلة الأخيرة

في هذا الموضوع لاحدود للإمكانيات التي تريدها نسخ - حذف - نقل ملف - عدة ملفات - مجلد - عدة مجلدات .... الخ

يمكنك الحصول على ما تريد ببساطة تامة فقط تعديلات طفيفة في الكود وسيقوم بأي مهمة تريدها

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#13

في ملاحظة متعلقة بالكود الأخير

وقت عم نستخدم اسم ملف واحد لازم ننهي بـالمحرف لاشئ null لاحظ نهائية كود سطر اسم الملف في الكودين في المشاركة 11

وقت بدك تحط اسم أكثر من ملف لازم تفصلهون بالمحرف لا شئ Null و من هنا جاء استخدام ControlChars.NullChar للفصل بين أسماء الملفات بس هون صار لازم تنهي السلسة بـ 2 Null لاحظ الكود جيدا في المشاركة 12

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

هذا الموضوع مغلق.

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