PDA

View Full Version : دکمه یا فرم شیشه ای



MaHyaR.DrAcOulA
چهارشنبه 17 شهریور 1389, 20:55 عصر
سلام به همه مهندسان کشور
امروز میخواستم دکمه و فرم برنامه ام رو شیشه ای کنم ولی به مشکل بر خوردم.
توی سایت هم گشتم ولی فرم شیشه ای و دکمه شیشه ای که شبیه به ویندوز 7 یا ویستا باشه پیدا نکردم.
ممنون میشم اگه راهنماییم کنین که چیکار کنم؟

Saman_12
چهارشنبه 17 شهریور 1389, 21:12 عصر
این برای فرم :

this.Opacity = 0.5;
درست یادم نیست اما فکر می کنم این برای شفاف کردن باتون هست(اگه اشتباه می کنم دوستان اصلاح کنند.) :

button1.BackColor = Color.FromArgb(127, button1.BackColor);

MaHyaR.DrAcOulA
چهارشنبه 17 شهریور 1389, 21:18 عصر
دوست عزیز این دستور کل شی ها رو محو میکنه
من میخواستم به صورت شیشه ای در بیاد

ali1234567890
چهارشنبه 17 شهریور 1389, 21:34 عصر
تو این تایپیک باتن ها وپنل های شیشه ای هست
http://www.barnamenevis.org/forum/showthread.php?t=195088

MaHyaR.DrAcOulA
چهارشنبه 17 شهریور 1389, 22:39 عصر
تو این تایپیک باتن ها وپنل های شیشه ای هست
http://www.barnamenevis.org/forum/showthread.php?t=195088

اون تایپیک رو نگاه کردم
ولی سرعت سیستم خیلی پایین میاد اونم هنگامی که نشان گره ماوس میره روی Button
نمیشه کاری کرد که سرعت سیستم پایین نیاد؟

ali1234567890
پنج شنبه 18 شهریور 1389, 00:03 صبح
تو سایت code project چند تا باتن گذاشته سرعتش هم قابل قبوله
http://www.codeproject.com/KB/buttons/VistaButton.aspx

Rejnev
پنج شنبه 18 شهریور 1389, 00:08 صبح
دکمه های ویستا و سون اصلا شیشه نیستند.
تعداد محدودی هم که ما میبینیم (مثل پنجره لوگین 7) با استفاده از wpf کار سختی نیست.
فرم رو نمیشه توی xp شیشه ای کرد. اگر هم بشه بازدهی کم خواهد شد.
توصیه میکنم دنبال اینجور کارها اون هم با WindowsApplication نباشید.
در عوض wpf گزینه خوبیه که البته اون هم نمیتونه از محدودیتهای سیستم عامل رد بشه(مثل شفاف کردن خود پنجره) چون ذاتا چنین چیزی توی xp وجود نداره.

میلاد قاضی پور
پنج شنبه 18 شهریور 1389, 01:38 صبح
من برای اینکار روش خودمو دارم و هرچند ترفند قابل قبولی نیست اما نتیجه کار یکی هست .
میتونید برای شیشه ای کردن فرم هنگام اجرا از موقعیت قرار گیری فرم یک اسکرین شات تهیه کنید و بندازید پس زمینه فرم و چون قبلا پیکچر باکسی به زمینه فرمتون اضافه کردید که حالت سایه و افکت یا درخشش رو در خودش داره با قررا گیری تصویر اسکرین شات در پس زمینه اینطور به نظر میرسه که فرمتون دارای درخشندگی و شفافیت هست . اگر حالا کنترلی روی فرم باشه تماما به وضوح نمایش داده میشه .
برای دریافت نمونه ایجاد شده به این تاپیک (http://www.barnamenevis.org/forum/showthread.php?t=240390) مراجعه کنید .

Saman_12
پنج شنبه 18 شهریور 1389, 03:10 صبح
می بخشین مثل این که من منظور تون رو بد متوجه شدم!:قهقهه:
حالا بگذریم این یک کلاس تا با اون بتونید هر کنترلی که بک گراند ایمیج داره رو شفاف(همون شیشه ای) کنید البته فانکشن توی این کد باید توی دو رویداد فرم استفاده بشه:کف: :


public class NewClass : Button
{



public Bitmap GetBitmap(int Lucid)
{

//Object Neded
int OldTop = this.Top; //Set Top Now
Bitmap Bmp; //Set Bitmap For Get Object To ClipBoard
Bitmap NewBmp; //Set New Bitmap For Save Image
Color OldColor; //Set Obj color For get Color

//Set Top
this.Top = Parent.Height + this.Height; //Set New top

//Get Picture
Bmp = new Bitmap(Parent.Width, Parent.Height); //Set Bmp New Bitmap
Parent.DrawToBitmap(Bmp, Parent.DisplayRectangle); //Draw A Bitmap Screen

//Set New Image
NewBmp = new Bitmap(Parent.Width, Parent.Height); //Set New Bmp To New Bitmap

//Set Top Old
this.Top = OldTop; //Set Old Top

//Get & set Image.Color
for (int X = this.Left; X <= (this.Left + this.Width); X++) //Ste For ,For Set And Get X Pixel
{
for (var y = this.Top; y <= (this.Top + this.Height); y++) //Ste For ,For Set And Get y Pixel
{
try //Set New try
{
Application.DoEvents(); //No
OldColor = Bmp.GetPixel(X + 8, System.Convert.ToInt32(y + 30)); //Get Color
NewBmp.SetPixel(System.Convert.ToInt32(X - this.Left), System.Convert.ToInt32(y - this.Top), Color.FromArgb(Lucid, OldColor)); //Set Color
}
catch (Exception) //Catch of try
{

} //End try
} //End for
} //End For

//Set GetBitmap
return NewBmp; //Set GetBitmap to NewBmp

//Dispos Object
Bmp.Dispose(); //Dispos Bmp
NewBmp.Dispose(); //Dis pos New bmp
}

}

این کلاس رو چندی پیش به VB.NET نوشته بودم به علت بی کاری به C#‎‎ تبدیل کردم.(چندی پیش میشه یک چند ساعتی قبل از این پست.):قهقهه:
خوب طریقه استفادش هم توی VB این جوری یه که شما میاید یک نمونه تعریف می کنید بعد خواصش رو ست میکنید بعد هم اظافه میکنید در آخر هم آز فانکشن موجود توی دو رویداد فرم استفاده می کنیم(نمونه باید یک متغییر عمومی باشه!) توی رویداد ی لود که هنگام ست کردن خواص هست و رویداد ReSizeEnd فرم که توی C#‎‎ نمی دونم معادلش چی میشه!:لبخند:
چی کار هم که میکنه بایک نگاه میشه فهمید.:قهقهه:

خوب حالا که درست شد بر محمد و آل محمد(ص) صلوات.:قلب:

iman_me
پنج شنبه 18 شهریور 1389, 03:49 صبح
دوست عزيز ميشه برنامش رو بزاريد چون نتونستم از كدش استفاده كنم

MEhdi Sobhani
پنج شنبه 18 شهریور 1389, 03:59 صبح
سلام
یه سورس اینجا گذاشته واسه فرم شیشه ای ، همون سبک فرمهای ویندوز سون و ویستا .
که البته تم ویندوز هم باید روی همون تم های AeroGlass باشه .
http://www.codeproject.com/KB/vista/AeroGlassForms.aspx

Saman_12
پنج شنبه 18 شهریور 1389, 04:05 صبح
دوست عزيز ميشه برنامش رو بزاريد چون نتونستم از كدش استفاده كنم

شما اول کلاس رو زیر کلاس اصلی فرمتون بنویس.(برای راحتی کار می تونید این رو Dll کنید و به صورت کامپونت ازش استفاده کنید.) بعد هم این متغییر عمومی رو تعریف کن :

NewClass Btn = new NewClass();
حالا برای اینکه بهتر بفهمی چی کار میکنه یک عکس بینداز روی بک گراند فرم حالا هم این کد ها رو توی فرم لود بنویس :


Btn.Top = 100;
Btn.Left = 100;
this.Controls.Add(Btn);
Btn.BackgroundImage=Btn.GetBitmap(127);
Btn.BackgroundImageLayout = ImageLayout.Tile;

حالا برنامه رو اجرا کن.
این تکه کد باید توی رویدادی مشابه رویداد ReSizeEnd فرم توی VB نوشته شه که در صورت تغییر اندازه فرم این کد درست عمل کنه :

Btn.BackgroundImage=Btn.GetBitmap(127);
این عدد 127 هم میتونه از 1 تا 255 باشه که 255 شفاف ترین(پشت شئ کلا معلومه) و 1 کدر ترین(همون باتون معمولی میشه.)هست متغییر باشه.:کف: