PDA

View Full Version : مشكل در تايمر



new_sra
جمعه 25 اردیبهشت 1388, 10:18 صبح
تو اين مشكل دارم
ممنون ميشم كمكم كنيد

به بيش از چند استاد هم نشون دادم ولي نفهميدن مشكل چيه

برنامه اي كه توش مشكل داشتم توي فرم 3 قسمت تايمرش هست

http://www.mediafire.com/download.php?t1mtmmgoxdj
3.84 KB

ممنون ميشم راهنماييم كنيد

M_P_1374
جمعه 25 اردیبهشت 1388, 11:17 صبح
خوب چهکاریو واستون انجام نمیده
توی کامپیوتر من همه چیز فرم 3 خوبه

new_sra
چهارشنبه 30 اردیبهشت 1388, 17:24 عصر
ببخشيد دير جواب مي دم

گرفتار بودم


اون قسمتي كه توش مشكل دارمو دوباره ميزارم


If Sh.Top = Sp1.Top And Sh.Left = Sp1.Left Then
Cmd2.Visible = True
End If
If Sh.Top = Sp3.Top And Sh.Left = Sp3.Left Then
Cmd2.Visible = True
End If
If Sh.Top = sp5.Top And Sh.Left = sp5.Left Then
Cmd2.Visible = True
End If
If Sh.Top = sp7.Top And Sh.Left = sp7.Left Then
Cmd2.Visible = True
End If



مشكل من اينجاست كه توي اجراي برنامه بعد از برخورد
sh با sp ها
هيچ اتفاقي نميفته
يعني cmd2 همچنانFalse ميمونه

xxxxx_xxxxx
چهارشنبه 30 اردیبهشت 1388, 21:16 عصر
به نظر شما چقدر احتمال داره كه Sh.Top = Sp.Top و Sh.Left = Sp.Left بشه؟
و آيا برخورد فقط زماني صورت ميگيره كه Left و Top اشياء باهم برابر بشن؟!

شما بايد موقعيت هر چهار ضلع شي رو داشته باشيد. ضلع پايين و راست به اين صورت بدست مياد:
down=top+height
right=left+width
حالا با يك جمع و تفريق نسبتاً ساده مي تونيد بفهميد كه در چه حالتي دو شي با هم تداخل دارند.

موفق باشيد/

new_sra
یک شنبه 03 خرداد 1388, 14:17 عصر
مرسي از راهنماييتون
اما فكر ميكنم برنامم بازم ايراد داشته باشه آخه هنوزCmd2.Visible = True نميشه
با همون روشي كه گفتيد
براي برخورد با هر sp
4 حالت نوشتم
مثلا براي sp1
اينجوري نوشتم:
چون همه مربعها اندازه هم اند همه يه جور برنامه دارند

If Sh.Top = Sp1.Top And Sh.Left = Sp1.Left Then
Cmd2.Visible = True
End If
If Sh.Top = Sp1.Top + 120 And Sh.Left = Sp1.Left Then
Cmd2.Visible = True
End If
If Sh.Top = Sp1.Top And Sh.Left = Sp1.Left + 120 Then
Cmd2.Visible = True
End If
If Sh.Top = Sp1.Top + 120 And Sh.Left = Sp1.Left + 120 Then
Cmd2.Visible = True
End If

ولي باز بعد از به هم خودنشون هيچ اتفاقي نيفتاد
فرم سه رو با برنامه اي كه عوضش كردم دوباره براتون فرستادم
نميدونم مشكل از كجاست
بد جوري گيجم كرده
راستي به نظرتون تايمر جاي درستي براي نوشتن برنامه هست؟
اول تو فرم لود نوشتمش اما ارور داد

xxxxx_xxxxx
یک شنبه 03 خرداد 1388, 17:09 عصر
دوست عزيز فرقي نمي كنه، شما داريد از علامت تساوي (=) استفاده مي كنيد. احتمال برابر شدن left و top ها خيلي كمه اون هم تو تايمر. بايد از علامت هاي =< و => استفاده كنيد. شما روي كاغذ شكلتون رو بكشيد و بعد با خودتون بگيد چه زماني تداخل بين اشياء وجود داره.
ببينيد من اينطوري نوشتم. براي sp1:


If (((sh.Left <= sp1.Left + sp1.Width) And (sh.Left >= sp1.Left)) And _
((sh.Top <= sp1.Top + sp1.Height) And (sh.Top >= sp1.Top))) Or _
_
(((sh.Left + sh.Width >= sp1.Left) And (sh.Left <= sp1.Left + sp1.Width)) And _
((sh.Top <= sp1.Top + sp1.Height) And (sh.Top + sh.Height >= sp1.Top))) Then

Cmd2.Visible = True
Else
Cmd2.Visible = False
End If
همونطور كه مي بينيد فقط چهار خط شرطمون هست.
سعي كردم براي خوانايي بيشتر پرانتزها و عملگرهاي منطقي رو رنگ كنم تا بهتر متوجه بشين. اين فقط براي sp1 هست. براي بقيه هم به همينصورت عمل كنيد.
دوخط اول، ورود sh از سمت بالا و چپ رو كنترل ميكنه. دو خط بعدي هم ورود sh از پايين و راست رو كنترل ميكنه.


بد جوري گيجم كرده
(منم همينطور:گیج:). اون چيزي كه بهش فكر مي كنيد رو اگر رو كاغذ پياده كنيد كمتر گيج ميشيد.


راستي به نظرتون تايمر جاي درستي براي نوشتن برنامه هست؟
اول تو فرم لود نوشتمش اما ارور داد
من چيزي در مورد برنامه تون و هدفتون نمي دونم كه بخوام در اين مورد نظر بدم. ولي در نهايت بايد اينو به طور متوالي چك كنيد. خب تايمر هم ميتونه جاي خوبي باشه.

موفق باشيد/