View Full Version : شکل دادن به فرم (برش، گرد کردن گوشه ها ...) بدون استفاده از تصویر png
mahdy.asia
دوشنبه 15 دی 1393, 14:39 عصر
من می خواهم بدون استفاده از تصویر png گوشه های فرم را گرد کنم یا قسمتی از آن را برش بزنم (با کد نویسی و دادن مختصات قسمت برش خورده)
یوسف زالی
دوشنبه 15 دی 1393, 15:37 عصر
CreateRegion و توابع API اینچنینی
hadisalahi2
دوشنبه 15 دی 1393, 16:28 عصر
کامپوننت AdvShaper از مجموعه TMS دقیقا همین کاری که شما میخواید رو انجام میده
mahdy.asia
چهارشنبه 17 دی 1393, 09:49 صبح
کامپوننت AdvShaper از مجموعه TMS دقیقا همین کاری که شما میخواید رو انجام میده اگر خواسته باشم از کامپوننت و تصویر استفاده کنم کامپوننت Image هم این کار رو انجام می ده می خوام از توابع ویندوز و ... استفاده کنم
hadisalahi2
چهارشنبه 17 دی 1393, 20:15 عصر
کامپوننت Image هم این کار رو انجام می ده
فکر نمیکنم همچین قابلیتی داشته باشه
پس به قول داش حمزه دوباره باید چرخ رو اختراع کنی
همون کامپوننت رو برو کدهاش رو ببین و از روی اون چیزی که میخوای رو شبیه سازی کن
omegao
جمعه 19 دی 1393, 16:47 عصر
سلام
HRGN مقدار هندل ناحيه گرافيكيه، اول يك متغيير از اين نوع تعريف كنيد، سپس براي ساختن اين ناحيه گرافيكي از توابع CreateRectRgn، CreateRoundRectRgn، CreateEllipticRgn،CreatePolyPolygonRgn كه به ترتيب مستطيل، مستطيل با گوشه ي گرد، دايره و چند ظلعي ايجاد مي كنند و همچين از تابع CombineRgn براي ادغام، اشتراك يا عدم اشتراك دو ناحيه گرافيكي استفاده كنيد. با تابع SetWindowRgn فرم را در اين ناحيه گرافيكي محدود ميكنيم.
مثال
دستور زير را در رويداد onCreate يك فرم خالي قراردهيد.
var a,b,c,d,e,f,g,h,z:HRGN;
begin
Color:=clRed;
BorderStyle:=bsNone;
Height:=384;
Width:=358;
a:=CreateEllipticRgn(0,0,200,200);
b:=CreateEllipticRgn(150,0,350,200);
d:=CreateEllipticRgn(-200,-150,350,350);
e:=CreateEllipticRgn(0,-150,550,350);
g:=CreateRectRgn(0,0,350,90);
c:=CreateRectRgn(0,0,0,0);
f:=CreateRectRgn(0,0,0,0);
h:=CreateRectRgn(0,0,0,0);
z:=CreateRectRgn(0,0,0,0);
CombineRgn(f,d,e,RGN_AND);
CombineRgn(h,f,g,RGN_DIFF);
CombineRgn(c,a,b,RGN_OR);
CombineRgn(z,h,c,RGN_OR);
DeleteObject(a);
DeleteObject(b);
DeleteObject(c);
DeleteObject(d);
DeleteObject(e);
DeleteObject(f);
DeleteObject(g);
DeleteObject(h);
SetWindowRgn(Handle,z,True);
البته براي كار با HRGN توابع ديگري هم هست از Help پيداش ميكني
omegao
جمعه 19 دی 1393, 17:13 عصر
براي استفاده از CreatePolygonRgn ميتونيد آرايه اي از نقاط استفاده كنيد
مثال
var E,P,C:HRGN;
Pol:array[0..6] of TPoint;
begin
Pol[0]:=Point(9,19);
Pol[1]:=Point(9,260);
Pol[2]:=Point(422,260);
Pol[3]:=Point(583,24);
Pol[4]:=Point(576,7);
Pol[5]:=Point(428,7);
Pol[6]:=Point(428,19);
E:=CreateEllipticRgn(395,296,599,100);
P:=CreatePolygonRgn(pol,7,1);
C:=CreateRectRgn(0,0,0,0);
CombineRgn(C,E,P,RGN_or);
SetWindowRgn(Handle,C,True);
نتيجه :
127413
mahdy.asia
دوشنبه 22 دی 1393, 08:47 صبح
با چه روشی می تونیم نقاط را برای برش یا ادقام و ... تعیین نماییم؟
omegao
پنج شنبه 02 بهمن 1393, 23:58 عصر
سلام
ميتونيد با استفاده از توابع GUI مجموعه از نقاط را از يك تصوير باز خواني و در يك آرايه از نقاط قرار بديد بعد به كمك CreatePolygonRgn اين كار را بكنيد
با كمك توابع GUI به تك تك پيكسلهاي يك تصوير ميتونيد دسترسي پيدا كنيد و مثلا نقاط محدود به يك رنگ خاص را در آرايه از نقاط ذخيره كنيد يك مثال آماده ميكنم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.