PDA

View Full Version : سوال: چطور می توان یک کلید با ناحیه غیر مستطیلی حساس به کلیک ساخت



hassan_kahrizy
سه شنبه 26 آبان 1388, 09:58 صبح
بسمه تعالی
با سلام
احتمالا موضوع سوال یک مقدار گنگ باشه یک مقدار بیشتر توضیح می دهم
اگر تو برنامه هایی مثل فلش کار کرده باشید در آن جا برای شی کلید می توان یک ناحیه تعیین کرد که اگر موس رو یآن ناحیه برود بصورت دست در می اید و در آنجا اگر کلیک شود event کلیک آن فعال می شود و.. در سی شارپ ما نقاط حساسمون مستطیلی و متناسب با اندازه کلید است .
حالا من یک عکس png که برخی ناحیه های آن نامرئی یا transparent است حالا می خواهم فقط آن نواحی فعال باشد .
راهی که به ذهنم رسید استفاده از picturebox و سپس موقعی که رویدادی از موس فعال می شه مثل enter و... اگر در ناحیه transparent است واکنش نشان ندهد حالا:
1-چطور می شه ناحیه ای رو در pictureBox پیدا کرد که اون ناحیه transparent است
2-آیا راه دیگری هم سراغ دارید
با تشکر

hassan_kahrizy
چهارشنبه 27 آبان 1388, 14:07 عصر
بسمه تتعالی
با سلام
کسی نمی دونه؟!!!

ennovation
چهارشنبه 27 آبان 1388, 17:14 عصر
سلام
راه حل پیشنهادی من در فایل ضمیمه رو نگاه کن

موفق باشی

hassan_kahrizy
چهارشنبه 27 آبان 1388, 20:56 عصر
بسمه تعالی
با سلام
خیلی خوب بود
می شه دربارش توضیح بدهید ممنون می شم

ennovation
چهارشنبه 27 آبان 1388, 21:52 عصر
سلام
کار زیادی نکردم
اول اون قسمتهایی که میخواستم رو با یک برنامه گرافیکی ترانسپارنت کردم
بعدش هم یک picturebox توی فرم گذاشتم و البته کار مهم اینه که خاصیت Backcolor این
picturebox را هم ترانسپارنت کردم .
بعدش هم با MouseMove چک میکنم که چه موقع رنگ ترانسپارنت میشه و اینجوری میفهمم که الان موس روی اون قسمتها است . حالا میتونم هر کاری رو که بخوام انجام بدم
یک متنی رو نشون بدم یا رنگ اونو عوض کنم یا یک ایونتی رو صدا بزنم .
راه دیگه هم اینه که به جای بازی با رنگها و ترانسپارنت کردن اونا بیایی و موقعیت موس را بخونی و خودت هم بدونی که مثلا در x=20 , y=30 همون نقطه ای هست که میخوای کاری بشه .
اونوقت میتونی ایونت MouseMove رو اینطوری عوض کنی


privatevoid pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.X == 20 && e.Y == 30)
{
// کارای که دوست داری انجام بدی
}
}