PDA

View Full Version : نیاز به تکنیکی برای رفرش فرم مثلا در هر 10 دقیقه



mosaArabi
شنبه 09 آبان 1394, 00:14 صبح
سلام
از دوستان کسی دستوری برای رفرش فم در هر 10 دققه یکبار را داره (بصورت اتوماتیک زمانیکه فرم باز بود این عمل لنجام شود)

alirezabahrami
شنبه 09 آبان 1394, 06:10 صبح
سلام
از دوستان کسی دستوری برای رفرش فم در هر 10 دققه یکبار را داره (بصورت اتوماتیک زمانیکه فرم باز بود این عمل لنجام شود)
سلام آقای عربی !
چرا از رویداد تایمر برای اینکار استفاده نمی کنید ؟
یاعلی

mosaArabi
شنبه 09 آبان 1394, 07:24 صبح
سلام جناب بهرامی
شما ماشالله دست به کد تون خوبه آقا ما غیر حرفه ای هستیم :چشمک:

alirezabahrami
شنبه 09 آبان 1394, 10:11 صبح
سلام جناب بهرامی
شما ماشالله دست به کد تون خوبه آقا ما غیر حرفه ای هستیم :چشمک:
شکست نفسی نفرمائید جناب عربی !
علت عدم استفاده از رویداد تایمر را نفرمودی !

Rasool-GH
شنبه 09 آبان 1394, 10:51 صبح
سلام . در رویداد On Timer فرم کد ریفرش رو قرار بدید و Timer Interval فرم که پیشفرض 0 هست رو به مقدار دلخواه تغییر بدید . واحد عدد میلی ثانیه است


Private Sub Form_Timer()
Me.Form.Refresh
End Sub

mosaArabi
شنبه 09 آبان 1394, 11:42 صبح
سلام
علت خاصی نداره جناب بهرامی فقط دنبال اینم که یک روش بهتر پیدا کنم
بخاطر اینکه در فرم من تکس اطلاعیه گذاشتم . حالا اگه پیام جدید گذاشته بشته تا کاربر فرم را رفرش نکنه یا خروج و ورود نکنه متوجه اطلاعیه جدید نمیشه
ممنون از لطفتون

alirezabahrami
شنبه 09 آبان 1394, 11:43 صبح
سلام . در رویداد On Timer فرم کد ریفرش رو قرار بدید و Timer Interval فرم که پیشفرض 0 هست رو به مقدار دلخواه تغییر بدید . واحد عدد میلی ثانیه است


Private Sub Form_Timer()
Me.Form.Refresh
End Sub
سلام
بی تردید ، نوشتن این کد ساده برای آقای عربی که جزء پیشکسوتان این تالار هستند جزء بدیهیات است . من فکر می کنم در استفاده از این کد یک محدودیتی دارند . مثلاً در فرمشان دارای یک تکست یا لیبل برای نمایش ساعت هستند و بنده به همین لحاظ بدون ارائه کد ، دلیل عدم استفاده از آن را از ایشان جویا شده ام .
یا علی

Rasool-GH
شنبه 09 آبان 1394, 13:28 عصر
سلام . بنده افتخار اشنایی با ایشون رو ندارم .
و البته تصور کردم که به دنبال راه ساده و دم دستی برای انجام این کار میگردند
در صورتی که رویداد تایمر هم مورد استفاده باشه به نظرم داخل همون رویداد با کمی دقت بشه کد ساده والبته منعطف نوشت تا هر وقت که پیام جدید داده شد ریفرش اتفاق بیوفته و دائما فرم ریفرش نشه . ایرادش اینه که پروسس برنامه بالا میره

mosaArabi
شنبه 09 آبان 1394, 16:02 عصر
سلام
جناب بهرامی شما لطف دارید ما شاگردیم هنوز .
فرمایش شما درست است ساعت و تاریخ و مبحث یوزر و پسورد در فرم اولیه وجود دارد و لذا قبل از ورود کاربر اطلاعیه نمایش داده میشه . یه کارایی از قبیل فرش بعد از فرم استارت آپ و یا برگشت از فرم دسترسی به سایر فرمها را اجرا کردم ولی دنبال یه روش برای بهترین نتیجه هستم

ممنون

mosaArabi
شنبه 09 آبان 1394, 16:05 عصر
آقا رسول
ما کم سعادتیم قربان . بازهم از لطف شما که قدمی برای راهنمایی برمیدارید کمال تشکر را دارم

Rasool-GH
شنبه 09 آبان 1394, 16:37 عصر
سلام اختیار دارید . به دلیل مشغله کاری کمتر فرصت میکنم تاپیکها رو بخونم واسه همین با خیلی از دوستان با سابقه اشنا نیستم .
نفرمودید چرا از این روال استفاده نمیکنید و ایا روش خاصی برای انجام این کار مد نظر دارید ؟

جناب بهرامی هم که چندین بار خدمتشون بودم و به بنده لطف داشتن .
به نظر شما قرار گرفتن این کد در کنار کد نمایش ساعت مشکلی در روال برنامه از نظر سرعت یا پردازش ایجاد میکنه ؟

alirezabahrami
یک شنبه 10 آبان 1394, 01:27 صبح
به نظر شما قرار گرفتن این کد در کنار کد نمایش ساعت مشکلی در روال برنامه از نظر سرعت یا پردازش ایجاد میکنه ؟
سلام رسول جان !
حتماً مشکل ایجاد میکنه !
چرا ؟
چون عملکرد صحیح ساعت در صورتی خواهد بودکه Timer Interval تایمر را برابر 1000 که مساوی است با یک ثانیه ، باشد و تصور کن در این حالت که فرم هر یک ثانیه یکبار ریفرش میشود چه وضعی پیدا خواهد کرد .
و از طرفی آقای عربی می خواهند هر 10 دقیقه یکبار فرم مربوطه ریفرش شود . حالا حساب کن وقتی برای یک ثانیه عدد 1000 بعنوان Timer Interval باید وارد شود برای 10 دقیقه چه عددی باید در Timer Interval وارد شود .
حتماً شماهم عدد 600000 بدست آوردی !
حالا با این عدد تصور کن که ثانیه شمار ساعت هر 10 دقیقه یک ثانیه جلوخواهد رفت .
بنابراین به لحاظ وجود نمایشگر ساعت در فرم و بجهت اینکه درعملکرد صحیح آن خلل و وقفه ایجاد نشود لازم است حالت ریفرش فرم در بازه زمانی هر10 دقیقه یکبارمستقل از زمان تایمر صورت گیرد.
برای اینکار چند راه وجود دارد :
1-استفاده از کامپننت تایمر vb ( زمان این تایمر می تواند مستقل از زمان تایمر فرم اکسس باشد )
2- یک تکست باکس که مقدار پیشفرض آن صفر است درفرم درج شود و مقدار آن در رویداد تایم بصورت زیر تعیین میکنیم و کد ریفرش شدن فرم را در آن قرار میدهیم :


Private Sub Form_Timer()
Text1 = Text1 + (1 / 60)
If Text1 = 10 Then
Text1 = 0
Me.Refresh
End If
End Sub


البته بجای تکست باکس هم میتوانید از یک متغیر استفاده کنید .
و راه سوم بهره گیری از دو تابع زیر می باشد :


Public brefresh As Boolean
Public Sub eTimer(InterVal As Integer)
Dim Start
Start = Timer
Do While Timer < Start + InterVal
DoEvents
Loop
End Sub
Public Function FormRefresh(frName As String)
Dim e As Byte
Dim frm As Form
Set frm = Forms(frName)
e = 1
Do
eTimer 600
If brefresh = True Then
frm.Refresh
Else
Exit Do
End If
Loop While e = 1
End Function







تابع و فانکشن فوق را در قسمت عمومی یک ماژول عمومی وارد میکنیم .
سپس در رویداد تایمر فرم کد زیر :


brefresh = True
FormRefresh (Me.Name)


و در رویداد Form_Unload فرم عبارت brefresh = False را وارد می کنیم .
فراموش نشود در حالت های 2 و 3 برای Timer Interval عدد 1000 در نظر گرفته شود .

درپایان پیشنهاد میشود بجهت سادگی از راه دوم استفاده نمائید .
یا علی

mosaArabi
یک شنبه 10 آبان 1394, 07:27 صبح
جناب بهرامی ممنون از توضیحات جامع شما و ارائه کدها .

amir91
یک شنبه 10 آبان 1394, 09:59 صبح
سلام میتوند از تابع minute دقیقه زمان جاری را بدست آورده و از تابع right و دستور if بنویسید اگر یک رقم سمت راست دقیقه برای صفر شد فرم رفرش شود.

alirezabahrami
یک شنبه 10 آبان 1394, 12:02 عصر
سلام میتوند از تابع minute دقیقه زمان جاری را بدست آورده و از تابع right و دستور if بنویسید اگر یک رقم سمت راست دقیقه برای صفر شد فرم رفرش شود.

بله ، جناب amir91 عزیز هم اشاره درستی نموده اند . البته منظور ایشان همان تابع ()time با فرمت Short Time میباشد.
یا علی

Rasool-GH
یک شنبه 10 آبان 1394, 21:41 عصر
سلام جناب بهرامی . حقیقت بنده کدی مورد نظرم بود که با فرز همون iNTERVAL 1000 که در عملکرد ساعت مشکلی به وجود نیاره یک متغییر عمومی تعریف کنیم و با هر بار اجرای رویداد تایمر مقدار متغیر رو 1 واحد افزایش بدیم و یک شرط بزاریم که هر وقط متغیر به مثلا 6000 رسید فرم رو ریفرش کنه و متغیر رو 0 کنه
بابت کد هم ممنون

alirezabahrami
یک شنبه 10 آبان 1394, 22:42 عصر
سلام جناب بهرامی . حقیقت بنده کدی مورد نظرم بود که با فرز همون iNTERVAL 1000 که در عملکرد ساعت مشکلی به وجود نیاره یک متغییر عمومی تعریف کنیم و با هر بار اجرای رویداد تایمر مقدار متغیر رو 1 واحد افزایش بدیم و یک شرط بزاریم که هر وقط متغیر به مثلا 6000 رسید فرم رو ریفرش کنه و متغیر رو 0 کنه
بابت کد هم ممنون

برای اینکار کافیست در کدی که درپست 12 بعنوان راهکاردوم ارائه شده بجای 1/60 عدد 1 را وارد نمائید و در قسمت شرط آن بجای عدد 10 عدد 6000 را جایگزین نمائید .
همانطور که عرض شد بجای تکست باکس هم میتوانید از یک متغییر استفاده نمائید .
یاعلی

Rasool-GH
یک شنبه 10 آبان 1394, 23:35 عصر
سلام میتوند از تابع minute دقیقه زمان جاری را بدست آورده و از تابع right و دستور if بنویسید اگر یک رقم سمت راست دقیقه برای صفر شد فرم رفرش شود.

سلام .
جناب بهرامی به نظرم این راه سبک تره و پروسس کمتری هم به خودش اختصاص میده . درسته ؟