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

كيف تعاين الخطوط غير المعدة في جهازك؟

بدأه عاطف قشيشة في 13 أكتوبر 2008 · 4 رد · 1,075 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ماذا عن معاينة الخطوط باللغة العربية وبجملة أطول من هذه الجملة، مع إمكانية تغيير حجم خط المعاينة؟

لجأت إلى برنامج مايكروسوفت وورد كثيراً لحل هذه المشكلة بالطرق التقليدية، ولكن في كل مرة كان عليً أن أركب الخط في مجلد الخطوط ثم أبحث عنه في قائمة الخطوط، إلى آخر هذه الخطوات التي أصابتني بالملل.

وأخيراً وجدت الحل، وذلك عن طريق دوال ال API التي دائماً ما تحل لي كل مشاكلي، والتي يحتاج الواحد منا دائماً أن يضع يده على بداية طريق الحل، ثم يطلق لرجليه العنان بعد ذلك في التفنن والتزيين.

ولكي لا أطيل عليكم (وإن كنت قد أطلت فعلاً، ولو أنه كان بإمكانكم تخطي هذه المقدمة، وعلى كل، الله يعوض عليكم)، دعوني أبدأ الموضوع.

الموضوع ببساطة أن الدالة المشكورة CreateScalableFontResource يمكنها إنشاء ملف مرجع Resource مؤقت للخط المطلوب، قابل للقياس (أي معرفة مكان إي بيان مخزن بداخله عن طريق معرفة عدد بايتات كل بيان)، وهذا لا يكلفك سوى وسيطتين فقط للدالة هما: اسم الملف المؤقت، واسم ملف الخط، بعدها يمكنك فتح هذا الملف (برمجياً بالطبع، وليس عن طريق المفكرة Notepad)، ومعرفة اسم الخط Face Name، الذي طالما استعصى عليًّ، وذلك عن طريق معرفة رقم البايت الذي يبدأ منه هذا الاسم، واستخراجه من مخبئه.

وهذه هي الدالة، سارع بإضافتها إلى قسم التصريحات العامة General للنموذج:

Private Declare Function CreateScalableFontResource Lib "gdi32" Alias "CreateScalableFontResourceA" (ByVal fHidden As Long, ByVal lpszResourceFile As String, ByVal lpszFontFile As String, ByVal lpszCurrentPath As String) As Long

والآن جاء دور الدالة التي سوف نستخدمها لإنشاء ملف المرجع للخط، واستخراج اسم الخط، تمهيداً لا ستخدامه فيما بعد في خاصية FontName لأي أداة نريدها (يجب أن تدعم الأداة هذه الخاصية بالطبع)

وهذه هي الدالة:

Public Function bGetFontName(ByVal strFileName As String, ByRef strFontName As String) As Boolean
	Dim hFile As Integer
	Dim Buffer As String
	Dim strTempName As String
	Dim iPos As Integer
	strTempName = App.Path & "\~TEMP.FOT"
	If CreateScalableFontResource(1, strTempName, strFileName, vbNullString) Then
		hFile = FreeFile
		Open strTempName For Binary Access Read As hFile
			Buffer = Space(LOF(hFile))
			Get hFile, , Buffer
			iPos = InStr(Buffer, "FONTRES:") + 8
			strFontName = Mid(Buffer, iPos, InStr(iPos, Buffer, vbNullChar) - iPos)
		Close hFile
		Kill strTempName
		bGetFontName = True
	End If
End Function

والآن لم يعد هناك شيء يحتاج للشرح، فدعونا نعاين المثال الموجود بالمرفقات، والذي لا يتعدى وزنه 10 كيلوبايت، وهذه هي صورته:

post-168307-1223920251_thumb.gif

وهذا هو المشروع:

وأتمنى أن يعجبكم موضوعي

مع خالص تحياتي

من موضوعاتي في المنتدى:

تخزين الملفات في قاعدة البيانات

الحصول على خصائص الحقول في قاعدة بيانات أكسس

كود ضبط شاشة التوقف وخلفية سطح المكتب

Font_Explorer.zip

كان الله في عون العبد ما كان العبد في عون أخيه

qushisha@yahoo.com

#2

شكرا وسلمت يداك

تحياتي

OMANI FOR EVER

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

post-12787-12780191801974.jpg

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

#3

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

كون الموضوع هو للخطوط الغير معدة في جهازك وعن طريق API فأنا أذكر للمعلومة فقط ولمن يرغب ،يمكن الأستعانة بالدالة Screen لأضافة خطوط نظامك مباشرة ،وأن يتضمن البرنامج ذلك عند تطويره والبحث عن الخطوط :

For i = 0 To Screen.FontCount - 1
ListBox.AddItem Screen.Fonts(i)
Next i

والله الموفق

#4

شكراً لك أخي عبد العزيز على النصائح، وشكر آخر للأخ عماني على المرور.

لكما منى أرق تحية.

كان الله في عون العبد ما كان العبد في عون أخيه

qushisha@yahoo.com

#5

:thumb_up: :thumb_up:

ما شاء الله تسلم يداك على الكود الجميل وقد انتفعت به كثيرا أشكرك

وعندي استفسار لو تكرمت :

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

path=http://www.XXXXX./vb/font

فكيف أكتب هذا المسار ليقوم البرنامج بقراءة الخطوط من الموقع لو تكرمت

وجزاك الله خيرا.

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