PDA

View Full Version : رسم شکل دایره بجای مربع فرم



spicirmkh
سه شنبه 20 مرداد 1383, 13:46 عصر
سلام

چطور می توانم بجای شکل مربع یا مستطیل فرم شکل دایره داشته باشم و کلید روی فرم کار کند مثل برنامه کتاب اول

با تشکر

Ali_Hashemi
سه شنبه 20 مرداد 1383, 14:18 عصر
سوال شما چندان واضح نیست
اما اگر منظورتان خود فرم است برای اینکه به شکل دایره نمایش داده شود
(یا بیضی و چند ظلعی و ..) باید از RGN ها استفاده کنی
مثلا برای دایره ای با قطر 180 :

[code]
در قسمت Public فرم :
RGN:HRGN

در رویداد ONCreate فرم :
(RGN:=CreateellipticRGN(0,0,90,90

(Setwindowrgn(handle,rgn,true



در رویداد OnClose فرم :
(DeleteObject(RGN




در ضمن دستورات دیگر ساخت RGN هم هستند :

Createroundrectrgn

createrectrgn
createpolygonrgn


در ضمن BorderStyle فرم رو هم بذار bsnone

spicirmkh
سه شنبه 20 مرداد 1383, 16:15 عصر
سلام

این RGN کدام کامپیونت است و کجا می توانم دایره رسم کنم آیا از Image استفاده کنم و تصویر دایره از کجا و چه جوری روی فرم بگذارم

با تشکر

spicirmkh
سه شنبه 20 مرداد 1383, 16:54 عصر
سلام

این دستورات توی Help دلفی نیست از کجا می توانم اطلاعات بیشتری پیدا کنم

Ali_Hashemi
سه شنبه 20 مرداد 1383, 22:26 عصر
این RGN یک کامپوننت نیست !
RGN مخفف Region به معنای ناحیه است.
دستورات بالا را اگر بنویسی جواب میده نیاز به اضافه کردن هیچ یونیتی
به قسمت Uses هم نداره

با دستور Setwindowrgn فرم شما برش می خورد .
و میتوانید یک Image هم روی فرم داشته باشید (ویا هر شیئ دیگر ) وربطی به این تابع ندارد

برای مشاهده Help هم برو تو منوی Help دلفی و روی Windows SDK کلیک کن



برای اینکه به راحتی نتیجه برنامه رو ببینی خط زیر رو تو On create فرم کپی کن
خودت متوجه میشی چجوری کار میکنه :



SetWindowRgn(Handle,CreateEllipticRgn(0,0,270,140) ,True);

_alish_
چهارشنبه 21 مرداد 1383, 10:01 صبح
آیا می دانید کامپوننتهایی که تصویری به همراه چند Color می گیرند و فرم را به شکل آن تصویر یا ماسک در می آورند به چه شکل و چه دستوراتی می توان آنها را ساخت. :?:

Ali_Hashemi
چهارشنبه 21 مرداد 1383, 22:22 عصر
اگر بخواهی یه همچین چیزی بنویسی دو راه داری :
1 - باید بتوانی مختصات تمام نقاط دور تا دور محیط شکل مورد نظر رو بدست بیاری
سپس اونهارو در یک ارایه بریزی وبعدش هم اون آرایه رو به عنوان پارامتر بدی به
تابع CreatePolygonrgn
تا rgn شما ساخته شود دقیقا مانند تصویر مورد نظر

2- میتوانی تمام پیکسلهای موجود در تصویر را اسکن کنی هر نقطه ای که رنگ مخالف
رنگ زمینه را داشت انرا با دستور زیر با یک RGN کلی And کنی
سپس در اخر کار همان Rgn کلی همان چیزی است که دنبالش بودید.


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

ولی روش دوم خیلی بهتره

اینهم تابعی جهت اجتماع دو rgn :




Combinergn(Rgn1,Rgn2,Rgn3,RGN_COPY);

اجتماع Rgn1 و Rgn2 در Rgn3 قرار میگیرد.



راستی اگر برای روش اول یه برنامه ای چیزی نوشتی یه خبری هم به ما بدی خوشحال میشیم. :wink: :wink: