PDA

View Full Version : ایجاد متن داخل اشکال هندسی



Masoomeh.H
دوشنبه 30 آذر 1394, 09:44 صبح
سلام
من دارم روی یه برنامه ای کار می کنم که بوسیله یه ریچباکس یه متن رو داخل یه مربع که داخل پیکچرباکس ساخته شده میندازه.
فقط مشکل این برنامه اینه که با تغییر سایز مربع، باید اون قسمتی که از متن که از مربع میره بیرون حذف بشه( پاک نشه. فقط از دید کاربر حذف بشه).ولی این اتفاق نمی افته.
لطفا راهنمایی کنید

Mahmoud Zaad
دوشنبه 30 آذر 1394, 10:39 صبح
سلام
می تونید متن ریچ تکست باکس رو خط به خط بخونید و با MeasureString اندازه خط رو در بیارید اگه کمتر از عرض مربع بود که چاپ بشه ولی اگر بیشتر بود متن اون خط رو در اندازه مورد نظر چاپ کنید. برای اینکار هم میشه اندازه یه کاراکتر با فونت مورد نظر رو محاسبه کرد و اندیس قسمت مورد نیاز رو به دست آورد ... مثلاً اگر عرض مربع 400 باشه و عرض یه کاراکتر با فونت شما 20 باشه خب ما فقط 20 کاراکتر رو می تونیم نمایش بدیم حالا با متد Substring میشه متن مورد نیاز در خط رو به دست آورد.

Masoomeh.H
دوشنبه 30 آذر 1394, 10:48 صبح
خوب برای من مهم نیست که کاربر چقدر متن می خواد وارد کنه. فقط می خوام اگه متن از اندازه مربع من بیشتر بود بقیش از مربع بره بیرون ولی نمایش داده نشه.
ببینید کار برنامه شبیه تابلو روانه. کاربر میاد روی پیکچرباکس یه محدوده برای نمایش متنش انتخاب می کنه و داخل اون متنش رو می نویسه بعدش با تایمر متن رو از داخل محدوده ای که تعیین کرده حرکت می دیم

Mahmoud Zaad
دوشنبه 30 آذر 1394, 10:53 صبح
آها! اینجا با Location متن باید کار کنید. یعنی توی متد DrawString یه نقطه یا یه مستطیل می خواد حالا شما مثلاً x این نقطه رو ++ می کنید.

Masoomeh.H
دوشنبه 30 آذر 1394, 10:58 صبح
میشه بیشتر توضیح بدید؟؟؟
ببینید ناباید این محدوده که کاربر تعیین می کنه تغییر بکنه.

Mahmoud Zaad
دوشنبه 30 آذر 1394, 11:31 صبح
خب با توجه به جهت حرکت متن بقیه صفحه رو با رنگ پس زمینه پاک کنید. به شکل زیر نگاه کنید اگه محدوده کاربر به شکل زیر باشه و جهت حرکت هم از چپ به راست باشه فقط یه مشکل وجود داره که متن از مستطیل انتخابی می زنه بیرون خب بعد از رسم متن با DrawString میایم یه مستطیل دیگه با رنگ پس زمینه پر می کنیم و ادامه متن رو پاک می کنیم:

g.FillRectangle(new SolidBrush(this.BackColor), 101, 100, 100, 50);


137565

Masoomeh.H
دوشنبه 30 آذر 1394, 11:54 صبح
خوب اگه بعد از ساخت این مستطیل به رنگ سیاه روی متن ، کاربر اومد سایز مربع محدوده رو عوض کرد چی کار باید کرد؟؟؟

Mahmoud Zaad
دوشنبه 30 آذر 1394, 12:08 عصر
مشکلی پیش نمیاد مجدداً باید اون محیطی که دارید روش رسم می کنید رو Invalidate کنید. شما وقتی که کاربر مربع محدوده رو تغییر میده باید در رویداد MouseUp گوشه بالا و سمت راست مربع رو به دست بیارید(جمع x نقطه شروع مربع بعلاوه اندازه ضلع مربع) و مجدداً اون مستطیل پاک کننده رو بر اساس نقطه جدید به دست بیارید و رسم کنید. اندازه طول مستطیل پاک کننده هم باید تا عرض (Width)محیط رسم تون (پیکچر باکس)باشه.