الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف اكتب بالعربي على الكونسول ؟؟

بدأه TheBigBoss في 23 يوليو 2010 · 4 رد · 1,171 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أريد ان أكتب بالعربي

يعني مثلا :

cout<<"السلام عليكم";

أرجوا المساعدة

#2

السلام عليكم و رحمة الله و بركاته

إليك الكود:

#include<iostream>
using namespace std;
#include<windows.h>
#ifdef WIN32
#endif
#define _WIN32_WINNT_WIN7 0x0601 
typedef struct _CONSOLE_FONT_INFOEX
{
  ULONG cbSize;
  DWORD nFont;
  COORD dwFontSize;
  UINT  FontFamily;
  UINT  FontWeight;
  WCHAR FaceName[LF_FACESIZE];
}CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
PCONSOLE_FONT_INFOEX testFont;
int main()
{
	 HANDLE hstdo;
	 hstdo = GetStdHandle(STD_OUTPUT_HANDLE);
	 SetConsoleTextAttribute(hstdo, FOREGROUND_GREEN|FOREGROUND_INTENSITY|BACKGROUND_BLUE);
	 HANDLE OutputH;
     OutputH = GetStdHandle(STD_OUTPUT_HANDLE);
     testFont->dwFontSize.X = 10;
     testFont->dwFontSize.Y = 20;
     SetCurrentConsoleFontEx(OutputH, TRUE, testFont);
	 UINT  a=864;
	 if ((SetConsoleOutputCP(a)==0))
     cout<<"CP not changed."<<endl;
	 else
	 cout<<"CP changed to أحمد المتألق"<<a<<endl;
	 cout<< GetConsoleOutputCP() <<"\n";
     system("PAUSE");
     return 0;
}

الكود يقوم بالآتي:

نغير لون النص.

تغير حجم النص.

تغير ترميز النص.

تغير خط الكتابة.

لماذا تم تضمين هذا السطر:

#define _WIN32_WINNT 0x0601

يستخدم هذا السطر للتعرف علي نظام التشغيل الخاص بك وضم بعض الملفات الخاصه به و لمزيد من التفاصيل يرجى زياره الرابط التالي:

http://msdn.microsoft.com/en-us/library/aa383745%28VS.85%29.aspx

http://msdn.microsoft.com/en-us/library/ff556164.aspx

بالنسبة للدالة SetCurrentConsoleFontEx

http://msdn.microsoft.com/en-us/library/ms686200%28VS.85%29.aspx

قد لا أجد الوقت الكافي لمتابعة الموصوع و لكن الإخوة الكرام لن يقصروا معك :)

أطيب الأمنيات.

3
#3

شكرا جزيلا و لكن هناك مشكلتين

الأولى : بيئة العمل لدي لا تتدعم العربي Dev - C++

الثانية : 28 `SetCurrentConsoleFontEx' undeclared (first use this function)

مع اني تضمنت windows.h و ايضا Wincon.h

#4

SetCurrentConsoleFontEx موجودة في الانظمة windows vista فما فوق فقط.

#5

كل ما تحتاج لفعله هو مثلما قال الأخوه و هو تغيير الـ Code Page الخاصه بالكتابه داخل Output Stream (و هى نفسها المستخدمه فى رسم الحروف داخل شاشة الـ Console) بإستخدام الداله.

لاحظ أن شاشة الـ Console لها خطوط معينه و ليس كل الخطوط ما تكون متاحه للإستخدام لذا وجب عليك الحذر فى هذه النقطه.

الخطوط المتحه بشكل إفتراضى داخل ويندوز (ما قبل vista) للإستخدام من خلال الـ Console لن تسمح لك بالكتابه بأى من اللغات خارج نطاق الخطين الوحيدين المتاحين بنظام التشغيل.

بالنسبه للداله SetCurrentConsoleFontEx هى متاحه داخل الخدمات الخاصه بالكونسول بويندوز و لكن لم يتم تضمين دوال API لها (و غيرها) إلا بدءا من فستا و يمكنك كتابة هذه الدوال من جديد فقط إذا عرفت رقم الخدمه الخاصه بها و هم كالتالى:

typedef enum _CONSOLE_API_NUMBER {
    ConsolepOpenConsole = CONSRV_FIRST_API_NUMBER,
    ConsolepGetConsoleInput,
    ConsolepWriteConsoleInput,
    ConsolepReadConsoleOutput,
    ConsolepWriteConsoleOutput,
    ConsolepReadConsoleOutputString,
    ConsolepWriteConsoleOutputString,
    ConsolepFillConsoleOutput,
    ConsolepGetMode,
    ConsolepGetNumberOfFonts,
    ConsolepGetNumberOfInputEvents,
    ConsolepGetScreenBufferInfo,
    ConsolepGetCursorInfo,
    ConsolepGetMouseInfo,
    ConsolepGetFontInfo,
    ConsolepGetFontSize,
    ConsolepGetCurrentFont,
    ConsolepSetMode,
    ConsolepSetActiveScreenBuffer,
    ConsolepFlushInputBuffer,
    ConsolepGetLargestWindowSize,
    ConsolepSetScreenBufferSize,
    ConsolepSetCursorPosition,
    ConsolepSetCursorInfo,
    ConsolepSetWindowInfo,
    ConsolepScrollScreenBuffer,
    ConsolepSetTextAttribute,
    ConsolepSetFont,
    ConsolepSetIcon,
    ConsolepReadConsole,
    ConsolepWriteConsole,
    ConsolepDupHandle,
    ConsolepGetHandleInformation,
    ConsolepSetHandleInformation,
    ConsolepCloseHandle,
    ConsolepVerifyIoHandle,
    ConsolepAlloc,
    ConsolepFree,
    ConsolepGetTitle,
    ConsolepSetTitle,
    ConsolepCreateScreenBuffer,
    ConsolepInvalidateBitmapRect,
    ConsolepVDMOperation,
    ConsolepSetCursor,
    ConsolepShowCursor,
    ConsolepMenuControl,
    ConsolepSetPalette,
    ConsolepSetDisplayMode,
    ConsolepRegisterVDM,
    ConsolepGetHardwareState,
    ConsolepSetHardwareState,
    ConsolepGetDisplayMode,
    ConsolepAddAlias,
    ConsolepGetAlias,
    ConsolepGetAliasesLength,
    ConsolepGetAliasExesLength,
    ConsolepGetAliases,
    ConsolepGetAliasExes,
    ConsolepExpungeCommandHistory,
    ConsolepSetNumberOfCommands,
    ConsolepGetCommandHistoryLength,
    ConsolepGetCommandHistory,
    ConsolepSetCommandHistoryMode,
    ConsolepGetCP,
    ConsolepSetCP,
    ConsolepSetKeyShortcuts,
    ConsolepSetMenuClose,
    ConsolepNotifyLastClose,
    ConsolepGenerateCtrlEvent,
    ConsolepGetKeyboardLayoutName,
    ConsolepGetConsoleWindow,
#if defined(FE_SB) // for Kernel32 Single Binary
    ConsolepCharType,
    ConsolepSetLocalEUDC,
    ConsolepSetCursorMode,
    ConsolepGetCursorMode,
    ConsolepRegisterOS2,
    ConsolepSetOS2OemFormat,
#if defined(FE_IME)
    ConsolepGetNlsMode,
    ConsolepSetNlsMode,
    ConsolepRegisterConsoleIME,
    ConsolepUnregisterConsoleIME,
#endif // FE_IME
#endif // FE_SB
    ConsolepGetLangId,
    ConsolepMaxApiNumber
} CONSOLE_API_NUMBER, *PCONSOLE_API_NUMBER;

كما ترى العديد من هذه الخدمات متاحه منذ منذ ويندوز 2000 و لكن لم يتم تضمين جزء منها إلا مع ويندوز xp و الأخر مع فستا و 7 و يوجد منهم ما لم يتم تضمينه بعد.

كل ما يهمنا الأن هو الخدمه ConsolepSetFont حيث هى المسئوله عن تحديد الخط المستخدم بشاشة الكونسول قم بالبحث عنها داخل Google و ستصل لنتيجه جيده إن شاء الله.

و الله ولي التوفيق

2

مدونتي: C++ Tips and Tricks

مواضيع مشابهة