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

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

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

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

سؤالي قد يكون صعباً جداً ولكن لا شيء مستحيل.

معروف أنه عند الكتابة باللغة العربية تظهر لنا الحروف منفصلة ومتصلة حسب نوعها وحالتها،

بمعنى أننا لو كتبنا كلمة (برمجة) نراها متصلة، ولكن لو قرأنا أكوادها بواسكة AscW من داخل النص نجدها كالتالي:

(h0628&) و (h0631&) و (h0645&) و (h062C&) و (h0629&)

ب ر م ج ة

ولكن أكواد الحقيقة للأحرف الظاهرة بخط (Times New Roman) هي:

(hFE91&) و (hFEAE&) و (hFEE3&) و (hFE9F&) و (hFE93&)

بـ ـر مـ جـ ة

وطلبي كيفية معرفة الأكواد الظاهرة برمجيا بالفجوال بيسك أو سي شارب..

آمل أن أجد طلبي وآسف على الإطالة....

#2

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

اولا اردت ان انوه ان الداله AscW لا تعتمد على نوع الخط .. وبالنسبه لسؤالك اصلا الكلمه مكونه من احرف وكل حرف له كود معين لذا اشوف غريبه وذلك اذا قرانا النص حرف حرف؟!!

طيب وهل لك هدف لهذا وانا احاول فيها ...

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

#3

من: VB Helper

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

اولا اردت ان انوه ان الداله AscW لا تعتمد على نوع الخط .. وبالنسبه لسؤالك اصلا الكلمه مكونه من احرف وكل حرف له كود معين لذا اشوف غريبه وذلك اذا قرانا النص حرف حرف؟!!

طيب وهل لك هدف لهذا وانا احاول فيها ...

-----------

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

أشكر الأخ VB Helper لتجاوبه..

نعم أخي الكريم..

الدالة AscW لا تعتمد على نوع الخط، وإنما تعطي قيمة ثابتة لكل حرف بدون تركيب..أي حرف حرف.

ولكن بالنسبة لأشكال الحروف التي نراها فأكوادها مختلفة،

ناخذ مثال كلمة (ثم) فهي كالتالي:

بالنسبة للخط (Traditional Arabic) كود واحد (hFC12&) (لأنه مركب)،

بالنسبة للخط (Times New Roman) كودين (hFE9B&)و(hFEE2&)،

مع أن الدالة AscW سوف يعطينا الكودين المعروفين للخطوط العربية (ث)(h062B&) و(م)(h0645&)،

والدالة Asc سوف يعطينا الكودين (ث)(hCB&) و(م)(hE3&)،

ملاحظة:

AscW ترجع قيمة Unicode للحرف.

تبدأ الأكواد من (h0600&) بالدالة AscW حرف حرف بدون تركيب، وهي التي تحفظ عادة في قاعدة البيانات.

وتبدأ الأكواد من (hF000&) لأشكال الحروف العربية الناتجة التي نراها، وليس لها علاقة سوى بالرسم.

عموما...

هدفي من هذا الأمر هو التحكم بطباعة شكل الحرف بواسطة كوده بناءً على نوع الخط

وبالتالي التحكم برسم هذا الحرف (قد يكون مركب) الناتج من الكلمة المدخلة.

قد يكون مفيد في انتاج برنامج للخط العربي،

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

وأشكر لك تجاوبك مرة أخرى

تم تعديل هذه المشاركة بواسطة a1024 في 7 أبريل 2011 في 06:57

#4

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

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

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

#5

من: VB Helper

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

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

---------------------------------------------

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

أشكرك أخي على هذا التجاوب وبارك الله فيك.

بالنسبة لمعرفة الكود الحروف في المثال نقلتها من (ادراج رمز) من برنامج مايكروسوفت وورد.

حصلت على المثال التالي من الإنترنت،

http://www.java2s.com/Tutorial/VB/0300__2D-Graphics/MeasureCharacterRange.htm

ولكنه يعطيني نطاق الحرف المرسوم، ولم أتمكن من معرفة رقم الكود نفسه.

أعذرني فلست معتادا في التعامل مع المنتديات.

أشكرك جداً أخي

#6

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

شكراً اخي .. جاري العمل

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

#7

من: VB Helper

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

شكراً اخي .. جاري العمل

-------------------------------------

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

شكراً أخي الكريم مقدماً،

وعموماً،

لو توصلت أنا أيضاً لا بد من إخبارك إن شاء الله لتعم الفائدة ما لم يمنعني مانع خارج عن الإرادة.

ولا أنسى من شكر المنتدى وأصحابه والقائمين عليه...

وبارك الله فيك وفي الجميع.

#8

من: VB Helper

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

شكراً اخي .. جاري العمل

-------------------------------------

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

شكراً أخي الكريم مقدماً،

مرفق ملف إظهار رموز الخط طبعا ليس المطلوب ولكن للإطلاع.

وعموماً،

لو توصلت أنا أيضاً لا بد من إخبارك إن شاء الله لتعم الفائدة ما لم يمنعني مانع خارج عن الإرادة.

ولا أنسى من شكر المنتدى وأصحابه والقائمين عليه...

وبارك الله فيك وفي الجميع.

Char.rar

#9

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

الحمدلله توصلت للحل ... جرب هذا

MessageBox.Show(Hex(AscW("ﺑ"))

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

#10

من: VB Helper

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

الحمدلله توصلت للحل ... جرب هذا

MessageBox.Show(Hex(AscW("ﺑ"))

----------------------------

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

أشكرك أخي على مجهودك وبارك الله فيك،

يبدو الموضوع محتاج توضيح أكثر..

يوجد في نظام التشغيل محرك أو معالج خاص

(لا أعرف إن كان خاص فقط باللغة العربية أم لا)

يحلل النص قبل إخراجه لنا وللنوع الخط دورا في هذا

فينتج أكواد أخرى تخص الإظهار فقط لتسليمها

لمعالج الإظهار لإظهارها (رسمها) في مكانها.

المقصد معرفة تلك الأكواد التي سلمها لمعالج الإظهار (وقت التشغيل)

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

لأن بعض الأكواد سوف تختصر لكود واحد بسبب الحروف المركبة

لفت نظري TextRenderer ولكن لم استفد شيئاً

وشاكر لك مجهودك

#11

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

اخي العزيز في سؤالك الاول حللت كلميت برمجه فالحرف الاول كتبته (بـ) فهو ليس (ﺑ) لاحظ الفرق لذا اعتقد انه من الصعوبه كتابه الحرف الا اذا استخدمنا اختصاره كما هو الحال في برنامج الورد وغيره .. لذا اذا كان هدفك هو تأثير نصي زي البوربوينت فسأعمله لكن دون اللجو للأكواد الظاهره ... فسؤالك هو كيفيه الحصول على الكود البرمجي للحرف الظاهر فاذا جربت كودي السابق فهو الحل؟؟

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

#12
VB Helper كتب:

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

اخي العزيز في سؤالك الاول حللت كلميت برمجه فالحرف الاول كتبته (بـ) فهو ليس (ﺑ) لاحظ الفرق لذا اعتقد انه من الصعوبه كتابه الحرف الا اذا استخدمنا اختصاره كما هو الحال في برنامج الورد وغيره .. لذا اذا كان هدفك هو تأثير نصي زي البوربوينت فسأعمله لكن دون اللجو للأكواد الظاهره ... فسؤالك هو كيفيه الحصول على الكود البرمجي للحرف الظاهر فاذا جربت كودي السابق فهو الحل؟؟

--------------------------------------------------

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

شاكر لك تجاوب ومحاولاتك لإيجاد الحل.

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

أرفقت المثال التالي ليتضح الأمر:

post-149082-097092200 1302396156_thumb.j

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

ولا اعرف هل انا لم وفق بالتوضيح من البداية أم لا،

أعذرني لعدم المامي بالمنتديات،،،،،،

أشكرك على طولت البال معي

DspChrGen-01.rar

المرفقات
DspChrGen-01.JPG
#13

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

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

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

#14

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

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

اقرا النص حرف حرف .. افحص الحرف هل هو اول حرف في الكلمه .. يعني قبله فراغ او اول حرف في النص كله والا هل هو اخر حرف في الكلمه يعني بعده فراغ او اخر حرف في النص كله او غيره .. يعني في المنتصف .. من ثم قم بايجاد الحرف الظاهر حسب ال Char Map ولا تنسى الحرف في اخر الكلمه هل هو متصل مثل الالف او منفصل كالياء او منفص ومتصل كحرف السين

اكيد لاحظت انها خوارزميه طويله شويه بس تفي بالغرض

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

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

#15
VB Helper كتب:

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

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

اقرا النص حرف حرف .. افحص الحرف هل هو اول حرف في الكلمه .. يعني قبله فراغ او اول حرف في النص كله والا هل هو اخر حرف في الكلمه يعني بعده فراغ او اخر حرف في النص كله او غيره .. يعني في المنتصف .. من ثم قم بايجاد الحرف الظاهر حسب ال Char Map ولا تنسى الحرف في اخر الكلمه هل هو متصل مثل الالف او منفصل كالياء او منفص ومتصل كحرف السين

اكيد لاحظت انها خوارزميه طويله شويه بس تفي بالغرض

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

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

أشكرك أخي،،

لو كنت سأفحص الحرف بنفسي نعم سيطول الكود كما ذكرت،،

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

وإن اخترت هذا الحل فمعنى هذا أنني سأجبر المستخدم على استخدام خطوط محدودة جدا،

لا تنس أن الخطوط ليست متشابهه بالتحليل، اقصد الحروف المركبة تختلف من خط لآخر،

الذي أبحث عنه الأوامر التي ممكن تطبيقها على أي خط (Font) حتى لو كانت مستوردة من مطورين آخرين للخطوط العربية، بمعنى كيف يمكن التعامل في أوامر الخطوط من داخل أوامر vb.net او حتى API،

لم أجد أمر مثلا يشبه (طبعا لا يوجد أمر بهذة الصيغة ولكن مثلتها تمثيلا للإيضاح فقط)

Dim dipChars As String = GetDisplayCharacters(SourceString, myFont)

سأذكرك بشيء،،،

هل تلاحظ النص الذي يظهر في برامج لا تدعم اللغة العربية مثل 3DSMax أو Cinema4D تظهر الحروف منفصلة لأنه لم تطبق عليها معالجة الأحرف العربية الخاصة بنظام التشغيل من خلال Script موجود داخل كل خط Font عربي،

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

يمكن تسأل لمَ لمْ أذكر منذ البداية مسألة الـ Script السبب لم أكن أعرفها بهذا الخصوص ولكن نتيجة بحثي في النت في الفترة الأخيرة حتى أنني بحثت في مسألة إنشاء الخطوط فوجدت برنامج FontCreator فكانت التعليقات في بعض دروسة تذكر الـ Script،

أشكرك أخي الكريم على جهودك

#16

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

سأحاول مجددا بس ياريت تجاوبي على سؤالي هل لك غرض معين لأنه يمكن عمل طريقه النص المتحرك الذي ذكرتيه كما هو الحال بالبوربوينت اسهل بان تقومي بايجاد الحرف الظاهر!!

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

#17
VB Helper كتب:

هل لك غرض معين لأنه يمكن عمل طريقه النص المتحرك الذي ذكرتيه كما هو الحال بالبوربوينت اسهل بان تقومي بايجاد الحرف الظاهر!!

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

الهدف اللغة العربية

لاحظت تركيزك أخي VB Helper على بالبوربوينت فقط لإنني ذكرته كمثال،

الهدف او الغرض إنشاء إجراءات وأدوات مفيدة تخص اللغة العربية وهي اللغة التي نعتز بها.

وبسبب عدم وجود برامج قوية بلغتنا وأغلب الموجود بدائيات وتقليد مقيت للبرامج الأجنبية (وياليتها تدعم فعلا اللغة العربية بالشكل الائق بها)، كان الهدف الأول إنشاء أدوات تمسك زمام التحكم في الأحرف العربية، ومن ثم نشرها بشكل مصادر مفتوحة للجميع التي "من وجهة نظري" سوف يكون دافع لإنتاج برامج فعلاً إسمها برامج عربية بالكامل وليس شكلاً.

وقد تفيد في تحويل أي برنامج غير عربي لإجباره (بشكل قانوني) على دعم اللغة العربية والتي تسمى بنسخة الشرق الأوسط(ME) دون الإنتظار ليأتينا الدعم "حسنة" من غير العرب (طبعا لا أقصد الدخول في برمجة البرنامج الأجنبي لأن هناك حقوق محفوظة علينا كمسلمين إحترامها) ولكن هناك طرق خالية من المسؤولية لعمل ذلك.

يكفينا ما مضى،،،،،،،،

يكفينا أن الأحرف العربية تحكم فيها الأعاجم فوزعوها لنا في لوحة المفاتيح وفي شفرة اليونيكود وغيرها ولم يسمحوا لأي عربي بذلك.

فهل عرفت ما أرمي إليه أخي الكريم

إذا وصلنا لهذه الغاية في التحكم الكامل ونشرها بشكل مصدر مفتوح ومجاني (أعلم أن كلمة مجاني مؤلمة للماديين لو على حساب عروبتهم) فستنتشر البرامج العربية بشكل ملفت للأنظار.

أشكرك يا أخ VB Helper وأشكر الجميع.

تم تعديل هذه المشاركة بواسطة a1024 في 12 أبريل 2011 في 03:46

#18

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

اوكي اخي .. فهمت قصدك .. حاول اتباع الخوارزميه التي كتبتها مسبقا مؤقتا وسأحاول جاهدا في البحث عن طريقه احسن ..

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

#19
VB Helper كتب:

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

اوكي اخي .. فهمت قصدك .. حاول اتباع الخوارزميه التي كتبتها مسبقا مؤقتا وسأحاول جاهدا في البحث عن طريقه احسن ..

أشكرك أخي مشاركتي الهدف والسعي في تحقيقه

وأطلب من المشرفين وبقية الأعضاء مشاركتنا الهدف بما لديهم

وفق الله الجميع

#20

لا أعتقد أن المشكلة في أي من الدالة AscW أو الدالة Enconding.GetBytes لأن كلاهما يعطيان النتيجة نفسها (1) وعند استخدام الحرف بشكل مباشر (نسخ-لصق) فإن كلا الدالتين تعطيان الرمز (HFED3 = 65235&) للحرف (فـ) (2) بالهيئة (Initial Form). وهذا يعني أن صندوق النص الذي نستخدمه هو من يقوم ظاهرياً بتمثيل الحرف ولكن ليس فعلياً أي عند عملية الرسم (رسم الكلمات) يقوم البرنامج النصي أو صندوق النص "تحديدا" بتهيئة النص بالطريقة المناسبة للعرض لكن فعلياً النص يبقى بأحرف ذات هيئة معزولة الشكل ( الشكل العام للحرف Isolated Form)، على أي حال، البحث مازال مستمر وإن شاء الله سنجد وسيلة لنكشف حالة الحرف الفعلية المقابلة للظاهرية.

بالتوفيق

The important thing is not so much

that every child should be taught,

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

#21
Bashar Rabat كتب:

البحث مازال مستمر وإن شاء الله سنجد وسيلة لنكشف حالة الحرف الفعلية المقابلة للظاهرية.

أشكر لك مشاركتك

وأسأل الله لك التوفيق

في تصوري أن نظام التشغيل يستلم الأحرف العامة ثم يرسلها للفونت المختار ليقوم الفونت بتحليلها ثم يعيد نتيجة التحليل للنظام وهي مجموعة رموز(لا نقول أحرف) ليقوم النظام بإظهارها لنا.

وما زال البحث مستمر

تم تعديل هذه المشاركة بواسطة a1024 في 13 أبريل 2011 في 11:58

#22

استخدم هذا الكود للحصول على رمز الحرف ...

dim txt as string = "المنتدى العربي"
debug.print (convert2UniHex (txt))

Public Function convert2UniHex(ByVal s As String) As String
        Dim strNew As String = Nothing
        For i = 1 To Len(s)
            Dim j As Integer = AscW(Mid(s, i, 1))
            Select Case Len(Hex(j))
                Case 1 : strNew &= "000" & Hex(j)
                Case 2 : strNew &= "00" & Hex(j)
                Case 3 : strNew &= "0" & Hex(j)
                Case 4 : strNew &= "" & Hex(j)
            End Select
        Next
        Return strNew
    End Function

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

.... وافينا بالنتيجة ... أو أرفق المشروع

تم تعديل هذه المشاركة بواسطة الفريد في 13 أبريل 2011 في 18:11

#23

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

نفس الفكره الي سويتها في السابق مع اضافه جميله .. اتمنى ان يساعدك يا a1024

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

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

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

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

أعتقد أن الفكرة أستوعبها الأخ Bashar Rabat بشكل واضح

شكرا ياأخ الفريد

ولكن يبدو أنك لم تقرأ الموضوع من بدايته

أو أنك لم تستوعب ما نسعى إليه.

نشكرك وننتظر مشاركتك مرة أخرى وجميع الأعضاء

تم تعديل هذه المشاركة بواسطة a1024 في 13 أبريل 2011 في 20:12

#25

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

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

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

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

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

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

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

11051432120935.png:thumb_19692.png

تم تعديل هذه المشاركة بواسطة الفريد في 14 أبريل 2011 في 00:31

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

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

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

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

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