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

[ تمت الإجابة ]كيفية اظهار اللغه العربيه فى Edit Control

مغلق
بدأه freesaif في 11 سبتمبر 2009 · 5 رد · 2,816 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

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

الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

اولا أنا سعيد لانضمامي الى هدا المنتدى و اسال الله جلى و على أن يوفقني الى أن افيد و استفيد

لدي مشروع شخصي هام، هدفه تطوير برنامج بسيط بلغة القرآن، بفظل الكتب اللتي قرآتها و حملتها من موضوع " كتب في البرمجة باستخدام Win32 API " و الانترنت، طورت البرنامج اللذي اريده و لكن واجهتني بعض الصعوبات فاتمنى أن تساعدوني في حلها و جزاكم الله خيرا

الخطوة الاولى هي فقط برمجة برنامج بلغة C باستخدام Win32-API و المترجم GCC، برنامج يشبه قارئ الاوامر مثل MSDOS، هدفي ليس MSDOS بل البرنامج اصلا بنوافد و ليس كونسول و لكن فقط يشبه MSDOS في عمله، مثال :

اكتب اسمك: محمد [ENTER]

اسمك هو محمد .

يعني برنامج يشبه الكونسول و لكنه بنوافد .

لتطبيق الخطوة الاولى استعملت EDIT_CONTROL و قمت لها بعمل WS_DISABLED لكي اقرئ ملامس لوحة المفاتيح، مثلا عندما اظغط على A يكتب البرنامج A في EDIT_CONTROL، و هكذا... لكن الحرف الثاني يكتب فوق الحرف الاول !

تنفيد البرنامج :

xconsol_1.JPG

ظغط على A

xconsol_2.JPG

ظغط على B

xconsol_3.JPG

ارجو المساعدة و جزاكم الله خيرا، و من كانت له فكره احسن كاستعمال STATIC_CONTROL انا مستعد للعمل فقط اتمنى التعاون و شكرا .

#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HBRUSH g_hbrBackground = NULL;
HWND hEdit;

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ){
switch(msg){

 case WM_CREATE:
  {

hEdit = CreateWindow("EDIT","",WS_VISIBLE|WS_CHILD|WS_BORDER|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE|ES_WANTRET
URN|ES_AUTOHSCROLL|ES_AUTOVSCROLL|WS_DISABLED,0,0,100,100,hwnd,(HMENU)1,NULL,NULL);

  }break;

 case WM_COMMAND:
  {

   case WM_KEYDOWN:
{
	 switch(wParam)
	 {
		 case 'A':
		  SendMessage(hEdit, WM_SETTEXT, 1, (LPARAM)(LPCTSTR)L"A");
		 break;

		 case 'B':
		  SendMessage(hEdit, WM_SETTEXT, 1, (LPARAM)(LPCTSTR)L"B");
		 break;

		 default:
		 break;
	 }
}
   }break;

  case WM_SIZE:
  {
   HWND hEdit;
   RECT rcClient;
   GetClientRect(hwnd, &rcClient);
   hEdit = GetDlgItem(hwnd, 1);
   SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER);
  }break;

case WM_CTLCOLORSTATIC:
	  {
		HDC  hdc  = (HDC)  wParam;
		HWND ctrl = (HWND) lParam;
		SetBkMode( hdc, TRANSPARENT );
		SetTextColor( hdc, RGB(0, 0, 0) );
		return (LRESULT)GetStockObject(NULL_BRUSH); 
	  }break;

  case WM_DESTROY:
  {
   PostQuitMessage(0);
  }break;

  default:
	 return DefWindowProc(hwnd, msg, wParam, lParam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
 MSG msg;
 HWND hwnd;
 WNDCLASS wc;
 wc.style=CS_HREDRAW|CS_VREDRAW;
 wc.cbClsExtra=0;
 wc.cbWndExtra=0;
 wc.lpszClassName="window";
 wc.hInstance=hInstance;
 wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
 wc.lpszMenuName=NULL;
 wc.lpfnWndProc=WndProc;
 wc.hCursor=LoadCursor(NULL, IDC_ARROW);
 wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
 RegisterClass(&wc);
 hwnd=CreateWindow( 
 wc.lpszClassName,
 "TEST",
 WS_OVERLAPPEDWINDOW|WS_VISIBLE,
 100,100,300,250,NULL,NULL,hInstance,NULL);
 ShowWindow(hwnd,nCmdShow);
 UpdateWindow(hwnd);
 while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
return(int)msg.wParam;}

تم تعديل هذه المشاركة بواسطة freesaif في 11 سبتمبر 2009 في 04:44

#2

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

الحرف الثاني يكتب في مكان الأول بسبب أنك ترسل رسالة للكتابة فوق ما هو موجود :

SendMessage(hEdit, WM_SETTEXT, 1, (LPARAM)(LPCTSTR)L"B");

المفترض أولا أن تحصل على النص الموجود وتضعه في مصفوفه ، ومن ثم تضيف الحرف الجديد الى ذلك النص ، وفي النهايه ضع النص بالكامل ..

لكي تحصل على النص يمكنك أستخدام نفس الدالة SendMessage ولكن بالرسالة WM_GETTEXT ، أو من خلال الدالة GetDlgItemText . ولكي تضيف النص لأخر استخدام lstrcat .

يمكنك استخدام أي Resource Editor لأن إنشاء الControls والResources بشكل عام صعب من خلال الإحداثيات ... يمكنك استخدام ResEdit خفيف وسهل الإستعمال .

بالتوفيق ،،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#3

بســم الله الـرحمــن الرحيــم

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

الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

لقد حللت المشكل و لله الحمد

رجأ أنا بحاجة لمساعدة بسيطة جدا

لغة : C

مترجم : GCC

Unicode - UTF-16 - UTF-8

عندي ملف مثلا example.txt وكان يحتوي على نص عربي

اريد قرأة ملف بلغة C

فهل هدا ممكن ؟؟

تم تعديل هذه المشاركة بواسطة freesaif في 22 سبتمبر 2009 في 00:39

#4

نعم يمكن ،،

يمكن استخدام C-File Handling Functions .. أو حتى C++ I/O Streams .. أو حتى Win32 File Handling API وكلها تفي بالغرض :) ..

بالتوفيق ،،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#5

بســم الله الـرحمــن الرحيــم

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

الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

استغربت كثيرا من ردك !!! الامر بهده السهولة ؟؟

اكتر من شهرين و انا ابحث و اطرح الاسئلة في المنتديات الانجليزية و الفرنسية و العربية، من دون جدوى ... سوى أن مبرمج فرنسي اعطاني حلا اقبله هو تحويل الملف Unicode الى ملف Binary

هل لاحد يعرف كيف ؟

عرفت كيفية كتابة و قرأة في Binary-Mode و لكن تحويل ملف من Unicode الى Binary من دون قراة الملف Unicode لم اعرفه بعد، هل لاحد يعرف كيف ؟

#6

معذرة أخي الكريم ، فلم أجرب التعامل مع Unicode File من قبل ،،

لكن بعد قليل من البحث وجدت الكثير من الطرق والمكتبات لهذا الموضوع ..

على العموم هناك دالة تحول من عدة بايتات في حرف ينوكود MultiByteToWideChar في ويندوز استخدمتها للتحويل .. أيضا دوال الويندوز تدعم الترميزين ANSI/Unicode .. فقط أكتب الحرف W في نهايه اسم الدالة لكي تنادي الدالة الينوكوديه :) ..

أو يمكنك تعريف الUnicode في بداية المشروع وريح نفسك واستخدام الgeneric char والدوال مباشره بدون تخصيص دالة الANSI أو الUnicode .

عملت مثال بسيط فيه يتم عرض محتوى الملف في IDC_EDIT :

post-51148-1253704165_thumb.png

الحرف الأول من ملف الينوكود هو للتعريف بالملف BOM ..

الكود مرفق ،

أرجوا أن يكون هذا المطلوب ..

وان شاء الله سأبحث أكثر في الموضوع فهو ضروري لأي مبرمج :wink:

بالتوفيق أخي الكريم ،،

Read_Unicode_File.rar

تم تعديل هذه المشاركة بواسطة Wajdy Essam في 23 سبتمبر 2009 في 14:17

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

هذا الموضوع مغلق.

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