نسخ الملفات باستخدام الدالة Api CopyFileEx مع اظهار حالة النسخ فى Progressbar

إرسال مساهمة في موضوع

اذهب الى الأسفل

نسخ الملفات باستخدام الدالة Api CopyFileEx مع اظهار حالة النسخ فى Progressbar

مُساهمة من طرف جورج صبحى في الأربعاء نوفمبر 28, 2018 11:20 am

ستخدم المثال التالي الدالة Api CopyFileEx التي تسمح لنا بنسخ ملف وإظهار حالة التقدم الملف ، في عنصر تحكم Progressbar
كما يسمح أيضًا بتصور الحالة النهائية للنتيجة ما إذا انتهت بشكل صحيح أو حدث خطأ أو تم إلغاؤه.


ضع عناصر التحكم التالية على نموذج form1:

مربع النص Text1: هنا يجب الإشارة إلى مسار المصدر من الملف
مربع النص Text2: مسار الوجهة
أداة التسمية Label1 : يعرض عنصر التحكم في التسمية هذا حالة عملية النسخ ، إذا كان قد تم الانتهاء من صحته ، أو إذا تم إلغاؤه أو كان هناك خطأ (وهو باللون الأحمر)
Progressbar1 : شريط التقدم لمشاهدة التقدم: الخاصية Max ضع قيمتها 100 و Min Property في 0 (يتم افتراضياً بالفعل)
Command1 : لبدء عملية النسخ
Command2 : إلغاء عملية النسخ.

كتابة الشفرات

افتح وحدة نمطية módulo واكتب الشفرات التالية :

الكود:
Option Explicit

'الاعلان عن متغيرات Api CopyFileEx
'*************************************
Public Const PROGRESS_CANCEL = 1
Public Const PROGRESS_CONTINUE = 0
Public Const PROGRESS_QUIET = 3
Public Const PROGRESS_STOP = 2
Public Const COPY_FILE_FAIL_IF_EXISTS = &H1
Public Const COPY_FILE_RESTARTABLE = &H2

'الاعلان عن الدالة Api CopyFileEx
Public Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" ( _
    ByVal lpExistingFileName As String, _
    ByVal lpNewFileName As String, _
    ByVal lpProgressRoutine As Long, _
    lpData As Any, _
    ByRef pbCancel As Long, _
    ByVal dwCopyFlags As Long) As Long

' الاعلان عن متغير لالغاء عملية النسخ
Public Cancelar As Long

'إنشاء وظيفة للنسخ
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function CopiarArchivo(ByVal TotalFileSize As Currency, ByVal _
                                   TotalBytesTransferred As Currency, _
                                   ByVal StreamSize As Currency, _
                                   ByVal StreamBytesTransferred As Currency, _
                                   ByVal dwStreamNumber As Long, _
                                   ByVal dwCallbackReason As Long, _
                                   ByVal hSourceFile As Long, _
                                   ByVal hDestinationFile As Long, _
                                   ByVal lpData As Long) As Long

    
    'إظهار حالة التقدم
    Form1.ProgressBar1.Value = CStr(Int((TotalBytesTransferred * 10000) / _
                                            (TotalFileSize * 10000) * 100))
    
    DoEvents
  
    CopiarArchivo = PROGRESS_CONTINUE
End Function
 



فى حدث النقر على زر التحميل نكتب الشفرة التالية :

الكود:
 Private Sub Command1_Click()
    Dim Ret As Long

    Cancelar = 0
   
 
    Label1.Caption = "جاري نسخ الملف: " & Text1 & " الى: " & Text2
   
   
    Ret = CopyFileEx(Trim$(Text1.Text), Trim$(Text2.Text), AddressOf CopiarArchivo, _
                                ByVal 0&, Cancelar, COPY_FILE_RESTARTABLE)
   
 
    Label1.Caption = "حالة النسخ: " + IIf(Ret = 0, _
                        "(Error/Abortado)", _
                        "تم النسخ")

End Sub

أما فى زر الغاء النسخ نكتفي بالشفرة التالية

الكود:
Private Sub Command2_Click()
 
    Cancelar = 1
End Sub

avatar
جورج صبحى
......
......

تاريخ التسجيل : 18/02/2011
المساهمات : 114
النقاط : 242
التقيم : 4
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: نسخ الملفات باستخدام الدالة Api CopyFileEx مع اظهار حالة النسخ فى Progressbar

مُساهمة من طرف أحمد مناع في الأحد ديسمبر 02, 2018 2:02 pm

تحياتى [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة
avatar
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 859
النقاط : 201562
التقيم : 83
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
تستطيع الرد على المواضيع في هذا المنتدى