اگه اجازه بفرمایین یه سوال دیگه از خدمتتون بپرسم . در ادامه همون دستورات من کدهای زیر رو نوشتم :
کد:
CommonDialog1.ShowFont
Printer.Font.Name = CommonDialog1.FontName
Printer.Font.Size = CommonDialog1.FontSize
Printer.Font.Bold = CommonDialog1.FontBold
Printer.Font.Italic = CommonDialog1.FontItalic
اما موقع ران کردن برنامه یه خطا میده و مگه که فونتی در سیستم نصب نشده و برای نصب فونت به کنترل پانل قسمت فونت برید . اما من در سیستمم بیشتر از 1000 فونت نصب شده دارم!؟!؟! دلیلش رو میشه بفرمایین که چرا خطا میگیره و چجوری میشه برطرفش کرد . ممنون
دلیلش اینه که CommonDialog برای نمایش لیست فونت ها به یکسری پارامتر نیاز داره، این پارامتر ها در مشخصه Flags
دریافت می شوند و شما بصورت پیشفرض هیچ مقداری رو بهش ارسال نکردید. مهمترین پارامتری که باید مشخص کنید
نوع فونت هایی است که بایستی نمایش داده شوند (فونت های نمایشگر، فونت های چاپگر، فونت های بیت مپ (Bitmap) ،
فونت های TrueType و ...). چون هیچکدام را انتخاب نکرده اید، فونتی نیز وجود ندارد که نمایش داده شود.
نکته : پارامتر های Flags را بصورت اصولی با عملگر Or با هم ترکیب کنید و از بکارگیری عملگر + خودداری نمایید.
به کد زیر توجه کنید، این کد شیوه اصولی استفاده از ShowFont را نشان می دهد :
کد:
With CommonDialog1
.FontName = Printer.Font.Name
.FontSize = Printer.Font.Size
.FontBold = Printer.Font.Bold
.FontItalic = Printer.Font.Italic
.FontUnderline = Printer.Font.Underline
.FontStrikethru = Printer.Font.Strikethrough
.Color = Printer.ForeColor
[B] .Flags = cdlCFScalableOnly Or cdlCFEffects Or cdlCFBoth Or cdlCFTTOnly Or cdlCFWYSIWYG[/B]
.ShowFont
Printer.Font.Name = .FontName
Printer.Font.Size = .FontSize
Printer.Font.Bold = .FontBold
Printer.Font.Italic = .FontItalic
Printer.Font.Underline = .FontUnderline
Printer.Font.Strikethrough = .FontStrikethru
Printer.ForeColor = .Color
End With
لیست کلیه پارامتر هایی که در مشخصه Flags می توانند بکار روند اینها هستند :
cdlCFANSIOnly فقط از فونت هایی استفاده شود که Character Set شان ANSI است. مثلا فونت Wingdings که
Character Set اش Symbol است، با بکار بردن این پارامتر نمایش داده نمی شود.
cdlCFBoth هم فونت های ویژه Printer (موجود در چاپگر) و هم فونت های ویژه Screen (فونت های عادی ویندوز)
نمایش داده شوند. البته مقدار این پارامتر را می توان با ترکیب دو پارامتر (cdlCFPrinterFonts Or cdlCFScreenFonts)
هم ایجاد کرد. دقت کنید که تضمینی وجود ندارد که فونت های نمایش داده شده، حتما در هر دو مجموعه مشترکا
وجود داشته باشند.
cdlCFEffects مشخصه های Underline و StrikeThrough و Color هم در لیست نمایش یابند.
cdlCFFixedPitchOnly فقط فونت هایی که اندازه های ثابت و مشخصی را دارند نمایش یابند. فونت های Bitmap
چنین ویژگی ای دارند.
cdlCFForceFontExist اگر کاربر سعی در انتخاب فونت یا مشخصه ای کرد که در لیست وجود ندارد، پیغام خطایی
نمایش داده شود.
cdlCFHelpButton یک دکمه Help هم در پنجره CommonDialog نمایش داده شود.
cdlCFLimitSize در لیست Size های موجود برای فونت ها، صرفا اعدادی نمایش یابند که بین دو مشخصه Min
و Max هستند (ایندو مشخصه Min و Max در مجموعه مشخصه های CommonDialog وجود دارد).
cdlCFNoFaceSel در هنگام نمایش پنجره CommonDialog، هیچ نام فونتی انتخاب نشده باشد.
cdlCFNoSimulations هیچگونه شبیه سازی گرافیکی برای نمایش یک مشخصه انجام نشود، مثلا اگر فونتی
حالت Italic ندارد، این حالت شبیه سازی نشود و Italic به لیست مشخصه های فونت اضافه نگردد.
cdlCFNoSizeSel در هنگام نمایش پنجره CommonDialog، هیچ Size ای برای فونت انتخاب نشده باشد.
cdlCFNoStyleSel در هنگام نمایش پنجره CommonDialog، هیچ مشخصه ای مانند Bold یا Italic برای فونت
انتخاب نشده باشد.
cdlCFPrinterFonts فقط لیست فونت هایی نمایش داده شود که در مجموعه فونت های چاپگر وجود دارند.
cdlCFScalableOnly فقط فونت های نمایش پیدا کنند که Size شان به هر اندازه دلخواهی قابل تغییر باشد،
فونت های TrueType و OpenType چنین ویژگی ای دارند.
cdlCFScreenFonts فقط لیست فونت هایی نمایش داده شود که در مجموعه فونت های عادی ویندوز وجود دارند.
cdlCFTTOnly فقط فونت های در لیست نمایش یابند که TrueType (و یا OpenType) باشند.
cdlCFWYSIWYG فقط فونت هایی نمایش یابند که بطور مشترک هم در مجموعه فونت های چاپگر باشند و هم
در مجموعه فونت های نمایشی ویندوز، بدین ترتیب تضمین می شود که آن فونتی که در صفحه نمایش می بینید،
دقیقا همان فونتی است که هنگام چاپ در چاپگر بکار می رود. این پارامتر بایستی حتما همراه با cdlCFBoth و
cdlCFScalableOnly بکار برده شود.