ورود

View Full Version : سوال: تغییر رنگ متن یا کادر- MSGBOX-توسط ماژول پیوست



narpco
یک شنبه 13 مهر 1399, 10:51 صبح
سلام بر دوستان
چند وقتی بود ذهنم مشغول این قضیه بود که چطور میتوان رنگ کادر پیام –msgbox- وی بی- رو یا رنگ متنش رو عوض کرد که زیباتر باشه از این حالت سیاه و سفید دربیاد

قطعه کد کوتاهی -رو از ادرس زیر پیدا کردم

(https://wellsr.com/vba/2017/excel/change-vba-msgbox-text-color-with-setsyscolors/)https://wellsr.com/vba/2017/excel/change-vba-msgbox-text-color-with-setsyscolors/ (https://wellsr.com/vba/2017/excel/change-vba-msgbox-text-color-with-setsyscolors/)


(https://wellsr.com/vba/2017/excel/change-vba-msgbox-text-color-with-setsyscolors/)یه ماژول ساختم و کد رو داخلش قرار دادم
و از طریق یک دکمه مازول رو فراخوانی –call-کردم و نتیجه داد و رنگ متن msgbox ها تغییر میکنه
من خیلی نتونستم کد رو تحلیل کنم که ببینیم چطور میشه ازش استفاده کرد
ممنون میشم دوستان یه نگاهی بیاندازند ببینم چطور میتونیم در msgbox های برنامه هامون ازش استفاده کنیم
یا اگر پیشنهاد دیگه ای هست برای تغییر رنگ متن یا کادر msgbox ها ممنونم میشم با من به اشتراک بزارید
با سپاس

لینک فایل نمونه
http://s15.picofile.com/file/8409923842/msgbox_color.rar.html

محمد رضا بهبودی
یک شنبه 13 مهر 1399, 13:19 عصر
سلام
جالب بود ممنون

eb_1345
یک شنبه 13 مهر 1399, 13:19 عصر
سلام
این تغییر رنگ متن از طریق API و توابع ویندوز صورت می گیرد.
در ماژول فوق ابتدا متغییری بنام defaultColour از نوع long تعریف شده . در خط بعدی رنگ متن پیشفرض ویندوز ( همان رنگی که در حال حاضر در قسمت های مختلف ویندور در حال مشاهده و کار کردن با اون هستید) در متغیر فوق ذخیره میشود . در خط بعدی رنگ متن سیستمی دلخواه رو برای پنجره مورد نظر ( در اینجا مسیج باکس) انتخاب شده ( در اینجا برای پیغام اول رنگ قرمز و پیغام دوم سبز انتخاب شده) فراخوانی میشود . در خط بعدی فراخوانی پنجره مورد نظر( در اینجا مسیج باکس) و در در خط آخر برگرداندن رنگ متن به حالت پیشفرض و اولیه .
اگر خط آخر درج نشود رنگ متن بخش های مختلف سیستم به رنگ انتخاب شده تبدیل میشود . بنابراین لازم است پس از تغییر رنگ پنجره مورد نظرمون رنگ سیستم دوباره به همان رنگ اولیه تبدیل شود.
طریقه استفاده هم به همون صورت معمولی است که در برنامه ها از مسیج باکس استفاده می کنید تنها چیزی که باید مد نظر قرار داد همان موردهائی که در بالا اشاره کردم . یعنی ذخیره رنگ پیشفرض در یک متغیر . انتخاب رنگ مورد نظر و در پایان برگرداندن رنگ به حالت پیشفرض
به کدهای زیر توجه بفرما:


Dim defaultColour As Long
defaultColour = GetSysColor(COLOR_WINDOWTEXT)
SetSysColors CHANGE_INDEX, COLOR_WINDOWTEXT, vbRed
If MsgBox("ÂíÇ ãØãÆä Èå ÍÐÝ ˜ÑÏä јæÑÏ ÌÇÑí ãí ÈÇÔíÏ¿", vbQuestion + vbMsgBoxRight + vbDefaultButton2 + vbYesNo, "ÍÐÝ ˜ÑÏä") = vbYes Then
MsgBox "OK"
End If
SetSysColors CHANGE_INDEX, COLOR_WINDOWTEXT, defaultColour


می بینید که این تغییر رنگ هیچ اثری بر حالت استفاده از مسیج باکس ندارد .
با استفاده از این کدها دیگر نیازی به ماژول MsgBoxColorDemo نخواهید داشت و میتوانید از قسمت ماژول های عمومی آن را حذف کنید.

در پایان پیشنهاد بنده اینست که اگر میخواهید یک مسیج باکس زیبا و جذاب داشته باشی و در برنامه هات از آن استفاده کنی اقدام به ساخت یک مسیج باکس سفارشی بکنید

narpco
یک شنبه 13 مهر 1399, 14:24 عصر
سلام مرسی از توضیحات
بله من هم در برنامه از باکس پیام سفارشی سازی شده استفاده می کنم این مطلب برام بسیار جالب بود
کدی که شما نوشتین رو مثلا باید در یک دکمه بزاریم و بعد اجرا کنیم
امیدوارم درست فهمیده باشم ........این خطا رو میبینیم ممنون میشم راهنمایی بفرمایید

تو این خط خطا میده
defaultColour = GetSysColor(COLOR_WINDOWTEXT)

GetSysColor........

eb_1345
یک شنبه 13 مهر 1399, 14:30 عصر
کدی که شما نوشتین رو مثلا باید در یک دکمه بزاریم و بعد اجرا کنیم
امیدوارم درست فهمیده باشم ........این خطا رو میبینیم ممنون میشم راهنمایی بفرمایید

بله درسته !



تو این خط خطا میده
defaultColour = GetSysColor(COLOR_WINDOWTEXT)

GetSysColor........

نباید خطا بده
GetSysColor........ چیه زیر این کد ؟

eb_1345
یک شنبه 13 مهر 1399, 14:33 عصر
نمونه اصلاح شده خودت رو بررسی کن!

narpco
یک شنبه 13 مهر 1399, 14:37 عصر
خیلی جالب شد ..بسیار ممنون .....