مشکل با پرینتر در vb

Usefi

Member
با سلام خدمت تمام دوستان . به یه مشکل برخوردم تو کار با پرینتر , اونم این بود که وقتی که برای کاغذ طول و عرض تعریف میکنم متن من رو چاپ نمیکنه . کد زیر رو مینویسم :

کد:
Printer.ScaleMode = vbCentimeters
Printer.Height = 34.5
Printer.Width = 24.5
Printer.RightToLeft = True
Printer.Font.Name = "nazanin"
Printer.Font.Size = 12
Printer.CurrentX = 10
Printer.CurrentY = 10
Printer.Print Text1.Text
Printer.EndDoc

الام به جای اینکه تو یه برگه با اندازه ای که من بهش ددم من تکست باکس رو چاپ کنه , سه تا برگه خالی چاپ میکنه . ممنون میشم بفرمایین مشکل این کدها از کجاست
 

the_king

مدیرکل انجمن
با سلام خدمت تمام دوستان . به یه مشکل برخوردم تو کار با پرینتر , اونم این بود که وقتی که برای کاغذ طول و عرض تعریف میکنم متن من رو چاپ نمیکنه . کد زیر رو مینویسم :

کد:
Printer.ScaleMode = vbCentimeters
Printer.Height = 34.5
Printer.Width = 24.5
Printer.RightToLeft = True
Printer.Font.Name = "nazanin"
Printer.Font.Size = 12
Printer.CurrentX = 10
Printer.CurrentY = 10
Printer.Print Text1.Text
Printer.EndDoc

الام به جای اینکه تو یه برگه با اندازه ای که من بهش ددم من تکست باکس رو چاپ کنه , سه تا برگه خالی چاپ میکنه . ممنون میشم بفرمایین مشکل این کدها از کجاست

در نوشتن مقادیر Width و Height یک نکته را در نظر نگرفته اید، مقدار ScaleMode کوچکترین تاثیری روی واحد و مقادیر
Width و Height ندارد. به خاطر داشته باشید که همیشه در Printer و Form و Screen و UserControl ها،
مقادیر دو مشخصه Width و Height بر حسب Twips است و این واحد هیچگاه تغییری نمی کند.
برای خواندن این دو مقدار بر حسب ScaleMode می توانید از ScaleWidth و ScaleHeight استفاده کنید
(فقط برای خواندن، وگرنه برای تغییر ابعاد Width و Height نمی توانید از دو مشخصه ScaleWidth و
ScaleHeight استفاده کنید، تغییر آنها تنها واحد را به مقدار دلخواهی تغییر می دهد).

چون ابعاد 34.5 و 24.5 بر حسب Twips یک مربع حدودا 2 در 2 پیکسل بیشتر نیست (هر پیکسل در صفحه نمایش های
فعلی 15 twips است)، چیزی چاپ نمی شود.

برای تغییر Width و Height بایستی توسط دو تابع ScaleX و ScaleY مقادیر را از واحد مورد نظر به vbTwips تغییر دهید :

کد:
    Printer.ScaleMode = vbCentimeters
[B]    Printer.Height = Printer.ScaleY(34.5, vbCentimeters, vbTwips)
    Printer.Width = Printer.ScaleX(24.5, vbCentimeters, vbTwips)
[/B]    Printer.RightToLeft = True
    Printer.Font.Name = "Nazanin"
    Printer.Font.Size = 12
    Printer.CurrentX = 10
    Printer.CurrentY = 10
    Printer.Print Text1.Text
    Printer.EndDoc
 

Usefi

Member
واقعا ممنونم
به نکته خوبی اشاره کردین که کلا از یاد برده بودم
دستتون درد نکنه
 

Usefi

Member
مشکل با فونت

اگه اجازه بفرمایین یه سوال دیگه از خدمتتون بپرسم . در ادامه همون دستورات من کدهای زیر رو نوشتم :

کد:
CommonDialog1.ShowFont
Printer.Font.Name = CommonDialog1.FontName
Printer.Font.Size = CommonDialog1.FontSize
Printer.Font.Bold = CommonDialog1.FontBold
Printer.Font.Italic = CommonDialog1.FontItalic

اما موقع ران کردن برنامه یه خطا میده و مگه که فونتی در سیستم نصب نشده و برای نصب فونت به کنترل پانل قسمت فونت برید . اما من در سیستمم بیشتر از 1000 فونت نصب شده دارم!؟!؟! دلیلش رو میشه بفرمایین که چرا خطا میگیره و چجوری میشه برطرفش کرد . ممنون
 

the_king

مدیرکل انجمن
اگه اجازه بفرمایین یه سوال دیگه از خدمتتون بپرسم . در ادامه همون دستورات من کدهای زیر رو نوشتم :

کد:
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 بکار برده شود.
 
آخرین ویرایش توسط مدیر:

جدیدترین ارسال ها

بالا