PDA

View Full Version : ساخت فرم با حاشیه های شفاف



amirtofighi
جمعه 30 مهر 1389, 22:05 عصر
با سلام
چطور میشه کاری کرد گوشه های فرم شفاف بشه و عکسی که خودمون طراحی کردیم رو به جای فرم اصلی نشون بدیم
مثل عکس پایینی
مرسی

mbshareat
شنبه 01 آبان 1389, 11:11 صبح
با سلام :قلب:
ساده ترین راهش استفاده از فرم بدون لبه و تنظیم پراپرتی TransparentColor فرم برابر True و تعیین رنگی که در فرم و کامپوننتهای داخلش به کار نرفته (مثل رنگ سیاه در فرم شما) برای TransparentColorValue است.:لبخندساده:
(از همین رنگ فرانما برای رنگ اطراف تصویر فرم هم در تصویر فرم استفاده کنید.برای اینکار با برنامه Paint ویندوز رنگ مثلا سیاه رو اطراف تصویر فرم بریزید.(فتوشاپ به اندازه Paint به رنگ حساس نیست))
بعد هم طول و عرض فرم را برابر طول وعرض تصویر قرار می دهیم و هنگام اجرای برنامه هم رویدادهای ماوس رو بررسی می کنین که اگه کاربر در قسمت بالای تصویر ماوس رو فشار داد و حرکت داد جای فرم تغییر بکنه.برای بدست آوردن کد هم به این تاپیک (http://barnamenevis.org/forum/showthread.php?t=250775) بروید.
اما می تونین ناحیه نمایش RGN هم تعریف کنین و چند ناحیه رو ترکیب کنین و برای فرم ناحیه مشخص کنین.با دستوراتی مثل:گیج::
CreateRectRGn
CreateElipticRGN
CombineRgn
SelectObject
DeleteObject
الان در محل کارم هستم.اگر بخواین کد نمونه هم می تونم براتون بذارم!(اگه فایل کمکی توابع API ویندوز رو داشته باشین توضیح داده:بامزه:)

amirtofighi
شنبه 01 آبان 1389, 12:47 عصر
مرسی از راهنماییتون
اگه لطف کنین اون کد نمونه رو هم بذارین خیلی ممنون میشم

mbshareat
شنبه 01 آبان 1389, 13:12 عصر
راه اول هم آسونتره هم اینکه راه دوم هنگام جابجایی فرم در سیستمهای کندتر در ناحیه لبه فرم اثری باقی می ذاره که چندان جالب نیست و به نظرم امتحان کردم مزیت سرعت محسوس هم نداشت ولی بد نیست روششو بدونین.:متفکر:
انشاء الله وقتی به خونه رسیدم کد رو براتون می ذارم!:بامزه:

mbshareat
شنبه 01 آبان 1389, 14:11 عصر
با سلام و عرض ادب:قلب:
اول می خوام یه اعتراف بکنم. به برنامم رجوع کردم دیدم ناهنجاری کنار لبه به خاطر استفاده همزمان از تعیین ناحیه و رنگ Transparent بوجود اومده!
این نمونه کد یه ناحیه مستطیلی شکل که دو لبه بالایی اون گرد هستند برای فرمی با نام ScrollForm تعیین می کنه(با طول فرم 800 و عرض 625):
Procedure TScrollForm.SEtFormRgn();
Var
Rgn1,Rgn2,Rgn3,Rgn4,FormRgn:HRgn;
begin
Width:=FormPic.Width;
Height:=FormPic.Height;
Rgn1:=CreateRectRgn(20,0,772,18);
Rgn2:=CreateRectRgn(0,17,792,583);
Rgn3:=CreateEllipticRgn(0,0,46,38);
Rgn4:=CreateEllipticRgn(747,0,793,38);
FormRgn:=CreateEllipticRgn(0,0,0,0);
CombineRgn(FormRgn,FormRgn,Rgn1,RGN_OR);
CombineRgn(FormRgn,FormRgn,Rgn2,RGN_OR);
CombineRgn(FormRgn,FormRgn,Rgn3,RGN_OR);
CombineRgn(FormRgn,FormRgn,Rgn4,RGN_OR);
SelectClipRgn(Canvas.Handle,FormRgn);
SetWindowRgn(ScrollForm.Handle,FormRgn,true);
DeleteObject(Rgn1);
DeleteObject(Rgn2);
DeleteObject(Rgn3);
DeleteObject(Rgn4);
DeleteObject(FormRgn);
End;

البته شما می تونین به راحتی از دوتا CreateRoundRectRgn استفاده کنین!
البته فراموش نکنین کلیک روی دکمه Close رو در رویداد MouseDown با این تابع تست کنین:
Function InRect(X,Y:Integer;R:TRect):Boolean;
Begin
If (X>R.Left) And (X<R.Right) and (Y>R.Top) And (Y<R.Bottom) then
InRect:=True
Else
InRect:=False;
End;

امیدوارم همین اندازه کافی باشه.البته این کد فقط نمونه است و برای فرم شما تغییراتی لازمه!:لبخند:
----
ای نسخه نامه الهی که تویی *** وی آیینه جمال شاهی که تویی
بیرون ز تو نیست آنچه در عالم هست *** از خود بطلب هر آنچه خواهی که تویی

amirtofighi
یک شنبه 02 آبان 1389, 12:21 عصر
من تونستم فرم رو شفاف کنم
حالا یه سوال دیگه پیش اومده:
چطور باید کاری کنم که عکسی که تو Timage میذارم رو هم با حاشیه شفاف نشون بده مثل همون تصویری که تو کامنت اول گذاشتم؟
آخه وقتی در Timage خصوصیت شفاف رو فعال میکنیم قسمت شفاف عکس رو به رنگ فرم نشون میده و در اصل اونو شفاف نمیکنه بلکه فقط رنگشو عوض میکنه
باید چیکار کنم؟

Felony
سه شنبه 04 آبان 1389, 23:34 عصر
من تونستم فرم رو شفاف کنم
حالا یه سوال دیگه پیش اومده:
چطور باید کاری کنم که عکسی که تو Timage میذارم رو هم با حاشیه شفاف نشون بده مثل همون تصویری که تو کامنت اول گذاشتم؟
آخه وقتی در Timage خصوصیت شفاف رو فعال میکنیم قسمت شفاف عکس رو به رنگ فرم نشون میده و در اصل اونو شفاف نمیکنه بلکه فقط رنگشو عوض میکنه
باید چیکار کنم؟

خصوصیت AlphaBlend فرم برنامتون رو True کنید و بسته به نیازتون به AlphaBlendValue مقداری بین 0 تا 255 بدید .

amirtofighi
چهارشنبه 05 آبان 1389, 06:08 صبح
من اون کاری که شما گفتید رو انجام دادم ولی اون کل فرم رو شفاف میکنه
اگه میشه به این عکس نگاه کنید شاید منظورم رو بهتر متوجه شدید
من میخوام اون قسمت سیاه رو از عکس بردارم و به خاطر این سیاه رنگه که رنگ فرم من مشکی هستش
با تشکر

mbshareat
چهارشنبه 05 آبان 1389, 10:58 صبح
با سلام و عرض ادب و ارادت
شاید درست توضیح نداد. هم برای تصویر و هم برای فرم از Transparent استفاده کنین.:متفکر:
منتهی تنها بربای فرم لازمه رنگ شفاف رو تعیین کنین ولی در مورد TImage خودش رنگ گوشه تصویر رو رنگ فرانما میگیره(فکر کنم در مورد Image حاوی تصویر BMP رنگ گوشه چپ پایین)
موفق باشین!

amirtofighi
چهارشنبه 05 آبان 1389, 12:20 عصر
از همه ممنونم حل شد
فقط خواستم برنامه رو بذارم چون فکر کنم به درد بقیه دوستان هم بخوره
یه قابلیت دبگه هم که توش اضافه شده اینه که شما هر جای فرم رو بگیرید میتونین مکان فرم رو تغییر بدبد که تو این حالت خیلی به درد میخوره
یا علی

moein+
چهارشنبه 05 آبان 1389, 22:00 عصر
اِ ، این که مثل اون عکسی که گذاشتید وسطش شفاف نیست؟ دکمه هایش چرا نقاشیست؟

amirtofighi
پنج شنبه 06 آبان 1389, 10:51 صبح
اون عکسی که گذاشتم(عکس اولی) با فتو شاپ درست شده
نمیدونم میشه وسطش رو بدون اینکه جاهای دیگش شفاف بشه شفاف کرد یا نه؟
با AlphaBlend میشه کل فرم رو شفاف کرد به مقدار دلخواه ولی همونطور که گفتم نمیدونم چطور میشه داخل یه عکسو هم شفاف کرد

mbshareat
پنج شنبه 06 آبان 1389, 18:26 عصر
با سلام:قلب:
من هنوز برنامه رو ندیدم.اما با توضیحات پست دوم باید همه مشکل حل باشه.
یه تصویر با رنگ مشکی برای دور تصویر (بدون احتیاج به Transparent) داشته باشید و برای رنگ شفاف فرم سیاه رو انتخاب کنین و به فرم بگین رنگ فرانما هم دارین(TranspentColor:=true)
هرجا تو فرم چه گوشه چه وسط فرانما میشه و زیرش رو نشون می ده.
روش ترکیب دو ناحیه مستطیل لبه گرد هم ممکنه.
البته اینا تکرار مکررات بود.امیدوارم موفق باشین!:لبخندساده:

amirtofighi
پنج شنبه 06 آبان 1389, 23:16 عصر
درسته ولی اگه به تصویر اول دقت کرده باشید وسط تصویر مثل حاشیه به طور کامل شفاف نیست و مثلا 50% شفافیت داره
من کارم با همون حاشیه شفاف حل شد ولی یکی از دوستان تو کامنت بالا پرسیده بود
با AlphaBlend میشه درصد شفافیت رو تعیین کرد ولی اونجور همه چی به اون درصد شفاف میشه!

alinikaein
جمعه 07 آبان 1389, 14:02 عصر
سلام دوست عزيز؛

فكر مي‌كنم شما به دنبال كامپوننت‌هايي كه فرم را بر اساس يك تصوير ماسك مي‌كنند، بگرديد، بهتر به نتيجه مي‌رسيد.
چيزي كه من فهميدم اينه كه شما مي‌خوايد فرم‌تون بر اساس يك تصوير كه دو منطقه‌ي تيره و روشن داره، تغيير شكل بده. كامپوننت‌هاي مختلف و برنامه‌هاي مختلفي در اين زمينه هست، مي‌تونيد به دنبال عبارتي كه گفتم، بگرديد، شايد زودتر به نتيجه برسيد.


يا علي... موفق باشيد...

Felony
جمعه 07 آبان 1389, 14:15 عصر
اگر خیلی براتون حیاتیه در مورد توابع +GDI یا Direct2D تحقیق کنید .