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

سؤال..معرفة كود الحرف العربي الظاهر وسط الكلمة

بدأه a1024 في 6 أبريل 2011 · 41 رد · 3,792 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#26

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

اخي العزيز وبعد بحث طويل وجدت ان الفكره ليست كما تتصور انت او بشار انه عند كتابه اي حرف يرجع كود للحرف الظاهر ... فهناك TextRendered كما ذكرت والكثير من الفئات .. باختصار لأن الامر سيطول عند الكتابه في مربع النص الذي يتم بالضبط انه يقوم باستدعاء داله لرسم النص وداله تستدعي داله وفي الاخير المسؤل عن عمليه تشكيل الاحرف هو داله API في الويندوز DrawTextEx يعطى لها نص معين وتقوم بتركيبه.

.:: Wish to become better and better ::.

#27
الفريد كتب:

قرأت الموضوع و أعتقد أنني فهمته ....

عندما ااستخدمت برنامج Font Expert و شاهدت الرموز المستخدمة في كلا الخطين وجدت أنها مختلفة تماماً و لا يوجد هناك أي تشابه في الترميز أو تكرار سوى ما كان للحروف المتقابلة من الخطين .

و اذا كتبت نصاُ بخط يعتمد ترميز اليونكود فيفترض عند تغيير الخط يظهر لك النص بالحروف التي تقابل ذلك الترميز في أي لغة كانت . إلا اذا كان هناك فرق في خريطة ذلك الخط .

أما فيما يتعلق بالحروف المركبة فيمكن الاستعانة بقاعدة بيانات مبنية على خرائط اليونكود http://www.unicode.org/charts/ و تحديد كود الحرف و ما يقابله من أحرف

مثل ( ـير ) FC91 يقابله FB83+FEAE و هكذا

شاهد المثال الذي ذكرته لك سابقاً (عدد الحروف 14 حرف و نفسها هي عدد ترميز اليونكود )

أتمنى أن أكون قد فهمت الأمر كما تريد

11051432120935.png:thumb_19692.png

شكراً لمشاركتك معلوماتك أخي الكريم، المقصود بشكل مختصر هو الحصول على الـUnicodes للأحرف المستخدمة في كلمة ما ضمن صندوق نصي افتراضي، وليس استخدام الـUnicodes لكتابة كلمة أو جملة.

بالتوفيق.

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#28
VB Helper كتب:

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

اخي العزيز وبعد بحث طويل وجدت ان الفكره ليست كما تتصور انت او بشار انه عند كتابه اي حرف يرجع كود للحرف الظاهر ... فهناك TextRendered كما ذكرت والكثير من الفئات .. باختصار لأن الامر سيطول عند الكتابه في مربع النص الذي يتم بالضبط انه يقوم باستدعاء داله لرسم النص وداله تستدعي داله وفي الاخير المسؤل عن عمليه تشكيل الاحرف هو داله API في الويندوز DrawTextEx يعطى لها نص معين وتقوم بتركيبه.

أهلااً أخي الكريم،

مانحن نناقشه هو عكس ماتتكلم عنه من جهة: أننا نريد الحصول على الـCode للحرف الظاهر وليس الفعلى المدخل بواسطة الـKeyboard والمخزن على شكل سلسة من الأحرف (Chars, Uni-chars) في الذاكرة.

إذا كنت قد قرأت شيء يتحدث عن هذا فمن فضلك قم بتوجيهنا إليه.

شكراً لمرورك

بالتوفيق.

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#29

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

اخي بشار نقبت كثيرا في تفاصيل الحرف الظاهر وذلك من خلال اخذ مثال ال TextBox كيف يكتب ويدمج الاحرف فهو يستخدم نفس الداله DrawString لل Graphics وكذلك TextRendered بس اسمها DrawText موجوده في System.Windows.Forms.Internal اذا لم تخني الذاكره فهو فعليا يأخذ النص الحالي ويقوم بتمرير لداله نظاميه التي بدورها تشكل الاحرف ويقوم برسمها في مربع النص.

هذا ولك الشكر

.:: Wish to become better and better ::.

#30

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

سبق أن ذكرت في إحد الردود API

a1024 كتب:
كيف يمكن التعامل في أوامر الخطوط من داخل أوامر vb.net او حتى API،
ثم ذكّرنا بها الأخ VB Helper مشكورا.

وبعد البحث في API وجدت الوظيفة GetCharacterPlacement وهي تسترجع معلومات عن كيفية إظهار السلسة حسب الخط المعطى ومن أحد معاملاتها GCP_DISPLAYZWG والتي ستضم محارف مميزة أو "ميتة" في الحسابات، ولكن للأسف لم أجد مثال تطبيقي لهذه الوظيفة، ولكن كل الذين تكلموا عنها كأنهم يذكرون أنها كانت لأنظمة 16بت ولم تعد تستخدم الآن، وأعتقد على فهمي للترجمة أنها استبدلت بوظائف Uniscribe.

(أنوه أنني لست بارعاً باللغة الإنجليزية)

وبعد البحث وجدت الآتي:

يوجد مثال باللغة الإنجليزية لبرنامج شبيه بـ Notepad.exe من (18 مرحلة) ولكن للأسف يعتمد على VisualC++6 ولكن يمكن التعاون معاً على تحوليها إلى VB.NET اذا اتضح أنها ما نسعى إليه، والمثال يقدم على شكل مراحل تطوير وله مميزات كثيرة، ومعظمها يوجد بها مثال لكل مرحلة بـ VC++6 داخل ملف مضغوط يمكن إنزاله، وهذا هو الرابط الأساسي للموضوع:

http://www.catch22.net/tuts/neatpad/1

ولكن إبتداءاً من (Part 11) بدأ يدخل مرحلة التعامل مع لغة (RightToLeft) التي من ضمنها اللغة العربية بمراحل ثلاث، وهذا هي روابطها:

http://www.catch22.net/tuts/neatpad/11

http://www.catch22.net/tuts/neatpad/12

http://www.catch22.net/tuts/neatpad/13

لاحظت منها Uniscribe وهي التي "أعتقد" أنها البديل لـ GetCharacterPlacement وتشمل الكثير "منها":

ScriptItemize

UspAnalyze

ScriptLayout.

أرجو التركيز على فهم ترجمة المراحل (Part 11) و (Par t12) و (Part 13).

أشكر الأخ VB Helper والأخ الفريد والأخ Bashar Rabat بشار وبقية الأعضاء على هذه المتابعة للموضوع وجميع من يتابعنا في صمت،

وإن شاء الله نكون أول من يقدم أداة قوية في خدمة اللغة العربية وفي هذا المنتدى الرائع بالذات،

وكسر احتكار الشركات الأجنبية لنسخة الشرق الأوسط التي يتصدقون بها علينا.

وأتمنى للجميع التوفيق والنجاح

ولعد إلمامي الجيد للغة الإنجليزية أرجو منكم الإطلاع على المواضيع التالية:

موضوع Uniscribe

http://msdn.microsoft.com/en-us/library/dd374091(v=VS.85).aspx

ودوالها Uniscribe Functions

http://msdn.microsoft.com/en-us/library/dd374093(v=VS.85).aspx

ومنها الدالة ScriptStringAnalyse Function

http://msdn.microsoft.com/en-us/library/dd368566(v=VS.85).aspx

والدالة ScriptStringOut Function

http://msdn.microsoft.com/en-us/library/dd368571(v=VS.85).aspx

وأيضا موضوع About Complex Scripts

http://msdn.microsoft.com/en-us/library/dd317698(v=vs.85).aspx

تم تعديل هذه المشاركة بواسطة a1024 في 16 أبريل 2011 في 05:53

#31

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

كما قلت سابقا عن ال DrawTextExW هذا هو رابطها http://msdn.microsoft.com/en-us/library/dd162499%28v=vs.85%29.aspx

احببت ان اضيف الى ان هناك داله مفيده اسمها ScriptGetCmap وهذا رابط في نبذه بسيطه عن واحد حاول يسوي معالج نصوص من الصفر http://www.eggheadcafe.com/software/aspnet/31209302/how-to-create-word-processing-from-scratch.aspx

وهذه مجموعه من الروابط ممكن تفيدك

http://msdn.microsoft.com/en-us/library/zs0350fy.aspx#Y1042

http://www.tertullian.org/rpearse/RightToLeft_Syriac/right_to_left.htm

اما الرابط التالي غني عن التعريف في كل الخفايا التي تريدها وان شاء الله يفيدك

http://cyberactivex.com/UnicodeTutorialVb.htm

.:: Wish to become better and better ::.

#32

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

اااااه وبعد رحله شاقه مع سؤالك وصلنا إلى نهايه المطاف وكما توقعت سابقا رسم النص - اغلب الدوال التي ذكرت مفيده - وكما ذكرات انا وذكرت انت ال Uniscribe هنالك SCRIPT_ANALYSIS Structure والذي يحتوي على بعض مثل fLinkBefore و fLinkAfter الذي تخبر النظام هل الحرف مربوط بحرف قبله وبرضه الثاني هل هو مربوط بحرف بعده ليقوم معالج النصوص باستقبال الحرف المناسب وارجاعه هذا هو الرابط له http://msdn.microsoft.com/en-us/library/dd368797

وهذه مجموعه من الروابط لميشيل كابلان الذي كتب كثير عن هذا الامر وكتب اداه استخدم فيها مجموعه من الدوال التي ستفيدك

http://blogs.msdn.com/b/michkap/archive/2005/12/06/500485.aspx

http://blogs.msdn.com/b/michkap/archive/2005/12/19/505309.aspx

http://blogs.msdn.com/b/michkap/archive/2005/06/27/433208.aspx

http://blogs.msdn.com/b/michkap/archive/2005/06/27/432986.aspx

http://blogs.msdn.com/b/michkap/archive/2006/06/12/628714.aspx

ولا اظنها النهايه .. البدايه اعتقد

بالتوفيق

.:: Wish to become better and better ::.

#33

مرحباً أخواني الكرام،

بعد البحث الطويل والأسئلة الكثيرة التي سألتها في بعض المنتديات ولبعض الأشخاص الذين أثق بمعرفتهم وخبرتهم، لم أجد الجواب الشافي لحل هذه المشكلة لذلك قررت أن ادرس الأحرف بواسطة الـCharMap ومن ثم ابدأ مشروع جديد ليحلل ويقرر حالة الحرف (معزول، نهائي، بدائي أو وسطي) ثم يعيد الـUnicode للحرف الفعلي المقابل للظاهري عن طريق استخدام عمليات حسابية بسيطة تعتمد على خوازمية حساب المدى للحرف مع أخذ عدد حالات الحرف بعين الاعتبار اي مثلاً الحرف (ء) ليس له إلا حالة واحدة (معزول)، الحرف (ا) له حالتان (معزول أو نهائي) والحرف ف له اربعة حالات (معزول، نهائي، بدائي أو وسطي).

هذه كانت تجربتي الثانية للبرنامج بعد تصحيح بعض التعبيرات:

rGy68512.jpg

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

بالتوفيق.

FormDetector.rar

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#34

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

اخي بشار تسلم عالمجهود بس في الاول حاولت ان يسوي الاخ صاحب السؤال خوارزميه وقلتم لي مو هذا الي نبيه؟!! يعني نبي كيف نحصل على الكود كما يفعل ال TextBox وفي اخر رد لي وضحت انه باستخدام ال SCRIPT_ANALYSIS Structure

.:: Wish to become better and better ::.

#35
VB Helper كتب:

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

اخي بشار تسلم عالمجهود بس في الاول حاولت ان يسوي الاخ صاحب السؤال خوارزميه وقلتم لي مو هذا الي نبيه؟!! يعني نبي كيف نحصل على الكود كما يفعل ال TextBox وفي اخر رد لي وضحت انه باستخدام ال SCRIPT_ANALYSIS Structure

الله يسلمك :]

في الأول؟ انتهيت لتوي من قراءة ردود هذا السؤال ولم أجد أحداً يتحدث عن اعتماد خوارزميات وتطبيقها، وبالنسبة لي أخي الكريم، لو كان هناك طريقة مختصرة لجلب الـUnicode للحرف الظاهر كما ذكر الأخ a1024 ماكنت لاشارك طريقتي الخاصة والتي اعدها ابسط بكثير من استخدام ماتم الإشارة إليه من APIs.

شكراً لمرورك :] بعد قراءة الردود وجدت أنه عليّ الانتباه لنوع الخط أيضاً فالتطبيق الذي قمتُ بإنشاءه يعتمد على جدول رموز الخط Tahoma ومايشابهه.

بالتوفيق.

تم تعديل هذه المشاركة بواسطة Bashar Rabat في 17 أبريل 2011 في 00:02

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#36

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

اخي بشار حاول تضع كلمه تنتهي بالهاء او الياء متصله .. لا يتم تحليلها بالشكل الصحيح تظهر وكانها في المنتصف .. تأكد يمكن يكون في حروف اخرى

.:: Wish to become better and better ::.

#37
VB Helper كتب:

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

اخي بشار حاول تضع كلمه تنتهي بالهاء او الياء متصله .. لا يتم تحليلها بالشكل الصحيح تظهر وكانها في المنتصف .. تأكد يمكن يكون في حروف اخرى

مشكور :] (جاري التحديث.....)

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#38

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

أشكر كل من شارك واجتهد في هذا الموضوع.

قد يكون الموضوع في نظر البعض أخذ أكبر حجمه، والبعض الآخر يرى أنه لا داعي لهذه الموضوع طالما أنه يسطتيع أن يرسم النص العربي باستخدام Graphics.DrawString مع أن الموضوع أكبر من مجرد رسم النصوص العربية.

أما أنا فمن باب غيرتي على اللغة العربية إن شاء الله سأواصل بحثي.

لا أخفي عليكم تألمت كثيرا لعدم كثرة المشاركين وعتبي بالذات على خبراء المنتدى.

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

#39

السلام عليكم ورحمه الله وبركاته اخي مو مشكله المشاركين .. اهم شيء اننا وصلنا للفكره .. ما قرأت ردي الاخير؟؟؟

.:: Wish to become better and better ::.

#40
a1024 كتب:

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

أشكر كل من شارك واجتهد في هذا الموضوع.

قد يكون الموضوع في نظر البعض أخذ أكبر حجمه، والبعض الآخر يرى أنه لا داعي لهذه الموضوع طالما أنه يسطتيع أن يرسم النص العربي باستخدام Graphics.DrawString مع أن الموضوع أكبر من مجرد رسم النصوص العربية.

أما أنا فمن باب غيرتي على اللغة العربية إن شاء الله سأواصل بحثي.

لا أخفي عليكم تألمت كثيرا لعدم كثرة المشاركين وعتبي بالذات على خبراء المنتدى.

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

وعليكم السلام

الصبر ياأخي الكريم هو مايحتاجه الجميع :]

EG196061.jpg

اتمنى أن يفي بالغرض لأنه مازال تجريبي :]

بالتوفيق.

FormDetector.rar

FormDetector.rar

FormDetector.rar

تم تعديل هذه المشاركة بواسطة Bashar Rabat في 14 يوليو 2011 في 01:51

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#41

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

شكرا اخ بشار على المجهود, وانا قد وصلت للمطلوب سابقا عبر دوال ال API, ولكن اعتقد السائل استودع ولم يرد الاكمال!!

.:: Wish to become better and better ::.

#42

السلام عليكم جميعا

ممكن يا جماعة حد يساعدنى فى الجزئية الصغيرة دى

أنا عايز كلمة

الإنجليزية"

تتحول لل Unicode ده FE94,FEF3,FEB0,FEF4,FEE0, FEA0 ,FEE7,FEF9,627

مستنى الرد بسرعة

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…