میخوام زمان یه عمل رو تو سیستم به دست بیارم یعنی وقتی برنامم داره یه سری فایل رو کپی یا پاک میکنه یه progsess شروع بشه به پر شدن و وقتی عمل کپی شدن تموم شد progsess هم پر بشه
ممنون![]()
میخوام زمان یه عمل رو تو سیستم به دست بیارم یعنی وقتی برنامم داره یه سری فایل رو کپی یا پاک میکنه یه progsess شروع بشه به پر شدن و وقتی عمل کپی شدن تموم شد progsess هم پر بشه
ممنون![]()
با سلام
کاری که من در سیستم عامل دیدم اینجوری که ابتدا اگه برای progsess مثلا تنظیم شده باشه روی 100 ابتدا شما تا
90 اونو پر کن زمانی که به 90 رسید فایلتون رو کپی کنید بعد مجداا progsess رو فعال کنید اینجوری به نظر میرسه progsess با کپی فایل همزمان انجام میشه کارراحتی هم هست
زمان انجام یک عمل مثل کپی کردن فایل روی سیستم های مختلف فرق میکنه و روی یک سیستم هم ممکنه در زمان های مختلف فرق بکنه یعنی یکبار مثلا 1 ثانیه یک بار سیستم شلوغ تره و 2.5 ثانیه و ...
به هر حال برای بدست آوردن این زمان توی ویبی میشه از API ی GetTickCount استفاده کرد:
البته همونطور که گفتم توی زمان های مختلف این زمان میتونه متفاوت باشه و برای ساختن یک Progress این روش جالبی نیست.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
واسه ساختن Progress میشه از API ی CopyFileEx استفاده کرد که در حین کپی کردن یک فایل بوسیله یک تابع CallBack , اون مقداری از عملیات که پیش رفته رو مدام به ما اعلام میکنه, یه Module درست کن و کد زیر رو داخلش کپی کن :
و برای استفاده از کد توی فرم ت کافیه تابع FileCopyProgress رو فراخوانی کنی.آرگومان اول آدرس فایل مبدا, دومی آدرس فایل مقصد. سومی هم اگه True باشه و فایل مقصد از قبل وجود داشته باشه عمل کپی انجام نمیشه:کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با زدن دکمه ی Command1 , عمل کپی شروع میشه و تابع CopyProgressRoutine به طور پی در پی تا کامل شدن عمل کپی فراخوانی میشه و خطی که Bold ش کردم اجرا میشه و Tile فرم درصد رو از 0 تا 100 نشون میده.میتونی برای نشون دادن یک ProgressBar این خط کد رو به دلخواه عوض کنی و مقدار ProgressBar ی که توی فرم داری رو اضافه کنی یا هر کار دیگه..کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ضمن اینکه با فراخوای تابع CancelCopy در هر لحظه میشه عمل کپی شدن رو Cancel کرد:
-------------کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
علت استفاده از نوع Curreny در تابع CallBack اینه که API ی CopyFileEx این پارامتر رو LARGE_INTEGER که هشت بایتی هست در نظر میگیره که توی VB نداریم و چون این پارامتر ها به صورت فراخوانی با مقدار (نه آدرس) مقدار دهی میشن نمیشه از Structure استفاده کرد.
Last edited by m3hrz4d; 22-11-2007 at 18:42.
سلام
در مورد تابع callback زیر
CopyProgressRoutine
میشه بگی اینو از کجا باید بیاریم
اینو باید خودمون بنوسیم که توضیحات اینکه چطور باید بنویسیم و پارامتر هاش چی هستن توی MSDN مایکروسافت همش توضیح داده شده. (البته اکثرا به صورت کد C نه VB)
وقتی به قسمت مربوط به CopyFileEx میری اونجا تک تک پارامتر ها توضیح داده شدن و این تابع CopyProgressRoutine هم لینک صفحه ای که در موردش توضیح داده شده توش هست:
msdn2.microsoft.com/en-us/library/aa363854.aspx اینجا CopyProgressRoutine توضیح داده شده
msdn2.microsoft.com/en-us/library/aa363852.aspx اینجا هم CopyFileEx
البته اگه فقط در مورد همین CopyFileEx و CopyProgressRoutine توضیح میخوای(نه CallBack های دیگه), اینجا توضیح این کدی که نوشتم رو کامل دادم:
weblog.mehrzad.net/default.aspx?id=42
Last edited by m3hrz4d; 23-11-2007 at 21:45.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)