ورود

View Full Version : یکی بودن مقیاس دو ابزار که روی هم قرار دارند.



فاطمه وطن دوست
پنج شنبه 17 مرداد 1387, 13:15 عصر
سلام

براي اينکه بخوايم براي يوزر کنترل اسکيل بزاريم چطوري بايد عمل کرد ؟

وقتي تويه پيکچر باکس ( که بصورت ناحیه ی ترسیمی ) تبدیلش کردیم ( از طریق تعیین اسکیل ) یه سری ترسیمات انجام میدیم و بعد با زدن یه دکمه ( ADD LINE) بتونیم یه خط در زمان اجرا داخل پیکچر باکس اضافه کنیم.

نکته : خط ما همون یوزر کنترل است . که به این دلیل برای خطمون اومدیم یوزر کنترل طراحی کردیم که کاربر بتونه در زمان اجرا به صورت دستی خط اضافه کنه .
حالا چرا دستی ؟ چون با بزرگتر شدن ترسیمات کاربر برای دادن مختصات سردرگم میشه .
برای راحتی کاربر از یوزر کنترل خط استفاده شده است .

من با اضافه کردن خط و ترسیم خطوط هیچ مشکلی ندارم . تنها مشکلم در مورد زوم کردن خطوط ترسیمی ( توسط برنامه ، با دادن مقادیر ایکس و وای ) و ترسیم خطوط ( اضافه کردن یوزر کنترل خط ) توسط کاربر در زمان اجرا است .


تنها مشکل اینه که وقتی یوزر کنترل ( خط ) رو کاربر به محیط ترسیم اضافه میکنه و ان را رو روی یکی از خطوطی (ترسیم شده توسط کاربر ) که قبلا با دادنه ایکس و وای اونو ترسیم کردیم قرار میده . وقتی ایکس ها رو مقایسه میکنیم میبینیم که ایکس خطوطی که با دادن ایکس و وای ترسیم کردیم با ایکس یوزر کنترلی که روی خطوط گذاشتیم یکی نیست .

این هم دلیلش به خاطر اینه که پیکچر باکس دارای اسکیل هست در صورتیکه یوزر کنترل دارای اسکیل نیست .

من میخوام با زدن دکمه ی زوم ( بزرگ نمائی ) هم خطوط ترسیمی و هم یوزر کنترل بزرگتر بشن مثلا ایکس و وایشون خطوط ترسیمی توسط برنامه + 2 بشه ( 2 مقدار بزرگ نمائی هست ) . و x1,y1,x2,y2 یوزر کنترل + 2 بشن.


حالا مشکل چیه :

اینه که وقتی بزرگ نمائی انجام میشه ، خطوط ترسیمی توسط برنامه مقادیر ایکس و وایشون + 2 بشه و
X1,y1)) و (x2,y2) خطی که ماله یوزر کنترل هست + 2 بشن.

ولی بعد از اعمال بزرگ نمائی دیگه دقیقا روی هم قرار نگرفتن.

نکته : قبل از بزرگ نمائی دقیقا روی هم قرار دارن

حالا برای اینکه مشکل رو بهتر بگم یه مثال میزنم :

فرض کنید دو تا خط کش داریم الف و ب و هر رو 10 سانتی ان.

خط کش الف : هر 1 سانت برابر 5 میلی
خط کش ب : هر 1 سانت برابر 3 میلی


حالا اومدیم یوزرکنترل رو با خط کش الف ساختیم .
و پیکچر باکس رو با خط کش ب اندازشو تعیین کردیم.

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

X1,y1,x2,y2 (یوزر کنترل) + 1 واحد = ایکس و وای های یوزر کنترل به اندازه 5 تغییر میکنه ( زیاد میشه )

و

وقتی میگیم ترسیمات ( که توسط برنامه با دادن ایکس و وای ) ترسیم شدن + 1 واحد بشن
ایکس و وای به اندازه ی 3 میلی تغییر میکنن

در کل میخوام بگم واحد های یوزر کنترل و پیکچر باکس یکی باشه تا وقتی روشون عمل زوم انجام میشه به اندازه ی یه واحد مشخص ایکس و وایشون تغییر کنه .

من فقط میخوام این دو خط ابی حل بشه با دادن اسکیل واسه یوزر کنترل.

شاید خیلی ساده به نظر بیاد ، ولی من راه های مختلفی رو تست کردم و الآن اومدم تاپیک ایجاد کردم و مزاحم دوستان شدم ولی خوشحال میشم دوستان با نظرات کاملا حرفه ای
منو راهنمائی کنند . http://www.postsmile.com/img/emotions/228.gif

Mbt925
پنج شنبه 17 مرداد 1387, 14:03 عصر
کار با Scale مشکلی نداره. شاید ابزارتون مشکلی داره.
از اول مرحله به مرحله بسازیدش.

فاطمه وطن دوست
جمعه 18 مرداد 1387, 15:10 عصر
کار با Scale مشکلی نداره. شاید ابزارتون مشکلی داره.
از اول مرحله به مرحله بسازیدش.

سلام
یه سوال دیگه چرا وقتی تو رویداد



Private Sub UserControl_InitProperties()
UserControl.Scale (-100, 100)-(100, -100)


این خط نوشته میشه اصلا جواب نمیده ؟ برای یوزر کنترل اسکیل نمیشه گذاشت؟


ولی وقتی تو رویداد Resize دقیقا همین خطو مینویسی درست اعمال میشه ؟




Private Sub UserControl_Resize()
UserControl.Scale (-100, 100)-(100, -100)
End Sub


ولی با یه مشکل :متفکر:


http://forum.iranled.com/images/smilies2/angry.gif دیگه نمیتونیم خط توی یوزر کنترل رو تغییر اندازه بدیم ؟ http://forum.iranled.com/images/smilies2/shy.gif http://www.postsmile.com/img/emotions/84.gif

Mbt925
جمعه 18 مرداد 1387, 15:24 عصر
دستور اول هم کار می کنه ولی
این دستور فقط یه بار اجرا میشه، اون وقتی که کنترل روی فرم قرار داده میشه.

وقتی از زمان طراحی به زمان اجرا می ریم همه ی تنظیمات زمان طراحی از بین میرن.

فاطمه وطن دوست
جمعه 18 مرداد 1387, 15:43 عصر
دستور اول هم کار می کنه ولی
این دستور فقط یه بار اجرا میشه، اون وقتی که کنترل روی فرم قرار داده میشه.

وقتی از زمان طراحی به زمان اجرا می ریم همه ی تنظیمات زمان طراحی از بین میرن.

باید در ریجیستری چیزی ثبت بشه ؟

------------------------------------------------------------------------------------------------

و دلیل قسمت دوم سوال چیه ؟

مگه چی میشه که دیگه نمیتونیم خط رو تغییر اندازه بدیم ؟ (فقط داریم یه اسکیل میزاریم )
حالا تو رویداد ریسایز نه تو یه رویداد دیگه مثلا ، GotFocus ، این یه خط کدو بنویسیم.
چون من اومدم تو تمام رویدادای یوزر کنترل این اسکیل رو اضافه کردم . بازم جواب نداد .

حالا چرا شما قطره چکانی جواب میدین البته ببخشیدا.

Mbt925
جمعه 18 مرداد 1387, 16:11 عصر
نه، باید کد رو در جایی قرار بدین که زمان اجرا هم رخ بده، مثل رویداد Resize یا ReadProperties


چون شما قطره چکانی سوال می پرسید!!!
وقتی می گین نمیشه حرکتش داد و خود یوزر کنترل رو قرار نمیدین، من چطوری می تونم نظری بدم؟

فاطمه وطن دوست
جمعه 18 مرداد 1387, 16:59 عصر
نه، باید کد رو در جایی قرار بدین که زمان اجرا هم رخ بده، مثل رویداد Resize یا ReadProperties


چون شما قطره چکانی سوال می پرسید!!!
وقتی می گین نمیشه حرکتش داد و خود یوزر کنترل رو قرار نمیدین، من چطوری می تونم نظری بدم؟


بله. ReadProperties در مورد این باید بگم ، تلاش کردم تا بتونم این قسمت و بنویسم ولی نشد. همش ارورو میداد. گفتم حتما نمیشه دیگه . :اشتباه:

بله. همینطوره . معذرت میخوام ، شما به بزرگواری خودتون ببخشید. :لبخندساده:
من از شما طلبی ندارم / :لبخندساده:

بله ، کاملا حق با شماست.
http://www.uplod.ir/download.php?file=737579


بازم معذرت میخوام قصد جسارت نداشتم. شما به بزرگواری خودتون ببخشین.
:لبخند:

Mbt925
شنبه 19 مرداد 1387, 00:43 صبح
نظرتون در مورد ترفندی که به کار بردم چیه؟ ( به رویدادهای MouseDown و MouseUp دو PictureBox ای که برای حرکت استفاده میشن توجه کنید!)