PDA

View Full Version : سوال: تغيير ظاهر TitleBar



رافعی مهدی
پنج شنبه 03 مرداد 1387, 22:14 عصر
سلام
قبلاً هم اين سوال مطرح شده است كه چگونه مي‌توان رنگ TitleBar را تغيير داد؟ اما پاسخ روشني به اين سوال داده نشده است.
گفته مي‌شود اين كار با تغيير WndProc امكان پذير است و ...
آيا ممكن است يكي از دوستان كد ساده و در عين حال كاملي براي اين كار ارائه دهد؟ و آيا مي‌توان بجاي تغيير رنگ TitleBar تصوير دلخواهي را در آن نمايش داد؟

با تشكر

رافعی مهدی
جمعه 04 مرداد 1387, 10:37 صبح
پس از مقداري جستجوي بيشتر به نتايج جالبي رسيدم...
مطالبي كه در اين تاپيك ارائه شده، ترجمه ي بهترين موردي است كه پيدا كردم. البته ترجمه تحت الفظي نيست و در بعضي موارد مطالبي رو هم اضافه و كم كردم. براي دسترسي به اصل مطلب مي توانيد به آدرس زير مراجعه كنيد:

Drawing Custom Borders in Windows Forms,<br />Part Three: Introducing Form Styles (http://geekswithblogs.net/kobush/articles/CustomBorderForms3.aspx)
قبل از هر چيز بايد گفت كه با استفاده از WPF ميشه اين كار رو به مراتب راحتتر انجام داد. به عنوان مثال مي توانيد به لينكهاي زير مراجعه كنيد:

How to create a Microsoft Max style window in WPF - Jan-Cornelius Molnar (http://www.vb-magazin.de/forums/blogs/janm/archive/2006/06/19/4655.aspx)
Jan-Cornelius Molnar / .NET: Custom Chrome in WPF (http://janmdotnet.blogspot.com/2006/02/custom-chrome-in-wpf.html)
اما آنچه كه در اينجا مورد نظر است، انجام اين كار بدون استفاده از WPF است.
آقاي Szymon Kobalczyk كامپوننتي بنام FormStyleManager طراحي كرده كه به وسيله ي اون مي‌توانيد ظاهر هر فرم دلخواهي از برنامه رو تغيير بديد. ايده ي اصلي اينه كه وقتي از چند فرم با Style مشابه استفاده ميكنيد، مي توانيد Style دلخواهي رو فقط يكجا تعريف كنيد و اون رو براي همه ي اين فرم ها بكار ببريد. واسه همينه كهFormStyleManager داراي كتابخانه اي از FormStyle هاي قابل دسترسي است. اين كتابخانه قابيلت Load و Save فايلها رو هم داره، بنابراين در زمان اجراي برنامه هم ميتوانيد Style فرم هاتون رو تغيير بديد!
به منظور Load كردن يه Style Library بايد از متد استاتيك Load استفاده كنيد. مثلاً براي بارگذاري كتابخانه ي پيش فرض بايد كد زير را به متد اصلي اضافه كرد:


FormStyleManager.Load("MyLibrary.fsl"); بعد از اين كار قادر خواهيد بود Styles رو بر روي هر فرمي كه از كلاس CustomBorderForm ارث مي برد، اعمال كنيد. براي انجام دادن اين كار تنها كافيه خاصيت UseFormStyleManager رو true كنيد. اگر دوست داشته باشيد مي توانيد با استفاده از خاصيت FormStyleName نوع Style مورد نظرتون رو هم تعيين كنيد و گرنه با خالي گذاشتن مقدار اين خاصيت، از Style پيش فرض استفاده خواهد شد.
با اين حال اگر نمي خواهيد از FormStyleLibraries استفاده كنيد، باز هم ميتوانيد يك FormStyle تنها بسازيد... براي اطلاعات بيشتر راجع به اين روش به لينكهاي زير مراجعه كنيد:

Drawing Custom Borders in Windows Forms (http://geekswithblogs.net/kobush/articles/CustomBorderForms.aspx)
Drawing Custom Borders in Windows Forms, Part Two (http://geekswithblogs.net/kobush/articles/CustomBorderForms2.aspx)

استفاده از FormStyleEditor:
" ولي چه فايده اي داره اگر Style Manager اي داشته باشيم كه نتوانيم Style هاش رو تغيير بديم؟! " لذا آقاي Szymon Kobalczyk كار ديگري هم انجام دادند و اون ساختن ويرايشگري است كه باهاش مي توانيد Style هاي موجود رو به سادگي ويرايش كنيد!



http://geekswithblogs.net/images/geekswithblogs_net/kobush/1591/o_FormStyleEditor.png


ممكنه فكر كنيد اين ويرايشگر رو بايد در يك برنامه ي مجزا بكار برد، در حالي كه اينطوري نيست و اون تنها مثل يك كامپوننت عمل ميكند كه درست در برنامه ي خود شما قرار مي گيرد. خب اين موضوع داراي اين مزيت است كه با اعمال هر تغييري مي توانيد اون رو به راحتي در برنامتون مشاهده كنيد. اين ويرايشگر مثل يك كامپوننت به صورت يه پك آماده شده، و بايد اون رو روي فرمتون قرار بديد. سپس ميتوانيد ويرايشگر رو با فراخواني متد ShowFormEditor اجرا كنيد.
پنجره اي كه در تصوير بالا ملاحظه مي كنيد، محتويات كتابخانه اي رو كه در حال حاضر بارگذاري شده، نشان مي دهد. بنابراين اگه شما هم كتابخانه اي رو Load كرده باشيد، بايد چيزي مشابه همين تصوير رو ببنيد، در غير اين صورت بايد اول يه FormStyle جديد رو با زدن دكمه ي 'Add Style' ايجاد كنيد. از بالا سمت چپ، دكمه ي 'New' محتويات كتابخانه ي جاري رو پاك مي كنه، 'Open' يك كتابخانه رو از طريق فايلي كه پيش از اين ذخيره شده باز مي‌كنه، خب 'Save' هم كه واضحه. پسوند فايلي كه براي اين كتابخانه ها در نظر گرفته شده fsl. است كه برگرفته از عبارت Form Style Library مي باشد.
همانطوري كه قبلاً گفته شد يك كتابخانه مي تواند بيش از يك Form Style را در خود جاي دهد. براي مثال شما مي توانيد Skin هاي متفاوتي رو براي MainWindow ، Dialogs و ToolWindows طراحي كنيد! هر Style به واسطه ي خاصيت Name اي كه داره شناسايي ميشه. با استفاده از خاصيت FormStyleName براي هر فرمي كه از كلاس CustomBorderForm مشتق شده باشه، ميشه اين نام رو تعيين كرد. به كمك ليستي كه در مقابل ليبل Active Style وجود داره، Style اي رو كه مي خواهيد ويرايش كنيد، انتخاب كنيد. دكمه ي 'Add Style' باعث مي شه كه بتوانيد Style هاي بيشتري بسازيد و 'Delete Style' هم كه نيازي به توضيح نداره! . . .
خب البته توضيحات بيشتري هم راجع به ساير امكانات اين ويرايشگر و معاني اونها در لينك اصلي به همراه يه مثال نصفه نيمه وجود داره.
http://geekswithblogs.net/images/geekswithblogs_net/kobush/1591/o_StretchMargins.png
در پايان اشاره ميشه كه يه پروژه ي نمونه هم در مرجع اين مطلب، توسط ايشان در اختيار علاقمندان قرار داده شده كه براي سادگي اون رو از اينجا هم ميتوانيد دانلود كنيد.

موفق باشيد