PDA

View Full Version : سوال: تغییر رنگ یه قسمت متن



rezabnm
یک شنبه 20 اردیبهشت 1388, 13:15 عصر
سلام دوباره به همه
میخواستم ببینم برای تغییر رنگ یه قسمت از متن هم دستوری وجود داره؟
البته دستور system("color") رو بلدم , میخوام فقط رنگ یه قسمت تغییر کنه , نه تمام متن

Nima_NF
یک شنبه 20 اردیبهشت 1388, 17:33 عصر
شما اگر از 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 رنگ.

zhn_1010
یک شنبه 28 تیر 1388, 02:15 صبح
ببخشید می خواستم ببینم هیچ راهی نداره که تو کنسول بیشتر از 16 رنگ استفاده کرد.تو قسمت properties کنسول میشه color value رو دستی تغییر داد می خواستم ببینم با کد هم میشه تغییرشون داد یا نه؟

Vahoomana
سه شنبه 30 تیر 1388, 10:08 صبح
من براي اين كار از آدرس هاي حافظ استفاده مي كنم.
مد متن در حافظه از آدرس b8000000 شروع مي شه كه يك بايت براي كاراكتر و يك بايت برايرنگ اونه
با يك تابع مي توني متن مورد نظرتوپيدا كني و با تابعي ديگه رنگ اونو عوض كني كه هردوش سادن.
واسه اين كار نياز به يه اشاره گر به حافظه داري كه از نوع كاراكتر بايد باشه وبه صورت اوليه هم بهش آدرس بدي
register far char *p =(char far *)0xb8000000
اين به اولين كاراكتر سمت چپ بالا اشاره مي كنه .آدرس بعدي يعني b8000001 رنگه اين كاراكتره
همين طور تا آخرين كاراكتر موجوددر صفحه
توجه كنيدكه هر صفحه 80*20