Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

تلوين المخرجات في ++C

  • طرق التلوين في C++
  • التلوين بواسطة الحزمة stdlib
  • التلوين بواسطة الحزمة windows
  • تكوين الألوان في C++

طرق التلوين في C++

بدايةً تلوين المخرجات يُقصد به تلوين النص الذي يظهر في موّجه الأوامر ( CMD ) عند تشغيل البرامج التي تعتبر Console Application.

لتحديد لون النص يمكنك إعتماد إحدى الحزمات التالية:

  • الحزمة stdlib التي من خلالها تتعامل مباشرةً مع موّجه الأوامر بالأوامر التي يفهمها هو و هذه الحزمة تعتبر محدودة في الإمكانيات و لكنها أسهل في الإستخدام.
  • الحزمة windows و التي توفّر لك المزيد من الإمكانيات و لكن التعامل معها أصعب بقليل من سابقتها.

رموز الألوان في موجه الأوامر

في الصورة التالية يظهر لك جميع رموز الألوان التي يمكنك استخدامها فمثلاً اللون الأسود نحصل عليه بواسطة الرقم 0، و اللون الأزرق نحصل عليه بواسطة الرقم 1 و هكذا إلى أن نصل إلى الحرف F الذي يعطينا لون أبيض فاتح.



التلوين بواسطة الحزمة stdlib

هذه الحزمة توفر لك الدالة system() و التي من خلالها يمكنك تمرير أوامر التلوين لموّجه الأوامر.


في المثال التالي قمنا باستخدام الدالة system() و تمرير النص "color 2" حتى يفهم موّجه الأوامر أننا نريد تلوين النص باللون الأخضر ( Green ).

المثال الأول

#include<stdio.h>
#include<stdlib.h>
int main()
{
system("color 2");
printf("Text color is set to green.");
return 0;
}
#include<stdio.h> #include<stdlib.h> int main() { system("color 2"); printf("Text color is set to green."); return 0; }

نتيجة الكود:


ملاحظة

إذا كتبت رقمين قرب بعضهما سيكون الرقم على اليمين لتلوين الكتابة و الرقم على اليسار لتلوين الخلفية.


في المثال التالي قمنا باستخدام الدالة system() و تمرير النص "color 21" حتى يفهم موّجه الأوامر أننا نريد تلوين الخلفية بالأخضر ( Green ) و النص بالأزرق ( Blue ).

المثال الثاني

#include<stdio.h>
#include<stdlib.h>
int main()
{
system("color 21");
printf("Background color is set to green and text color is set to blue.");
return 0;
}
#include<stdio.h> #include<stdlib.h> int main() { system("color 21"); printf("Background color is set to green and text color is set to blue."); return 0; }

نتيجة الكود:


في المثال التالي قمنا باستخدام الدالة system() و تمرير النص "color 06" حتى يفهم موّجه الأوامر أننا نريد تلوين الخلفية بالأسود ( Black ) و النص بالأصفر ( Yellow ).

المثال الثالث

#include<stdio.h>
#include<stdlib.h>
int main()
{
system("color 06");
printf("Background color is set to black and text color is set to yellow.");
return 0;
}
#include<stdio.h> #include<stdlib.h> int main() { system("color 06"); printf("Background color is set to black and text color is set to yellow."); return 0; }

نتيجة الكود:


في المثال التالي قمنا باستخدام الدالة system() و تمرير النص "color F0" حتى يفهم موّجه الأوامر أننا نريد تلوين الخلفية بالأبيض الخافت ( Bright White ) و النص بالأسود ( Black ).

المثال الرابع

#include<stdio.h>
#include<stdlib.h>
int main()
{
system("color F0");
printf("Background color is set to bright white and text color is set to black.");
return 0;
}
#include<stdio.h> #include<stdlib.h> int main() { system("color F0"); printf("Background color is set to bright white and text color is set to black."); return 0; }

نتيجة الكود:



التلوين بواسطة الحزمة windows

هذه الحزمة توفر لك العديد من الدوال التي يمكنك استخدامها للتلوين و منها:

  • SetConsoleTextAttribute() لتحديد لون النص التالي الذي سيتم طباعته بعدها بالإضافة لإمكانية تحديد لون خلفيته أيضاً.
  • FillConsoleOutputAttribute() لتلوين خلفية موجه الأوامر.
  • WriteConsoleOutputAttribute() لتحديد لون النص الذي سيتم طباعته بعدها بالإضافة لإمكانية تحديد لون خلفيته أيضاً و هذه الدالة يمكنها تلوين أي جزئية تم طباعتها حتى لو كان قد سبق و تم تلوينها.

بالإضافة إلى أن هذه الحزمة توفر مجموعة ثوابت معرّفة مسبقاً يمكن من خلالها تحديد الألوان.


في المثال التالي قمنا باستخدام الدالة SetConsoleTextAttribute() و تمرير الثابت FOREGROUND_GREEN حتى يفهم موّجه الأوامر أننا نريد تلوين النص باللون الأخضر.

المثال الأول

#include <iostream>
#include <windows.h>
int main()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, FOREGROUND_GREEN);
printf("Text color is set to green.");
return 0;
}
#include <iostream> #include <windows.h> int main() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(handle, FOREGROUND_GREEN); printf("Text color is set to green."); return 0; }

نتيجة الكود:


في المثال التالي قمنا باستخدام الدالة SetConsoleTextAttribute() و تمرير الثابت BACKGROUND_GREEN حتى يفهم موّجه الأوامر أننا نريد تلوين خلفية النص باللون الأخضر.

المثال الثاني

#include <iostream>
#include <windows.h>
int main()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, BACKGROUND_GREEN);
printf("Text color is set to green.");
return 0;
}
#include <iostream> #include <windows.h> int main() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(handle, BACKGROUND_GREEN); printf("Text color is set to green."); return 0; }

نتيجة الكود:


في المثال التالي قمنا باستخدام الدالة SetConsoleTextAttribute() و تمرير الثابتين BACKGROUND_GREEN و FOREGROUND_BLUE حتى يفهم موّجه الأوامر أننا نريد تلوين النص بالأزرق و خلفيته بالأخضر.

المثال الثالث

#include <iostream>
#include <windows.h>
int main()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, BACKGROUND_GREEN | FOREGROUND_BLUE);
printf("Text color is set to green.");
return 0;
}
#include <iostream> #include <windows.h> int main() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(handle, BACKGROUND_GREEN | FOREGROUND_BLUE); printf("Text color is set to green."); return 0; }

نتيجة الكود:


في المثال التالي قمنا باستخدام الدالة FillConsoleOutputAttribute() بهدف تلوين كامل شاشة موجّه الأوامر باللون الأزرق و لون الخط جعلناه بالأبيض حيث دمجنا اللون الأحمر مع الأخضر مع الأزرق حتى حصلنا عليه.

المثال الرابع

#include <iostream>;
#include <windows.h>;
int main()
{
HANDLE hCon;
CONSOLE_SCREEN_BUFFER_INFO csbiScreenInfo;
COORD coordStart = { 0, 0 };
DWORD dwNumWritten = 0;
DWORD dwScrSize;
WORD wAttributes = BACKGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
// إذا كان غير ممكن الحصول على حجم و موقع موجه الأوامر فإنه لا يجب الإكمال بعد هذه الجملة الشرطية
if (!GetConsoleScreenBufferInfo(hCon, &csbiScreenInfo))
{
// هنا يمكن معالجة هذه المشكلة بدل الإكتفاء بعدم المتابعة
return 1;
}
// هنا سيتم حساب عدد البكسلات في الصورة
dwScrSize = csbiScreenInfo.dwMaximumWindowSize.X * csbiScreenInfo.dwMaximumWindowSize.Y;
// هنا سيتم تلوين خلفية الشاشة بحسب الخصائص التي تم تحديدها سابقاً في المتغيرات
FillConsoleOutputAttribute(hCon, wAttributes, dwScrSize, coordStart, &dwNumWritten);
// هنا سيتم إعطاء هذه الخصائص أيضاً للمحتوى الجديد الذي يتم إضافته في النافذة
SetConsoleTextAttribute(hCon, wAttributes);
return 0;
}
#include <iostream>; #include <windows.h>; int main() { HANDLE hCon; CONSOLE_SCREEN_BUFFER_INFO csbiScreenInfo; COORD coordStart = { 0, 0 }; DWORD dwNumWritten = 0; DWORD dwScrSize; WORD wAttributes = BACKGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED; hCon = GetStdHandle(STD_OUTPUT_HANDLE); // إذا كان غير ممكن الحصول على حجم و موقع موجه الأوامر فإنه لا يجب الإكمال بعد هذه الجملة الشرطية if (!GetConsoleScreenBufferInfo(hCon, &csbiScreenInfo)) { // هنا يمكن معالجة هذه المشكلة بدل الإكتفاء بعدم المتابعة return 1; } // هنا سيتم حساب عدد البكسلات في الصورة dwScrSize = csbiScreenInfo.dwMaximumWindowSize.X * csbiScreenInfo.dwMaximumWindowSize.Y; // هنا سيتم تلوين خلفية الشاشة بحسب الخصائص التي تم تحديدها سابقاً في المتغيرات FillConsoleOutputAttribute(hCon, wAttributes, dwScrSize, coordStart, &dwNumWritten); // هنا سيتم إعطاء هذه الخصائص أيضاً للمحتوى الجديد الذي يتم إضافته في النافذة SetConsoleTextAttribute(hCon, wAttributes); return 0; }

نتيجة الكود:



تكوين الألوان في C++

الحزمة windows توّفر لك ثلاث ألوان رئيسية هي الأحمر، الأخضر و الأزرق على شكل ثوابت كالتالي:

  • BACKGROUND_RED - BACKGROUND_GREEN - BACKGROUND_BLUE لتلوين الخلفية.
  • FOREGROUND_RED - FOREGROUND_GREEN - FOREGROUND_BLUE لتلوين النص.

الثوابت التي تُستخدم للنص أو للخلفية يمكنك استخدامها سويةً حتى تدمج الألوان و تكوّن ألوان جديدة.

اللون الأصفر:

SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_GREEN);
SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_GREEN);

اللون اللبني:

SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN);
SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN);

اللون البنفسجي:

SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED);
SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED);

اللون الأبيض:

SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);

اللون الرمادي الغامق:

SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY);
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY);

اللون الرمادي الفاتح:

SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);

معلومة إضافية

الكلمة INTENSITY تستخدم لتفتيح الألوان لأنك إذا كتبت إسم اللون بدونها يظهر غامق

آخر تحديث في 06-01-2024

الكاتب

كيرلس اسعيد

لا يوجد معلومات متاحة حول الكاتب.

تعليقات

لا يوجد أي تعليق بعد

أضف تعليق

يجب تسجيل الدخول حتى تتمكن من إضافة تعليق أو رد.