سلام دوباره به همه
میخواستم ببینم برای تغییر رنگ یه قسمت از متن هم دستوری وجود داره؟
البته دستور system("color") رو بلدم , میخوام فقط رنگ یه قسمت تغییر کنه , نه تمام متن
سلام دوباره به همه
میخواستم ببینم برای تغییر رنگ یه قسمت از متن هم دستوری وجود داره؟
البته دستور system("color") رو بلدم , میخوام فقط رنگ یه قسمت تغییر کنه , نه تمام متن
شما اگر از system استفاده کنید دریافت رنگ قبلی سخت می شود، پس از توابع GetConsoleScreenBufferInfo برای دریافت اطلاعات رنگ و SetConsoleTextAttribute برای وارد کردن آن ها استفاده کنید:
HANDLE hStdout, hStdin;
CONSOLE_SCREEN_BUFFER_INFO scrInfo;
hStdin = GetStdHandle(STD_INPUT_HANDLE);
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdout, &scrInfo)) ;
WORD OldColor = scrInfo.wAttributes; // get current color
SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_INTENSITY);
//--
// use color here
//--
SetConsoleTextAttribute(hStdout, wOldColorAttrs);
- در پایان هر وقت خواستید به رنگ قبلی برگدانید همان خط آخر را فراخوانی می کنیم.
- در تابع سایر فلگ ها مانند FOREGROUND_GREEN و .. غیره وجود دارد.پس اگر می خواهید یک تست انجام دهید تا تمام رنگ ها را مشاهده کنید، در پارامتر دوم SetConsoleTextAttribute فقط عدد 1 تا 16 را فراخوانی کنید و یک نوشته بنویسید تا 16 رنگ را ببینید.
- ضمنا دقت کنید، هر رنگ دلخواه امکان پذیر نیست، تنها 16 رنگ.
ببخشید می خواستم ببینم هیچ راهی نداره که تو کنسول بیشتر از 16 رنگ استفاده کرد.تو قسمت properties کنسول میشه color value رو دستی تغییر داد می خواستم ببینم با کد هم میشه تغییرشون داد یا نه؟
من براي اين كار از آدرس هاي حافظ استفاده مي كنم.
مد متن در حافظه از آدرس b8000000 شروع مي شه كه يك بايت براي كاراكتر و يك بايت برايرنگ اونه
با يك تابع مي توني متن مورد نظرتوپيدا كني و با تابعي ديگه رنگ اونو عوض كني كه هردوش سادن.
واسه اين كار نياز به يه اشاره گر به حافظه داري كه از نوع كاراكتر بايد باشه وبه صورت اوليه هم بهش آدرس بدي
register far char *p =(char far *)0xb8000000
اين به اولين كاراكتر سمت چپ بالا اشاره مي كنه .آدرس بعدي يعني b8000001 رنگه اين كاراكتره
همين طور تا آخرين كاراكتر موجوددر صفحه
توجه كنيدكه هر صفحه 80*20