PDA

نسخه کامل مشاهده نسخه کامل : چه طور یه عکس رو نمایش بدم ؟



rezapassword
19-01-2008, 09:15
دوستان میخوام وقتی رو کلید 1 کلیک شد یه عکس که مربوط به همون کلیده به مد ت 10 ثانیه ( البته این دیگه کار تایمره ) در مرکز صفحه نمایش د اده بشه و بعد محو بشه :18:
راستی این کار رو میخوام در تعداد مثلا 140 تا کلید بکنم یه راحی رو بگید که قاط نزنم
اگه میشه کد و مراحل رو برام بزارید
تا یادم نرفته 2 کد نا قال رو میخوام
1 - ساخت چند نیو فولدر پشت هم ( c:\aaa\ddd\fff\ggg)
2 - وقتی رو یه کلید کیلک شد محتویات اون کلید ( یه متنی که ما بهش از قبل دادیم ) در حافظه کلیپ برد کپ بشه
ممنون
یا علی:11:

bad_boy_2007
19-01-2008, 22:50
دوستان میخوام وقتی رو کلید 1 کلیک شد یه عکس که مربوط به همون کلیده به مد ت 10 ثانیه ( البته این دیگه کار تایمره ) در مرکز صفحه نمایش د اده بشه و بعد محو بشه :18:
راستی این کار رو میخوام در تعداد مثلا 140 تا کلید بکنم یه راحی رو بگید که قاط نزنم
اگه میشه کد و مراحل رو برام بزارید
تا یادم نرفته 2 کد نا قال رو میخوام
1 - ساخت چند نیو فولدر پشت هم ( c:\aaa\ddd\fff\ggg)
2 - وقتی رو یه کلید کیلک شد محتویات اون کلید ( یه متنی که ما بهش از قبل دادیم ) در حافظه کلیپ برد کپ بشه
ممنون
یا علی:11:

مخوای عکس آهسته نمایش داده بشه یا نه ؟ منضورم اینه که عکس از حالت شبه به حالت واضح نمایش داده بشه ؟؟

1-
System.IO.Directory.CreateDirectory("c:\a")
2- System.Windows.Forms.Clipboard.GetText

rezapassword
20-01-2008, 10:39
بله دوست من
ممنون از پاسخ گویی

rezapassword
20-01-2008, 19:12
پس چی شد ر فقا

_H2_
21-01-2008, 12:31
سلام
واقعاً +GDI داخلی دات نت کارها را خیلی راحت و لذت بخش میکند !

برای رسم تصویر بدین شکل بهتر است از پارامتر gamma استفاده کنید و آنترا در تایمری تغییر دهید.
مثلاً تابع زیر با فواصل 10 میلی ثانیه و پله های یک صدم تصویر را ترسیم میکند که در نهایت فکر کنم همان جلوه ای شود که شما میخواهید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

برای تست یک فرم خالی بیاورید و رویداد Paint را چنین تکمیل کنید.
(1-فقط جهات تست جلوه فوق 2-مسیر تصویر اصلاح شود.)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بدیهی است که ریسمان اجرای فرمان تا پایان پیدا نکردن حلقه بلوکه میشود و باید در استفاده احتیاط کرد و در صورت نیاز از چند ریسمانی استفاده کرد تا با قفل شدن UI برخورد نکنیم.
و هر کاری کنید تا روند ساده تر شود، مثلاً آرایه ای از Image ها ایجاد کنید تا هربار نیازی به لود و... نباشد.

shalineh
21-01-2008, 14:44
1 - ساخت چند نیو فولدر پشت هم ( c:\aaa\ddd\fff\ggg)


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


2 - وقتی رو یه کلید کیلک شد محتویات اون کلید ( یه متنی که ما بهش از قبل دادیم ) در حافظه کلیپ برد کپ بشه

تگ (Tag) کنترل مورد نظر رو برابر متنی که میخوای تو کلیپ برد کپی بشه قرار بده و از تابع زیر استفاده کن.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

rezapassword
21-01-2008, 17:28
سلام دوستان
خیلی خلی ممنون
اقا قبول دارم که تو برنامه نویسی خیلی خنگم
شالینه جان
کد د ومت رو نتونستم استفاده کنم
باز ممنونم اگه کمکم کنی
اچ تو جان کار پیچیده شد
میشه یه برنماه نمونه بزاری
همه شما نمیخوای به من حالی کین هم راحت تریو هم من بهتر میفهمم چی شد
ممنون از شما م

rezapassword
22-01-2008, 22:25
اساتید من تا کی صبر کنم
این کد ها رو از کجا پیدا کنم

_H2_
28-01-2008, 10:20
سلام
دو روزپیش میخواستم نمونه ای بگذارم که اینترنتمان ترکید.
ولی در کل برادر! بد نیست خودمان هم کمی روی کدها تست کنید و فعال باشید، تا همیشه منتظر دانلود پروژه باشید.....!

نمونه جاری هیچ چیز خاصی ندارد، Copy و Paste شده همان کدهای فوق است، برای کپی متن هم از همان Tag استفاده شد که کاربر shalineh نمونه کدش را دادند...
rapidshare.com/files/87211321/rezapassword.zip.html

Ultimator
28-01-2008, 23:50
برای رسم تصویر بدین شکل بهتر است از پارامتر gamma استفاده کنید و آنترا در تایمری تغییر دهید.
مثلاً تابع زیر با فواصل 10 میلی ثانیه و پله های یک صدم تصویر را ترسیم میکند که در نهایت فکر کنم همان جلوه ای شود که شما میخواهید




با ارزه پوزش نميشه زياد رو اين روش حساب کرد
چون اولا هميشه بايد تو paint event استفاده بشه و ثانيا کلی اجرا رو کند ميکنه
کاش يتوری ميشد مثلا تو mouse over استفادش کرد

_H2_
30-01-2008, 10:13
سلام
نیازی به Paint Event نیست، من فقط اصل دستورات را گفتم، محل استفاده به برنامه نویس مربوط میشود، شما از Mouse Over خوشتان می آید، خوب مشکل کجاست؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

مجدداً تاکید میکنم که کد جاری روش را نشان میدهد و در حالت واقعی بهتر است و یا باید از عملیات های غیر همزمان چند ریسمانی استفاده کرد.

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

Ultimator
30-01-2008, 13:44
سلام
شما تو Draw از Graphics در ( EventArgs (e رویداد paint استفاده کرديد
همه ی Event ها که تو آرگشون Graphics ندارن ! يا دارن من نديدم ! دارن من نديدم ؟
خب اگه بخايم واسهMouseover استفادش کنيم Graphics که Optional هم نيست رو بايد از کجا بياريم ؟
ميشه لطفا راهنمايی کنيد ؟

ميدونين من چی ميخام ؟ دکمه های اينستالر Office 2007 رو ديدين ؟ ميريم روش با Fade رنگش عوض ميشه
آبيه بعد طلايی ميشه !
در ضمن کلا عملیات های غیر همزمان چند ریسمانی نمیدونم چیه !
یه چیز دیگه ! اگه بخایم اطلاعات بیشتر کسب کنیم در مورد همين+GDI
کجا بگردیم ؟ MSDN ? تو اين کتابها که من نگاه کردم چيزی نبود

ممنونم

shalineh
30-01-2008, 14:20
همه ی Event ها که تو آرگشون Graphics ندارن ! يا دارن من نديدم ! دارن من نديدم ؟
خب اگه بخايم واسهMouseover استفادش کنيم Graphics که Optional هم نيست رو بايد از کجا بياريم ؟
ميشه لطفا راهنمايی کنيد ؟


اکثر کنترلها دارای خاصیت گرافیک هستند ( با الگوی کلی Control.CreateGraphics ).

جسارتا میخوام مطلبی رو عرض کنم:
مشکل برخی از دوستان اینه که همه چیز رو آماده میخوان. در حالی که کسی که به برنامه نویسی علاقه داره باید دو چیز رو فراموش نکنه :
1- مطالعه 2- خلاقیت
در بین همه کسانی که در تاپیک دات نت پست میدن، فقط H2 این شرایط رو داره و من به شخصه از پستهاشون لذت میبرم. راه حلی هم که برای سوال رضای عزیز ارائه دادن خوب نیست بلکه عالیه.

Ultimator
30-01-2008, 23:59
با عرض شرمندگی ازين که به زحمتتون اندختم و ممنونم از اينکه راهنماييم کردين
در ضمن من يه راهنمايی کوچولو خاستم تا فعلا کارم راه بيفته و متمعن باشيد هميشه دنبال چيزی که ميخام ميگردم
ازين به بعد سعی ميکنم بيشتر بگردم و بيشتر و بيشتر و بيشتر مطلعه کنم ممنونم بابت توصيتون
با نظر شما هم موافقم اقای H2 واقعا پستهاشون عالی و مفيدن و تو اين انجمن بی نظير

_H2_
02-02-2008, 10:44
سلام

من پست دوستان را چهارشنبه آخر وقتی که انلاین بودم دیدم و تصمیم گرفتم گه پنجشنبه و جمعه نمونه کد بهتری درست کنم و سپس پاسخ دهم ولی طبق معمول فرصت اجرایی کردنش را نیافتم. :11::11::41:
پس همیجا به توضیحاتی اکتفا میکنم.
مشکل شی Graphics را که کاربر shalineh حل کردند.
چند ریسمانی هم ساده است، شما کار را به یک ریسمان اجرایی دیگر میسپارید تا ریسمان اصلی برنامه آزاد بماند و به پیغام های ورودی کاربر پاسخ دهد.
چند راه مرسوم را تیر وار بیان میکنم (متاسفانه و با عرض شرمندگی :11:)
1- استفاده مستقیم از کلاسس System.Threading.Thread
کلاسس فوق را New کنید و با کمک متد Start ریسمان دوم را شروع کنید.
(کلیه روشهای مرسوم دیگر بیان شده در زیر، خودشان در ذات از همین روش استفاده میکنند.)

2- استفاده از کامپونت System.ComponentModel.BackgroundWorker
کافیست برای عمل مورد نظر آنرا روی فرمتان قرار دهیدو به کمک متد Start و رویدادهایش کار را به انجام برسانید.

3- استفاده از کلاسس System.Threading.ThreadPool و متد QueueUserWorkItem
این کلاسس یک مخزنی از رشته ها را مدیریت میکند و کافیست متد مورد نظر را فراخانی کنید تا یکی از ریسمان های رزو شده برای کار مورد نظر فعال شود..
این کلاسس برای برنامه هایی که خیلی برای کارهای کوچک به ریسمان نیاز دارند، بسیار مفید و کار آمد است.

4- استفاده از یک مشتق Delegate و فراخانی متد BeginInvoke.
اصولاً در بخش ها و کلاسسهای مختلف وقتی متدی با نام XXXX موجود باشد و نیز متد BeginXXXX و EndXXXX هم موجود باشند.
متد اول برای اجرای عادی آن عمل است و دو متد بعدی برای اجرا در ریسمانی جدا.
مثلاً در کلاسس System.IO.FileStream (برای خواندن و نوشتن در فایل) متد Write داریم در حالی که BeginWrite و EndWrite را هم داریم.



تمام روشهای مرسوم و غیر مرسوم به طور مستقیم یا غیر مستقیم از همان کلاسس System.Threading.Thread استفاده میکنند.

_H2_
02-02-2008, 10:54
سلام مجدد
در مورد دستورات گرافیکی +GDI من کتاب و منبع خاصی جز MSDN سراغ ندارم. :13:
ولی خود من به شخصه از MSDN هم استفاده نکردم، چون اوضاع ساده تر و قابل فهم تر از آن بود که زحمت ارجاع به MSDN را به خودم بدهم.
البته برای کسی که کمی زحمت تست کردن و حداقل دیدن متدهای کلاسس System.Drawing.Graphics را در View->Object Browse به خود بدهد :31:

در مورد جلوه های زیبا هم باید بگویم در عمل کار با صرف دستوران Runtime خالص +GDI صورت نمیگیرد و برای جلوه های بهتر و قشنگ تر باید به تصاویر از قبل اماده bmp و png متصل شد و انرا با +GDI تلفیق کرد.
مثلاً در مورد همین XP و ویستا، برای اغلب دکمه هایی که دوستان میبینند، چهار تصویر bmp یا png در داخل برنامه ذخیره شده !
یکی برای حالت عادی
یکی برای حالت غیر فعال
یکی برای زمانی که موس رویش امده
یکی برای وقتی فشرده شده

اگر کمی در رسورس های Xp و Vista سرک بکشید به وضوح میتوانید تصاویر چهار گانه را پیدا کنید.
به شکل زیر دقت کنید:
بخش اول تصویر بخش کنترل برنامه Vista-Photo Gallery در حالت عادی است.
بخش دوم تصویر بخش کنترل برنامه Vista-Photo Gallery در حالت ماکسیموم شده است.
بخش سوم، قسمتی از منبع اصلی فایلهای png داخل یک dll متعلق به برنامه فوق است.
تحلیل:
1- تصاویر با فرمت png و نیمه شفاف انتخاب شده اند تا طرح زیر خود را انتقال دهند و بتوان الگو را برای حالت عادی و ماکسیموم تغییر داده
(الگویی کف یا background هم در dll موجود بوده که من دیگر نیاوردمش)

2- تصاویر دکمه ها در چهار حالت مختلف ذخیره شده

3- بخش قاب دکمه ها با تلفیق جالب از تصاویر پیش ساخته png و دستورات +GDI ساخته شده
اگر به پایین شکل دقت کنید میتوانید اجزای تشکیل دهنده فریم دور دکمه ها را مشاهده کنید.
--- بخش نیمه گرد راست
--- بخش نیمه گرد چپ
--- بخش گرد وسط
--- خط جدا کننده عمودی (در برنامه اصلی در سمت چپ دکمه Delete استفاده شده)
--- بخش مدام تکرار شونده و پرکننده بین واحدها (دو خط ممتد موازی)

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

پیشنهاد میکنم دوستان برای درک بهتر تصاویر، آنها را Save و در Photoshop باز کنند !!!
دوستانی که Vista دارند هم حتماً با کلیک راست و Preview روی یک تصویر نرم افزار فوق را از نزدیک ببینند.
(حالت عادی- ماکسیموم - حرکت ماوس روی دکمه و فشردن و...)
بهترین راه برای سرعت و زیبا ترین نتیجه، استفاده از تصاویر رندر شده و آماده و بعد استفاده از امکانات runtime داخل +GDI است.

من به شخصه آنقدر در کد غرق میشوم که هیچگاه حال و حوصله اضافه کردن این تشکیلات را به برنامه های خودم ندارم.
:10::10::10:

_H2_
02-02-2008, 10:59
سلام مجدد
نمونه کد و سمپل های زیادی در سایت مایکروسافت وجود دارد، مثل "101 VB.NET Samples" در خود سایت مایکروسافت. ( نمونه #C هم موجود است).
و سروران ارجمندی که VS2008 را نصب کرده اند هم میتوانند یک راست سری به مسیر زیر بزنند و از ده ها نمونه کد در ضمینه های مختلف استفاده کنند.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(انها که 2008 را نصب کردند، این سمپل ها را از دست ندهند)

Ultimator
02-02-2008, 17:24
با سلام خدمت همه ی دوستان عزيز مخصوصا استاد گرامی H2 جون
بابت توضيحاتتون در مورد چند ریسمانی خيلی ممنونم سعی ميکنم يطور ازش استفاده کنم همینطور +GDI

در مورد دکمه های گرافيکی مطمعنا من نميخاستم خود +GDI همه کار بکنه بلکه اين کاری که شما ميگين رو
انجام دادم با يکم کد نويسی و تقيير دادن image يه Buttonتو event های مختلف مورد نیاز و هدف از استفاده ی +GDI دادن افکت fade با تغییر alpha بود که وقتی mouse روی button میره تصویر با افکت تغییر کنه که دارم سعیم رو میکنم که اینکارو بکنم.

فقط يچيز ميمونه تغيير تصاوير با کد نويسی برای هر دکمه حجم برنامه رو خيلی زياد ميکنه چون واسه هر دکمه توی چهار پنجتا اونت بايد کد بنويسيم برای حل اين مشکل سعی کردم از user control استفاده کنم که به مشکلات زير خوردم و هنوز در پی راه حل براشون ميگردم

اول توی user control يه button گزاشتم که به همون روش کد نويسی بری هر رويداد تصويرش عوض ميشه text دکمه هم با یه property تغییر میکنه
حالا مشکلش اينه که وقتی روی دکمه کليک کنيم بديهيه که کدی که برای رويداد کليک يوزر کنترل نوشتيم اجرا نميشه
دفعه ی بعد ازbutton استفاده نکردم و فقط برای بک گراند يوزر کنترل کد نوشتم ايندفه مشکل قبلی حل شد ولی
به يه مشکل ديگه بر خوردم اينکه خود يوزر کنترل خاصيت تکست نداره که بخايم همه جا ازش استفاده کنيم
و ديگه دکمه اي هم وجود نداره که تکست اون رو تغيير بديم ، يعنی برای هر دکمه بايد سه چهار تا تصوير جديد ايجاد کنيم که زياد منطقی نيست
اينکارايی که کردم رو تو يه پروژه نوشتم گذاشتم ببينيد تا بهتر منظورم رو متوجه شيد

اصلا غير از اينها روش ساده تر و منطقی تری وجود داره که بتونيم دکمه های گرافيکی درست کنيم ؟

اینم آدرسش :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



با تشکر زیاد

_H2_
02-02-2008, 18:10
سلام
پست را وارد کردم ولی به علت مشکلات املایی و تایپی و عدم فرصت تصحیح بیخیال شدم. !!!!!!
و متاسفانه اینجا هم که نمیشود چیزی را Delete کرد!
میبخشید.

_H2_
02-02-2008, 18:12
سلام

با سلام خدمت همه ی دوستان عزيز مخصوصا استاد گرامی H2 جون
بابت توضيحاتتون در مورد چند ریسمانی خيلی ممنونم سعی ميکنم يطور ازش استفاده کنم همینطور +GDI

در مورد دکمه های گرافيکی مطمعنا من نميخاستم خود +GDI همه کار بکنه بلکه اين کاری که شما ميگين رو
انجام دادم با يکم کد نويسی و تقيير دادن image يه Buttonتو event های مختلف مورد نیاز و هدف از استفاده ی +GDI دادن افکت fade با تغییر alpha بود که وقتی mouse روی button میره تصویر با افکت تغییر کنه که دارم سعیم رو میکنم که اینکارو بکنم.

فقط يچيز ميمونه تغيير تصاوير با کد نويسی برای هر دکمه حجم برنامه رو خيلی زياد ميکنه چون واسه هر دکمه توی چهار پنجتا اونت بايد کد بنويسيم برای حل اين مشکل سعی کردم از user control استفاده کنم که به مشکلات زير خوردم و هنوز در پی راه حل براشون ميگردم

اول توی user control يه button گزاشتم که به همون روش کد نويسی بری هر رويداد تصويرش عوض ميشه text دکمه هم با یه property تغییر میکنه
حالا مشکلش اينه که وقتی روی دکمه کليک کنيم بديهيه که کدی که برای رويداد کليک يوزر کنترل نوشتيم اجرا نميشه
دفعه ی بعد ازbutton استفاده نکردم و فقط برای بک گراند يوزر کنترل کد نوشتم ايندفه مشکل قبلی حل شد ولی
به يه مشکل ديگه بر خوردم اينکه خود يوزر کنترل خاصيت تکست نداره که بخايم همه جا ازش استفاده کنيم
و ديگه دکمه اي هم وجود نداره که تکست اون رو تغيير بديم ، يعنی برای هر دکمه بايد سه چهار تا تصوير جديد ايجاد کنيم که زياد منطقی نيست
اينکارايی که کردم رو تو يه پروژه نوشتم گذاشتم ببينيد تا بهتر منظورم رو متوجه شيد

اصلا غير از اينها روش ساده تر و منطقی تری وجود داره که بتونيم دکمه های گرافيکی درست کنيم ؟

اینم آدرسش :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



با تشکر زیاد

راه حل وراثت است، استفاده از UserControl برای این کار اصلاً منطقی و خوب نیست و به اندازه Copy و Paste کدها بد است.
دیگر تا 2 شنبه آنلاین نیستم، سعی میکنم تا دو شنبه چیزی حاضر کنم و از شرمندگی دوستان در آییم.
دیگر باید بروم، میبخشید و بای .:11::11::11::10:

rezapassword
03-02-2008, 20:27
سلام بر شما h2 عزیز
اقا ممنون که برنامه نمونه گذاشتی
اینو بگم که برنامه شما اصلا باز نمیشه چون یه فایلش رو نیست ( فایل اصل )
فقط تونستم بیلد کردش رو بینم
که فهمیدم منظور من رو متوجه نشدید
من نمیخوام به این صورت یه عکس رو نشون بدم
می خوام وقتی موس رفت رو یه دکمه این عکس ( عکس مروط به اون دکمه نشون داده بشه ) البته به صورت بالا یه چیزی مثل tootip ولی از جنس عکس نه نوشته

Ultimator
04-02-2008, 00:07
سلام اقای رضای عزيز
من تو اين پست ها برنامه ی نمونه اي از اقای h2 نديدم اگه منظورتون ان برنامه ايه که من گذاشتم با عرض معذرت هدفم جواب دادن به سوال شما نبود ، بلکه برای تکميل سوال خودم بود که اونم فقط کد هاش مهم بود که کلا مساله منتفی شد

در ضمن جناب H2 جان عزيز از راهنماييتون خيلی خيلی ممنونم مثالهای Visual Studio 2008 در زمينه چند ريسمانی خيلی مفيد بود
با تشکر زياد

_H2_
04-02-2008, 10:30
سلام

می خوام وقتی موس رفت رو یه دکمه این عکس ( عکس مروط به اون دکمه نشون داده بشه ) البته به صورت بالا یه چیزی مثل tootip ولی از جنس عکس نه نوشته
گرچه فرقی نمیکند و اصولش همان کدی است که اول گذاشتم و فقط باید در جای مناسب از آن استفاد کنید ولی سعی میکنم سمپلی تا چند روز آینده سرهم کنم. :11:




فقط يچيز ميمونه تغيير تصاوير با کد نويسی برای هر دکمه حجم برنامه رو خيلی زياد ميکنه چون واسه هر دکمه توی چهار پنجتا اونت بايد کد بنويسيم برای حل اين مشکل سعی کردم از user control استفاده کنم که به مشکلات زير خوردم و هنوز در پی راه حل براشون ميگردم


خوشبختانه اینبار وقت کردم و نمونه ای حاضر کردم.
نکته جالب دیگری که در مورد روش کارایی گرافیکی XP و Vista یادم رفت خدمت اساتید عرض کنم آن است که تصاویر چهارگانه فوق الذکر در همه موارد به صورت یک تک تصویر ذخیره میشوند نه چهار تصویر !

یعنی یک تصویر کشیده که چهار تکه پشت سر هم دارد.
در این نمونه دکمه جدیدی با نام GraphicButton و وراثت از Button تولید شده و تصاویر به همین شیوه استفاده شده و تصاویر موجود در پوشه Resources بی هیچ ادیت و دستکاری و حتی Rename ای، مستقیماً از منابع ویستا قرض گرفته شده !!!!!
(تصاویر با دو ابعاد مختلف موجود بودند که من برای برنامه از نمونه بزرگ آن استفاده کردم.)

کلاسس GraphicButton به راحتی و مستقلاً قابل استفاده در هر پروژه ای است
گرچه سادگی بر کارآیی ترجیح داده شده و گرنه بیشک میشد چیزی خیلی قوی تر و کامل تر تولید کرد، ولی گفتم هم ساده تر باشد و در عوض دوستان متوجه بشوند بهتر است ....
در وقت هم صرفه جویی :21:

این کلاسس برای کار در Form فقط یک خصوصیت جدید به نام ImageStyle دارد که یک تصویر میگیرد و آنرا از محور افقی به چهار تصویر میشکند و برای حالات مختلف استفاده میکند و اگر تصویری به ImageStyle اش داده نشود هم مثل یک Button کاملاً عادی رفتار میکند.
در اصل به علت وراثتف کلاسس GraphicButton همان کلاسس Button است و استفاده از این دو با هم هیچ فرقی ندارد، فقط GraphicButton خصوصیت اضافه ای به نام ImageStyle دارد.
ضمناً به علت سادگی و عدم نیاز زیاد در شرایط استفاده از عکس، کد رسم Text را ننوشتم، در نتیجه وقتی ImageStyle پر باشد Text نشان داده نمیشود، دوستان میتوانند با تک خط ناقابلی قابلیت فوق را هم به کلاسس GraphicButton اضافه کنند.

فکر کنم ذکر معایب تکرار کد و Copy و Paste مکرر کد برای هر دکمه لازم نباشد ولی فقط برخی معایب استفاده از UserControl را برای این کار بیان میکنم.
1- ساخت دو کنترلر (یکی UserControl و دیگری Button) و تخصیص دو hWnd از منابع ویندوز برای عمل فوق
2- اجبار به اضاه شدن کد برای تغییر سایز (چه دستی چه مدیریت دات نتی با Dock )
3- موجود نبودن هیچ یک از خواص Button در طرح نهایی
مثل:
DialogResult
AutoSizeMode
PerformClick
NotifyDefault
ResetFlagsandPaint
AutoEllipsis
FlatAppearance
FlatStyle
IsDefault
Text
TextAlign
TextImageRelation
و...
و...
و...

رویداد DoubleClick
رویداد Click
یعنی شما برای راه اندازی مجدد هر یک از قابلیت های فوق مجدداً باید فوج عظیمی از کدها را بنویسید که پیش از شما مایکروسافت به بهترین شکل ممکن نوشته!
این هم نوعی تکرار کد و Copy و Paste است
4- شما در ذات یک UserControl ساخته اید نه Button، شاید خودتان و کاربر برنامه تان را گول بزنید ولی دات نت گول نمیخورد !!!!
تعجب نکنیدف عرض میکنم!
منظورم آن است که در خیلی از کدها و مشخصات کلاسس های دیگری که میخواهند از شما یک Button بگیرید UserControl شما را که به ظاهر یک Button است نخواهند پذیرفت.
مثلاً مثلاً خصویت AcceptButton در Form که مشخص میکند کدام دکمه پیش فرض کلید Enter باشد، UserControl شما را به عنوان ورودی نخواهد پذیرفت، چون وراثتی از Usercontrol است و به کلاسس button کست یا قالب ریزی نمیشود.


نمونه جاری گرچه کمی شبیه Vista-Photo Gallery است ولی شامل هیچ کدی برای کلیک دکمه ها نیست، اگر خواستید رویدادها را کد نویسی کنید.
نمونه کد با نسخه 2005 همانگ است و دوستانی هم که فقط میخواهند exe نهایی را ببینند میتوانند انرا از bin\Release پیدا و اجرا کنند.
چون کلاسس GraphicButton در همان جایی که تولید شده استفاده هم دارد میشود، امکان دارد در صورت خطا در کدهای دیگر و ناتوانی VS در کامپایل زودهنگام کدها، وقتی Form را برای ادامه طراحی باز میکنید با خطا روبرو شوید و محتویات را نبینید، اصلاً نگران نشوید، Form را ببندید و خطا ها را که مانع کامپایل هستند رفع کنید و پروژه را خودتان با فرمان Solution->Rebuild Solution کامپایل کنید .


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق و پیروز باشید،

Ultimator
04-02-2008, 14:30
با سلام
جناب H2 عزيز اول ميخاستم ازتون تشکر کنم که مشکلاتو حل کرديد همون راهی رو به کار بردين که من دنبالش بودم
و ميخاستم از user control بهش برسم که نشد و ميخام بگم راه حلتون عاليه ! مرسی!
در ضمن يه چيزايی هست که ميخاستم بگم ولی فرصت نشد بعدا ميگم

فقط يچيزی که ميمونه اينه که شما کلاسی که ايجاد کردين فکر کنم با 2 Net. سازگار باشه ولی پروژتون فقط تو Visual studio 2008 باز ميشه
اگه Visual Studio 2005 دارين نمونه رو با اون ايجاد کنيد که بقيه سرورانی که نسخه 2008 ندارن هم بتونن ازش استفاده کنن اگه ندارين بگين اينکارو بکنم

باز هم خيلی خيلی ممنونم از شما که با راهنمايياتون هميشه مشکل گشای همه ايد

rezapassword
04-02-2008, 19:18
اچی جون د ر تکمیل فرمایش دوست عزیزم باید بگم که حق با ایشون و خودتون که استادید و این پراجکت ها در 2005 باز نمیشن لطفا برا من 2005 رو بسازد
قربان شما
یا علی
اینو یادم رفت
سپاس به خاطر تلاشتون

Ultimator
05-02-2008, 00:15
سلام
با اينکه زياد فرق نميکنه و فقط کلاسی که H2 جان نوشته بودن مهمه و خودتون ميتونيد با استفاده از اون يه پروژه کامل درست کنيد ولی با اين حال کل پروژه H2 جون رو کپی کردم تو Visual studio 2005 و پروژشو گذاشتم تو اين آدرس که اگه Visual studio 2008 نداشتيد بتونين اين رو باز کنيد
من ننوشتما نگين خواست به اسم خودش تموم کنه !
All Right reserverd for H2 Joon Copyright 2hezaro ziad h02.ir !

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
:10:
------------------------------------------------------------------------------------------------------

يه کار ديگه هم کردم نشستم اون کلاسH2 جون رو به #C نوشتم که اونايی که با سی نردبون راحت ترند بتونن بسته به نيازشون توصعه اش بدن ولی شرمنده عجله اي شد و جسارتا هنوز فرصت نشد تست کنم :21:! :5:
به بزرگواريتون ببخشيد:11:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

خيلی خيلی موفق باشيد

rezapassword
05-02-2008, 15:04
ممنون ر فیق
ولی انا جواب من نستند خودت که میدونی
ولی از زحمتت مچکرم

Ultimator
06-02-2008, 12:39
يه سوال ديگه
من با کد زير از همون کلاس GraphicButton به دکمه تکست اضافه کردم ولی نميدونم چطور بيارمش وسط به جا اينکه مکان ثابت بدم !
و اينکه رنگش تو اين روش ثابته ! چيکار کنم ؟

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در ضمن به رضا جان هم بگم دارم تلاشم رو ميکنم تا چيزی که ميخاين رو آماده کنم
موفق تر باشين

_H2_
06-02-2008, 14:47
سلام
چقدر پر گفتگو !
در مورد 2008 و 2005
من عادت ندارم دو نسخه نصب داشته باشم (چه دوتا ویندوز چه دوتا VS !؟ فقط آخرین نسخه)
مثالها را سعی میکنم با Framework2 بسازم ولی VS همان 2008 می ماند و شرمنده دوستان میشوم.
و فکر میکردم VS2005 میتواند باز کند، که دوستان گفتند نمیتواند.
در کل در اینگونه موارد پیشنهاد میکنم که دوستان در VS2005 فرمان New Project بدهند و فایلها را تک تک وارد پروژه کنند.
البته این تفاوت ها فقط شامل vbproj.* است و سعی میکنم در آینده دو فایل vbproj.* ارائه دهم یکی برای 2008 و یکی برای 2005

بهرحال فعالاً که جناب ultimator زحمت این تبدیل را کشیدند.
در مورد #C هم هیچ مشکلی وجود ندارد، من خودم اگر دقت کرده باشید یک سطح پوشه اضافه ایجاد کردم و برنامه را در پوشه VB.Net قرار دادم تا اگر زمانی کسی درخواست #C و یا VC++.Net اش را هم داد، بتوانم بدون تغییر آدرس پوشه ها، نمونه را برای آنها هم اضافه کنم.
(ولی با وجودی که با VC++.Net و C#.Net هم کار میکنم، یک جورایی همچین بگی نگی با VB.Net راحت تر هستم)

که در این مورد هم باز جناب ultimator لطف کرده و کد تبدیلی را گذاشته اند که جای تشکر دارد.


يه سوال ديگه
من با کد زير از همون کلاس GraphicButton به دکمه تکست اضافه کردم ولی نميدونم چطور بيارمش وسط به جا اينکه مکان ثابت بدم !
و اينکه رنگش تو اين روش ثابته ! چيکار کنم ؟

شما که متن و فونت را لطف فرمودید از کنترلر جاری استفاده کرده اید، رنگ را هم لطف میکردید و از ForeColor !!!
به جای گذاشتن کد، توضیح میدهم تا خودتان انجام دهید.
1- برای تبدیل Color به Brush میتوانید از System.Drawing.SolidBrush استفاده کنید.
2- برای تنظیمات متن ترسیمی، Align در نه جهت ! (بالا-چپ، بالا-وسط، بالا-راست و... و... و...) و warp و RightToLeft و... باید از System.Drawing.StringFormat استفاده کنید.
3- مثل Font و ForeColor و Text و... بهتر است در رسم متن به TextAlign و RightToLeft جاری هم دقت کنید !!!

اگر نتوانستید، خودم چشم کور کدش را میگذارم. !:31::10:

_H2_
06-02-2008, 14:53
سلام


ولی اینا جواب من نیستند ...
امیدوارم این باشه!
چون گفتید که میخواهید تصویر به صورت یک popup در جلوی دکمه نشان داده شود، من از روش بهتری استفاده کردم و به جای کار گرافیکی مرسوم، شفافیت فرمی را که باید در جلو نشان داده میشد تغییر دادم.
عمل مذکور برای جلوگیری از بلوکه شدن ریسمان اصلی توسط ریسمان دیگری و به کمک کامپونت BackgroundWorker انجام شده و به جای غیر فعال کردم مکانیزم امنیتی "دسترسی ریسمان های مقاطع به کنترلرها" با کمک تابع کوچکی به نام UpdateOpacity همزمانی ریسمان ها تأمین شده.
با دستکاری دو ثابت POINTERSTEP و TIMESTEP در برنامه قادر خواهید بود سرعت افکت را تنظیم کنید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ریاضی را نباید حفظ کرد باید یاد گرفت، آن زمان است که قادر خواهید بود هر مسئله ای را حل کنید.
برنامه نویسی هم تا حدود زیادی تفکرات شبه ریاضی دارد (و اصولاً یکی از دلایل زیباییش همین است)
کلی میگویم و منظور فرد خاصی نیست؛ متأسفانه خیلی از افراد سعی میکنند راه حل مسائل برنامه نویسی را حفظ کنند، برنامه نویسی را باید یاد گرفت!
وقتی حفظ کنید 2 + 3 میشود 5 چیزی بلد شده اید، بدون شک این حفظ کردن سریعتر از یادگیری دلایل است، بد نیست ولی
وقتی مسئله کمی عوض شود و بشود 2 + 4 سواد قبلی تان بدرد نخواهد خورد و باید مجدداً بروید و حفظ کنید ولی
اگر یادبگیرید چرا 2 + 3 شد 5 ، گرچه کمی سخت تر و دشوار تر میشود ولی عمریست !
و دیگر نیازی به حمل کوله باری از اطلاعات و نمونه کدهای هر کاری نخواهید، مفهوم در مغز حک میشود.

شاید فرد با حافظه حفظی قوی دو عدد چهار رقمی را خیلی سریع جمع کند، ولی بی هیچ شکی ریاضیدان نیست! یک ماشین حساب انسانی است!
اگر اینطور نبود، ماشین حسابهای جیبی من و شما، خیلی بیشتر از پروفسور مهری یا بهزاد و... ریاضیدان هستند.
فقط طبق یک فرمول خاص عمل کردن و بلاکهایی را جابه جا کردن فایده ای ندارد ....
هر وقت خواستید ببینید کد سمپل بدردتان خورد یا نه !؟ ببینید بعد از دیدن، آن را نگاه میدارید یا نه ؟ اگر نگه داشتید، پس بدردتان نخورده ! :41:

:10:

Ultimator
06-02-2008, 19:58
با سلام



شما که متن و فونت را لطف فرمودید از کنترلر جاری استفاده کرده اید، رنگ را هم لطف میکردید و از ForeColor !!!
به جای گذاشتن کد، توضیح میدهم تا خودتان انجام دهید.
1- برای تبدیل Color به Brush میتوانید از System.Drawing.SolidBrush استفاده کنید.
2- برای تنظیمات متن ترسیمی، Align در نه جهت ! (بالا-چپ، بالا-وسط، بالا-راست و... و... و...) و warp و RightToLeft و... باید از System.Drawing.StringFormat استفاده کنید.
3- مثل Font و ForeColor و Text و... بهتر است در رسم متن به TextAlign و RightToLeft جاری هم دقت کنید !!!


با راهنمايی جناب H2 به اين چند خط کد رسيدم و مشکل text حل شد

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ممنونم

rezapassword
08-02-2008, 11:20
اچی جان این همون چیزیه که میخو ام ولی بازم باز نمیشه

rezapassword
09-02-2008, 08:30
h جون
نیستی به داد ما بر سی

_H2_
09-02-2008, 16:10
سلام

h جون
نیستی به داد ما بر سی
عزیز دل بابا،در 2005 ، New Project بزن و فایلها را وارد کن.:11:

هنوز وقت نکرده ام روی تفاوت های vbproj.* نسخه 2008 و 2005 وقت بگذارم.:11:

:10:

_H2_
09-02-2008, 16:24
سلام

اين چند خط کد رسيدم و مشکل text حل شد

عالی بید!!!!! :12:
نه بابا، این جوانان رشید ایران اگر ترشی ..... :3::34::10:


بهرحال من هم یک ترسیم مختصر به کد اولیه خودم اضافه کردم که از همان آدرس قبلی قابل دانلود است.
متاسفانه وقت نکردم فایل vbproj.* ای برای 2005 بگذارم و نیز کد #C را هم بنویسم. :11:
ولی اصل پروزه هیچ فرقی نکرده و همان کلاسس اصلی برای ترسیم متن با گرافیکی ساده، مجهز شده.
بدیهی است که همچنان برای یک کلاسس کامل خیلی جای کار دارد، و در فقط در همین یک قلم ترسیم متن باید معیار های دیگری را هم لحاظ کرد، از جمله غیر فعال بودن کنترلر (ترسیم خاکستری متن) و... و... و...

جمیعاً موفق و پیروز باشید.

rezapassword
11-02-2008, 10:30
h جون
نمیشه خودت د ر ستش رو برامون بزار

Ultimator
12-02-2008, 11:35
سلام دوستان
به جا اينکه پروژه رو دوباره تو 2005 درست کنم آپلود کنم دانلود کنيد يکم فکر کردم و به اين نتيجه رسيدم
که پيدا کردن تفاوت های 2008 و 2005 راحت تره ! پس اينکارو بکنيد
اين خط از فايل 2008 رو به اين خط تغيير بدين ! همين
ازين

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به اين

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چه کاره سختی ! خسته شدم !:21::19:
البته تفاوتها خيلی زياده ولی با اين تقيير پروژه باز ميشه بقيه تقييرات ناديده گرفته ميشن.
خيلی موفقتر باشين:10:

rezapassword
12-02-2008, 17:20
قر بونت بزار ی راحت تر نیستی

Ultimator
13-02-2008, 13:50
فکر کنم شما بتونيد فايل vbproject رو با Notepad باز کنيد نزديک هاي آخرش اين خط که گفتم رو پيدا کنيد
و به اون چيزی که گفتم تغيير بدين اگه نميتونين مثلا اگه notepad ندارين ! بگين فایل رو ويرايش کنم بدم خدمتتون

rezapassword
13-02-2008, 18:06
تنه میز نی ر فیق
اگه نمیخوای نز ار ی خوب نزار
ولی د یگه تنه نز ن قر بونت