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

Usefi

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

ممنون میشم دوستان کمکم کنن .
 

the_king

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

ممنون میشم دوستان کمکم کنن .
انجام اینکار ساده است، به شرطی که با توابع API ویندوز آشنا باشید.

در این نمونه برنامه ابتدا یک متن فارسی چند سطری توسط دو تابع GetSampleText و Decode ایجاد می شود
و در داخل یک TextBox ای که بایستی مشخصه Multiline اش True باشد مانند Text1 قرار می گیرد.
(تا اینجای کار ارتباطی با چاپ متن ندارد)

اگر روی دکمه Command1 کلیک کنید، تابع PrintTextBox با استفاده از توابع API ویندوز (تابع DrawText سیستم عامل)
متن موجود در تکست باکس را چاپ می کند. پارامتر دوم تابع PrintTextBox موقعیت Y ای است که متن از آن به بعد
چاپ می شود (برحسب سانتی متر)

برای اجرا این برنامه یک CommandButton با نام Command1 و یک TextBox با نام Text1 را روی فرم قرار دهید.

کد:
Option Explicit

Private Const DT_EXTERNALLEADING As Long = &H200
Private Const DT_NOPREFIX As Long = &H800
Private Const DT_RIGHT As Long = &H2
Private Const DT_RTLREADING As Long = &H20000
Private Const DT_TOP As Long = &H0
Private Const DT_WORDBREAK As Long = &H10

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Declare Function DrawTextW Lib "user32.dll" (ByVal hDC As Long, ByVal lpStr As Long, ByVal nCount As Long, ByRef lpRect As RECT, ByVal wFormat As Long) As Long

Private Sub Command1_Click()
    PrintTextBox Text1, 2
    Printer.EndDoc
End Sub

Private Sub Form_Load()
    Dim Text As String
    Text = GetSampleText
    With Text1
        .Text = Text
        .Alignment = vbRightJustify
        .RightToLeft = True
        .Font = "Tahoma"
    End With
End Sub

Private Sub PrintTextBox(ByRef TextBox As TextBox, ByVal Top As Double)
    Dim TextRect As RECT
    Dim TextFlags As Long
    Dim Text As String
    With Printer
        .ScaleMode = vbPixels
        Set .Font = TextBox.Font
        Printer.Line (0, 0)-(1, 1), vbWhite
        .ForeColor = vbBlack
        TextRect.Left = .ScaleX(2, vbCentimeters, vbPixels)
        TextRect.Top = .ScaleY(Top, vbCentimeters, vbPixels)
        TextRect.Right = .ScaleWidth - .ScaleX(2, vbCentimeters, vbPixels)
        TextRect.Bottom = .ScaleHeight - .ScaleY(2, vbCentimeters, vbPixels)
        TextFlags = DT_EXTERNALLEADING Or DT_NOPREFIX Or DT_TOP Or DT_WORDBREAK
        If TextBox.RightToLeft Then TextFlags = TextFlags Or DT_RTLREADING
        If TextBox.Alignment = vbRightJustify Then TextFlags = TextFlags Or DT_RIGHT
        Text = TextBox.Text
        DrawTextW .hDC, StrPtr(Text), Len(Text), TextRect, TextFlags
    End With
End Sub

Private Function Decode(ByRef Text As String) As String
    Dim Pos As Long
    For Pos = 1 To Len(Text) Step 2
        Decode = Decode & Chr(Val("&H" & Mid(Text, Pos, 2)))
    Next
End Function

Private Function GetSampleText() As String
    Dim S As String
    S = "C7CCD1C720E620DAE3E1ED20D3C7CECAE420C7E190E6D1EDCAE320E5C7ED20C7E4CAD2"
    S = S & "C7DAED20E6C7C8D3CAE520C8E520E5E320C8E520E6D3EDE1E520CAE6E1EDCF20ED9820"
    S = S & "C8D1E4C7E3E520D1C7EDC7E4E520C7ED20E3D4CED520C8C720C7C8D2C7D120D2C8C7E4"
    S = S & "20C8D1E4C7E3E520E4E6EDD3ED20E3E398E420C7D3CA2E2090D18DE520E4D2CFED9820"
    S = S & "CAD1EDE420D1C7E520C8D1C7ED20C8C7D2D3C7D2ED20C7EDE420DEE6C7E4EDE420CFD1"
    S = S & "20D1C7EDC7E4E52098C7D120D1E6ED20E3CFC7D1E5C7ED20C7E198CAD1E6E4ED98ED20"
    S = S & "D3CECA20C7DDD2C7D120C2E420C7D3CA2E20C7E3C720C7EDE42098C7D1ED20D8C7DECA"
    S = S & "20DDD1D3C720E620D2E3C7E420C8D120E620CFD1E4CAEDCCE52098E3C7C8EDD420E4C7"
    S = S & "E3E398E420C7D3CA2E20E6C7D3D820E5C7EDED20D3C7CECAE520D4CFE4CF20CAC720E3"
    S = S & "EDC7E420D3CECA20C7DDD2C7D120E620C7E4D3C7E420DED1C7D12090EDD1CF2E20D8C8"
    S = S & "EDDAED20C7D3CA20ED9820E6C7D3D820C8E520D3C7CFE52098D1CFE420E620C7E4CAD2"
    S = S & "C7DAED2098D1CFE420D1E6EDCFC7CFE5C7ED20E3E398E420CFD1E6E420D3CECA20C7DD"
    S = S & "D2C7D120E3ED2081D1CFC7D2CF2E20C7EDE420C7E4CAD2C7DAED2098D1CFE4A120D3"
    S = S & "C7D2E4CFE520D3D8E6CD2090E6E4C790E6E420EDC720E1C7EDE520C8E4CFED20CFD120"
    S = S & "E3DAE3C7D1ED20D2EDD1D3C7CECA20C8D1E4C7E3E520E5C720C7D3CA2E20C8E520E5E3"
    S = S & "EDE420CAD1CAEDC820D2C8C7E420E5C7ED20C8D1E4C7E3E520E4E6EDD3ED2090E6E4C7"
    S = S & "90E6E420E5E320E5D198CFC7E320C8D1C7ED20D3C7CECA20C8D1E4C7E3E520E5C7ED20"
    S = S & "ED9820EDC720D4E3C7D1ED20C7E4CF9820C7D220C7EDE420E1C7EDE520E5C720DEC7C8"
    S = S & "E120C7D3CADDC7CFE520E5D3CAE4CF2E20C8C720E3CADDC7E6CA20C8E6CFE420C2E48D"
    S = S & "E520C8D1E4C7E3E520E4E6EDD320C8D1C7ED20C2D3C7E4ED20C7D3CADDC7CFE520CEE6"
    S = S & "CF20C2DDD1EDCFE520C8C720E6D1E6CFED20E6C7DEDAED20D3CECA20C7DDD2C7D120C8"
    S = S & "D1C7ED20C7CCD1C7ED20DDD1C7E3EDE4202898E520C8E520D2C8C7E420E3C7D4EDE420"
    S = S & "E3DAD1E6DD20C7D3CA2920C8D1E4C7E3E520E6C7D3D820C8C7EDCF20D4EDE6E520CED8"
    S = S & "20C8D1E4C7E3E520E4E6EDD320D1C720C8E520D2C8C7E420E3C7D4EDE420C8D190D1CF"
    GetSampleText = Decode(S & "C7E4CF2E")
End Function
 

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

بالا