امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 1
  • 1
  • 2
  • 3
  • 4
  • 5
یه یوزر کنترل واقعا توپ
نویسنده پیام
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #1
یه یوزر کنترل واقعا توپ
سلام

یه یوزرکنترل توپ نوشتم که مثل یه فرم عمل می کنه. نوار عنوان و تغییر اندازه و بزرگ و کوچیک کردن فرم.
کاملا سفارشیه. خیلی باحاله.
مهمتر اینکه سورسش در اختیارتونه و هر کمبودی تو کار بود خودتون میتونید برطرفش کنید. کلی نکته آموزشی هم داره. هر چی تو این چند روز تحقیق کردم همه توی این یوزر کنترل استفاده شدن.
هنوز یه نقص هایی داره. مثلا موقعیت نوار عنوان وسط چینه که ظرف یه دقیقه میتونید امکان تراز به چپ و راست رو هم بش اضافه کنیم.

قبلا هم دیده بودم. نگید تکراریه. ولی این یکی هم سورسه هم هر سؤالی راجع به کد داشتید میتونم جواب بدم.
حاشیه کافیه. اصل مطلب ...
چیکار کنیم که مثل PictureBox وقتی ScaleMode عوض میشه اندازه آبجکت هایی که روی یوزرکنترل قرار دادیم برحسب واحد جدید اندازه گیری بشن؟
من کلی کد برا تنظیم آبجکت ها روی فرم نوشتم که بر حسب پیکسل هستند.
حالا میخوام از فرم به یوزرکنترل هجرت کنم.

کسی که بتونه این سؤال رو جواب بده کمک بزرگی کرده.

راستی حتما نظرتون رو راجع بهش بگید.

با تشکر


فایل‌(های) پیوست شده
.rar   MMZ_Form.rar (اندازه: 8.98 KB / تعداد دفعات دریافت: 124)


۲۳-مهر-۱۳۸۷, ۰۱:۴۲:۰۸
ارسال‌ها
پاسخ
تشکر شده توسط : Di Di, mbza11, alirezalahij, Dr.Bronx, nowar1352, mahdi321
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #2
RE: یه یوزر کنترل واقعا توپ
من برا گرفتن فرم والد از ParentControls(0) استفاده مي کردم که باعث ميشد بعضي وقتا خطا بده و برا گرفتن مختصات از GetWindowPlacement و براي اعمال مختصات از SetWindowPos استفاده مي کردم که همه اينا نياز به hWnd داشتند.
بعد فهميدم که ميشه مستقيماً با خصوصيات ParentControls(0) کار کرد و کد رو اصلاح کردم. اما همچنان وقتي که به عبارت ParentControls(0) مي رسيدم خطا ميداد و از برنامه خارج شد.
در نهايت فهميدم که فرم والد اينه: UserControl.Parent و مسئله اصلا پيچيده نيست.
برا پيدا کردن UserControl روي فرم والد هم ميشه از کد زير استفاده کرد:
کد:
Dim C As Control
For Each C In Parent.Controls
    If C.Name = Ambient.DisplayName Then Exit For
Next
به همين سادگي به همين خوشمزگي.
با دونستن اين مسائل، ميشه يه Label درست کرد که مثل Label هاي خود مايکروسافت، وقتي ترازش راست چين باشه، بتونه خاصيت Left خودش رو روي فرم والد تغيير بده.

امکانات لازم رو به يوزرکنترل MMZ_TitleBar اضافه کردم:
قابليت اينکه حاشيه يوزرکنترل Resizable يا Fixed باشد.
امکان نمايش يا عدم نمايش و فعال يا غيرفعال کردن دکمه هاي Close, Maximize, Minimize و نمايش دکمه هاي اضافي در نوارعنوان تا 5 دکمه
تغيير Caption و TooltipText دکمه هاي مذکور
تنظيم موقعيت ControlBox (مجموعه دکمه هاي بالا) در چپ يا راست
تراز متن نوار عنوان در چپ، راست يا وسط و تنظيم RightToLeft براي نمايش بهتر متن فارسي
تعيين عرض دکمه هاي ControlBox و ارتفاع کل نوار عنوان
فونت ControlBox و فونت TitleBar بصورت جداگانه
تنظيم رنگ ها شامل رنگ زمينه با دورنگ بصورت Gradient و رنگ خطوط حاشيه و رنگ زمينه و رنگ متن دکمه ها در دوحالت عادي و زمان قرار گرفتن ماوس روي دکمه.
محدوديت هاي استفاده از اين UserControl به شرح زیر:
BorderStyle فرم والد بايد None باشد.
براي شروع کار بايد متد GetOwner را فراخواني کرد.
ScaleMode فرم والد به vbPixels تغيير مي کند.

کامل بود؟

نه! هنوز بايد روي رويدادهاش کار کنم. رويداد ResizeEnd تو حرکات سريع ماوس کم مياره.

نکته: چند وقت پيش راجع به ToolboxBitmap بحث بود. دوستان گفتند که ابعادش بايد 16 در 15 باشه ولي نگفته بودن که بايد بيتمپ 256 رنگ باشه. اگه بيتمپ 24 بيت استفاده کنيد خودش رنگها رو دستکاري مي کنه و عکستون توي نوار ابزار يه جور ديگه ظاهر ميشه.


فایل‌(های) پیوست شده
.zip   MMZ_Form.zip (اندازه: 15.23 KB / تعداد دفعات دریافت: 136)


(آخرین ویرایش در این ارسال: ۲۴-مهر-۱۳۸۷, ۰۷:۵۰:۴۹، توسط mojtabamalaekeh.)
۲۴-مهر-۱۳۸۷, ۰۷:۴۸:۵۵
ارسال‌ها
پاسخ
تشکر شده توسط : mahdi321
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #3
RE: یه یوزر کنترل واقعا توپ
اون دفعه گفتم که فرم والد رو میشه از خاصیت Parent بدست آورد و برای پیدا کردن UserControl روی فرم والد باید از یه حلقه For استفاده کرد.
بازم یه مطلب دیگه متوجه شدم: برای بدست آوردن UserControl روی فرم والد کافیه از خاصیت Extender استفاده کنیم.
پس شد Parent و Extender
نقل قول: هنوز بايد روي رويدادهاش کار کنم. رويداد ResizeEnd تو حرکات سريع ماوس کم مياره.
ردیف شد. با خیال راحت میتونید توی رویداد ResizeEnd کدنویسی کنید.
نقل قول: با دونستن اين مسائل، ميشه يه Label درست کرد که مثل Label هاي خود مايکروسافت، وقتي ترازش راست چين باشه، بتونه خاصيت Left خودش رو روي فرم والد تغيير بده.
Label هم آماده شد.
پس فایل ضمیمه علاوه بر TtitleBar تکمیل شده، حاوی یه Label هم هست.
نقل قول: چیکار کنیم که مثل PictureBox وقتی ScaleMode عوض میشه اندازه آبجکت هایی که روی یوزرکنترل قرار دادیم برحسب واحد جدید اندازه گیری بشن؟
ظاهراً باید میونبر بزنیم و یه PictureBox روی یوزرکنترلمون بذاریم و همه چی رو توی اون PictureBox قرار بدیم.
یه سؤال داشتم که یادم رفت ولی سؤالات تمومی ندارند. یکی دیگه می پرسم:
یه SpinButton درست کردم که برای اتصالش به جعبه متن باید از یه خط کد استفاده بشه:
کد:
Set SpinButton1.OBJ = Text1
میشه مثل DateGride که لیست شیءهای Data ی روی فرم رو نشون میده، من هم برا خاصیت OBJ لیست TextBox های روی فرم رو داشته باشم؟
پس اینو هم به فایل ضمیمه اضافه می کنم.
یه سؤال دیگه:
فرض کنید میخوایم یه جعبه متن با یوزرکنترل درست کنیم. چطور تعیین کنیم زمانی که خاصیت Text به صورت Multiline میشه داده ها توی چند خط از کابر گرفته بشن.


فایل‌(های) پیوست شده
.zip   MMZ_TitleBar+Shadow+Spin.zip (اندازه: 23.72 KB / تعداد دفعات دریافت: 85)


۲۵-مهر-۱۳۸۷, ۰۸:۴۲:۲۲
ارسال‌ها
پاسخ
تشکر شده توسط : alirezalahij, mahdi321
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #4
RE: یه یوزر کنترل واقعا توپ
تو رویداد UserControl_MouseMove بعد از تعریف متغیرها 10 خط پایین تر از ElseIf استفاده شده. اون خط دهم باید اصلاح بشه تا زمان Maximize بود درست کار کنه.
قبل از اصلاح:
کد:
ElseIf Button = 1 And HasOwner Then
بعد از اصلاح:
کد:
ElseIf Button = 1 And HasOwner And Not Maximized Then
از اینجور خطاها اگه دیدین لطفا بگین تا اصلاح کنم.
از دوستانی که دانلود کردن تشکر می کنم.

راستی کسی نیست حداقل یدونه از سؤال های بالا رو جواب بده؟

شماهایی که از XP Manifest Theme تو برنامه هاتون استفاده می کنید، بدانید و آگاه باشید که خاصیت ForeColor کنترل های Option Button یا همون دکمه رادیویی رو نمیشه تغییر داد و همیشه رنگ متنش سیاهه. تو برنامه هایی که امکان تعویض رنگ ها رو به کاربر میدین و اتفاقاً از Option Button هم استفاده کردید نباید از XP Manifest استفاده کنید. در نتیجه TextBox ها و ComboBox هامون رو خودمون باید با یوزرکنترل نویسی درست کنیم چون بدون Theme ویندوز XP خیلی بی ریخت هستند..


(آخرین ویرایش در این ارسال: ۲۶-مهر-۱۳۸۷, ۰۴:۳۶:۲۰، توسط mojtabamalaekeh.)
۲۶-مهر-۱۳۸۷, ۰۴:۱۶:۲۴
ارسال‌ها
پاسخ
تشکر شده توسط : alirezalahij, mahdi321


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [سوال] کنترل مقدار نوع داده که از تکس باکس فرم دریافت می شود eppagh 2 3,307 ۰۲-مرداد-۱۳۹۴, ۱۰:۵۴:۰۰
آخرین ارسال: Ghoghnus
Question [سوال] کنترل پنجره Save as اکسل eppagh 3 2,806 ۱۳-مرداد-۱۳۹۳, ۱۴:۰۶:۰۰
آخرین ارسال: babyy
Exclamation کنترل برنامه ها.... dreamvbfox 9 8,525 ۲۸-مهر-۱۳۹۲, ۱۵:۴۵:۱۵
آخرین ارسال: setroyd
  سوال در مورد کنترل Webbrowser Cr4ShD4Y 2 3,011 ۱۶-تير-۱۳۹۲, ۱۱:۴۱:۰۹
آخرین ارسال: kimiafars
  انتخاب چند گزینه در file name در کنترل comman dialog hamed_Arfaee 2 3,059 ۲۹-خرداد-۱۳۹۲, ۱۰:۳۷:۳۰
آخرین ارسال: hamed_Arfaee
  [سوال] مشکل در ورود به روم با کنترل ymsg emsoft 0 2,151 ۲۸-تير-۱۳۹۰, ۱۷:۰۸:۱۲
آخرین ارسال: emsoft
Question [سوال] گرفتن هندل یک کنترل برنامه خارجی HamedFaa 2 3,287 ۱۱-اردیبهشت-۱۳۹۰, ۱۲:۲۹:۰۳
آخرین ارسال: HamedFaa
  برنامه نویسی کنترل microsoft comm control 6.0 miladseven 0 2,443 ۰۸-اسفند-۱۳۸۹, ۲۲:۰۳:۵۵
آخرین ارسال: miladseven
  کنترل مقدار ارسال و دریافت داده از اینترنت vz67 0 2,376 ۱۴-بهمن-۱۳۸۹, ۱۶:۴۹:۲۲
آخرین ارسال: vz67
  کنترل وینسک kimiafars 2 3,200 ۰۸-شهریور-۱۳۸۹, ۰۹:۲۱:۳۰
آخرین ارسال: kimiafars

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS