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

تغيير خارطة الأحرف

مغلق
بدأه ابن حسان في 6 فبراير 2007 · 13 رد · 1,374 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أريد تغير خارطة الأحرف المستخدمة في لوحة المفاتيح التالية، بمعنى أن تكون كتابة الأحرف حسب ترتيبها على اللوحة يعني البداية من أقصى اليمين ب " أ " ثم "ب" وهكذا.

وهذا في العربي والإنجليزي

المهم أني استخدمت الأمر :في KeyPress ارسال key بالحرف الجديد مكان القديم

ولكن لم يفلح هذا الأمر مع بعض الحروف ، برجاء المساعدة لمن له خبرة في التعامل مع النصوص العربي

#2

أرنا المحاولة التي قمت بها ليقوم احد الأخوة بتعديلها وبهذا تعرف الخطأ في محاولتك

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#3

المحاولة موجودة داخلا الملف المرفق، برجاء الاطلاع والمساعدة

بالمناسبة، هذا الكود يعطي نتيجة مختلفة مع كل keyboard ، بمعنى توزيع (بعض) الأحرف يختلف من جهاز إلى آخر !!

وما أحاول فعله هو تغيير حالة الأحرف الخارجة من لوحة المفاتيح بحيث أغير خارطة المفاتيح بمعنى أن تكتب لوحة المفاتيح اللغة العربية بترتيبها أ ب ت ث ج ح خ ...

ونفس الشئ بالنسبة للأنجليزية.

برجاء مراجعة الجزء المكتوب داخل TextKeyPress

- ملحوظة، هناك مشكلة أخرى مع الطباعة برجاء تجربتها لديكم لمعرفة أين المشكلة بالضبط حيث أنه بإرسال الأمر إلى الطابعة لاتحدث أي استجابه !!؟

جزاكم الله خيرا

المحاولة موجودة داخلا الملف المرفق، برجاء الاطلاع والمساعدة

بالمناسبة، هذا الكود يعطي نتيجة مختلفة مع كل keyboard ، بمعنى توزيع (بعض) الأحرف يختلف من جهاز إلى آخر !!

وما أحاول فعله هو تغيير حالة الأحرف الخارجة من لوحة المفاتيح بحيث أغير خارطة المفاتيح بمعنى أن تكتب لوحة المفاتيح اللغة العربية بترتيبها أ ب ت ث ج ح خ ...

ونفس الشئ بالنسبة للأنجليزية.

برجاء مراجعة الجزء المكتوب داخل TextKeyPress

- ملحوظة، هناك مشكلة أخرى مع الطباعة برجاء تجربتها لديكم لمعرفة أين المشكلة بالضبط حيث أنه بإرسال الأمر إلى الطابعة لاتحدث أي استجابه !!؟

جزاكم الله خيرا

MyEditor.zip

#4

حاول أن تتعامل مع scan code لكل زر و ليس مع virtual keys.

scan code يعطيك موضع الزر المضغوط في لوحة المفاتيح بغض النظر عن لغة النظام المستخدمة.

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#5

وكيف نفرق في هذه الطريقة بين الحرف العربي والانجليزي

#6

مثال بسيط يبين إستعمال ScanCode للأزرار وفق موضعهم وليس وفق ما كتب عليهم

ScaneCode.rar

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#7

أشكرك ikossan على تعاونك، ولكن المشكلة في scan code أنه لا يفرق بين الحرف العربي والأنجليزي لأن حرف (اللام) وحرف ال (G) وحرف (g) كلهم يأخذون بهذه الطريقة نفس الرقم 71

وما أريده هو إعادة ترتيب الحروف العربية، وكذا الانجليزية، على لوحة المفاتيح، بمعنى أن الكاتب باللغة العربية يكتب

حرف (أ) من أقصى يمين اللوحة، ثم حرف (ب) الذي يليه ثم (ث) وهكذا، وبهذه الطريقة Scan code لا أظن أنها ستفلح !!! أم أن لديك رأي آخر، ومرة أخرى شكرا لك على اهتمامك :)

#8

بطبيعة الحال يمكنك التمييز ما بين اللغاات المتعددة وتعرف اللغة التي اختارها المستخدم.

راجع هذا الموضوع:

/index.php?showtopic=61721

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#9

الأخ ikossan

لم أنجح حتى الأن في استخدام scan code

هل يمكنك أن تدلني كيف أستخدم هذه الطريقة مع حرف واحد فقط ؟

كيف نستخدمه في كتابة حرف " أ " بدلا من " + " مثلا.

#10

ألا يوجد من يدلي بدلوه في هذا الموضوع !!

:(

#11

بالعكس هذا هو الحل الصحيح

لما توصل لحد ToUnicodeEx راح تعطيك الناتج الصحيح

لو كان ضغط على الكيبورد حرف G راح يوصلك G ولو كذا ضاغط الحرف ل راح يوصلك ل

وانت تعيد ترتيبهم مره ثانيه

طيب فيه طريقه ثانيه ليش ماتستخدم اثنين TIMER واحد للعربي والثاني للانجليزي

تشيك اول شي ايش اللغه المفعله حاليا للمستخدم اذا كانت عربي يروح يكمل بالعربي

واذا كانت لنجليزي يروح يكمل انجليزي

وتقدر تعرف اللغه الحاليه اذا كانت عربي او لا من هنا

function arabic:Boolean;
var
idThread: DWORD;
idProcess: DWORD;
wndHandle: THandle;
dwHkl: hkl;
bn:byte;
CurLayout: string;
begin
wndHandle:= GetForegroundWindow();
idThread:= GetWindowThreadProcessId(wndHandle,@idProcess);
dwHkl:= GetKeyboardLayout(idThread);
CurLayout := Copy(int2str(dwHkl),5,4);

	 if CurLayout  = '5425' then
	 bn:=1
	 Else
	 if CurLayout  = '7713' then
	 bn:=1
	 Else
	 if CurLayout  = '5665' then
	 bn:=1
	 Else
	 if CurLayout  = '8737' then
	 bn:=1
	 Else
	 if CurLayout  = '9761' then
	 bn:=1
	 Else
	 if CurLayout  = '7433' then
	 bn:=1
	 Else
	 if CurLayout  = '6449' then
	 bn:=1
	 Else
	 if CurLayout  = '7423' then
	 bn:=1
	 Else
	 if CurLayout  = '3617' then
	 bn:=1
	 Else
	 if CurLayout  = '7413' then
	 bn:=1
	 Else
	 if CurLayout  = '4641' then
	 bn:=1
	 Else
	 if CurLayout  = '2593' then
	 bn:=1
	 Else
	 if CurLayout  = '0785' then
	 bn:=1
	 Else
	 if CurLayout  = '6689' then
	 bn:=1
	 Else
	 if CurLayout  = '7443' then
	 bn:=1
	 Else
	 if CurLayout  = '7473' then
	 bn:=1;


arabic:=bn = 1;
end;

اذا كانت الداله اللى فوق صحيحه هذا يعني المستخدم جالس يكتب بالعربي يعني شريط اللغه فيه AR

لو كانت غير صحيحه يعني جالس يكتب انجليزي ولا فرنسي ولا إن شاء الله ساحل العاج المهم

لما تعرف ايش جالس يكتب تروح تمشي للتايمر العربي ولا التايمر الانجليزي وتستخدم GetAsyncKeyState

وبعدين تسوي لها CASE OF ومثلا

		222 : if GetKeyState(VK_SHIFT)<0 then kall:=kall+'"' //Shift+'
			  else kall:=kall+'ط';//'

يعني اذا كان المستخدم ضغط SHIFT مع حرف ط الناتج هو علامة التنصيص " ولو كان بدون SHIFT الناتج حرف ط

انت هنا تقدر تبدل بدل مايكون الناتج حرف ط يكون حرف أ وهنا بديت ترتب الحروف من اليمين حتى اليسار

		 65 : if GetKeyState(VK_SHIFT)<0 then kall:=kall+'ِ' //Shift+A
			 else kall:=kall+'ش'; //A
		 66 : if GetKeyState(VK_SHIFT)<0 then kall:=kall+'لآ'//Shift+B
			 else kall:=kall+'لا';//B
		 67 : if GetKeyState(VK_SHIFT)<0 then kall:=kall+'}'//Shift+C
			 else kall:=kall+'ؤ';//C
		 68 : if GetKeyState(VK_SHIFT)<0 then kall:=kall+']'//Shift+D
			 else kall:=kall+'ي';//D
		 69 : if GetKeyState(VK_SHIFT)<0 then kall:=kall+'ُ'//Shift+E
			 else kall:=kall+'ث';//E

كمل ياصاحبي مع باقي الحروف حتى تنتهي وطبعا الانجليزيه نفس الشي

هذا اللى كنت حاب ادلي بدلوي فيه واذا كان دلوي مش عاجبك يبقى دور على دلو ثاني انا مالي :D

#12

السلام عليكم،

حتى لا تضيع منا المشكلة الأساسية، دعونا نفترض أننا نتعامل مع الكيبورد العربي فقط (أي أن المشكلة ليست في التحويل بين العربي والإنجليزي أو معرفة أيها تعمل الآن.

المشكلة بالتحديد هي ؟ كيف نجعل لوحة المفاتيح تكتب العربي بالترتيب الأبجدي، ومرفق في أول هذا الموضوع ملف المحاولة التي قمت بها، :(

:(

#13

ألم يجرب أي واحد أن يغير خرج الحرف دونما استخدام virtual keys؟ أم أن هذا الموضوع من الصعوبة بمكان ؟

#14

حسناً

هل جرب أحدكم أن يعمل keyboard hooking

ربما تفلح هذ الطريقة !!

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

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