سؤال

ما هي أفضل طريقة للعثور على جميع خطوط النظام المتوفرة لدى المستخدم بحيث يمكن عرضها في مربع تحديد القائمة المنسدلة؟

أود أيضًا التمييز بين خطوط Unicode والخطوط غير Unicode.

أنا أستخدم Delphi 2009 الذي تم تمكين Unicode فيه بالكامل، وأرغب في الحصول على حل لـ Delphi.

هل كانت مفيدة؟

المحلول

ال Screen.Fonts يتم ملء العقار عبر EnumFontFamiliesEx وظيفة واجهة برمجة التطبيقات.إنظر في Forms.pas للحصول على مثال لاستدعاء تلك الوظيفة.

سوف تتلقى وظيفة رد الاتصال التي تستدعيها TNewTextMetricEx السجل، وأحد أعضاء هذا السجل هو أ TFontSignature.ال fsUsb يشير الحقل إلى نطاقات Unicode الفرعية التي يدعي الخط أنها تدعمها.

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

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

نصائح أخرى

وأستطيع الإجابة نصف سؤالك، يمكنك الحصول على قائمة من الخطوط التي البيئة الحالية الخاصة بك لديه حق الوصول إلى كقائمة سلسلة من وجوه الشاشة العالمي

وأي بمعنى.

Listbox1.Items.AddStrings(Screen.Fonts);

ويمكنك أن تبحث في مصدر forms.pas لنرى كيف Codegear ملء Screen.Fonts بواسطة تعداد الخطوط ويندوز. بنية LOGFONT عاد هذا عضوا محارف، ولكن هذا لا يوفر "يونيكود" تقرير بسيط.

وبقدر ما أعرف ويندوز لا يمكن أن أقول لكم صراحة إذا كان الخط هو "يونيكود". وعلاوة على ذلك إذا حاولت عرض النص Unicode في الخط و"غير يونيكود 'ويندوز قد استبدال خط مختلف، لذلك من الصعب القول ما إذا كان الخط سوف أو لن يتم عرض يونيكود. على سبيل المثال لدي ارييل ملف أسود الخط القديم التي لا تحتوي على رموزا يونيكود، ولكن إذا كنت تستخدم هذا لعرض النص الياباني في مذكرة D2009، واليابانية تظهر بشكل صحيح في ارييل والباقي في ارييل الأسود. وفي أمثلة أخرى، قد تظهر المربعات الفارغة المعتادة حتى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top