واضح آرشیو وب فارسی:سایت ریسک: مشکل با پرینت کردن یک تکست باکس مولتی لاین Usefi 11 بهمن 1387, 11:50سلام خدمت همه دوستان در مورد پرینت گرفتن یک تکست باکس مولتی لاین به مشکل برخوردم. من میخوام یک تکست باکس مولتی لاین رو پرینت بگیرم به طوریکه کارنت ایکس اولیش 2 سانتی متر باشه و تا دو سانتی متر مونده به انتهای کاغذ چاپ بشه و وقتی که دو سانتی متر مونده بود به انتهای کاغذ به خط بعدی بره و دوباره و کارنت ایکس مساوی دو ادامه متن رو چاپ کنه و این روال تا زمانی ادامه پیدا کنه که متن تکست باکس تموم بشه . ممنون میشم دوستان کمکم کنن . the_king 11 بهمن 1387, 21:50سلام خدمت همه دوستان در مورد پرینت گرفتن یک تکست باکس مولتی لاین به مشکل برخوردم. من میخوام یک تکست باکس مولتی لاین رو پرینت بگیرم به طوریکه کارنت ایکس اولیش 2 سانتی متر باشه و تا دو سانتی متر مونده به انتهای کاغذ چاپ بشه و وقتی که دو سانتی متر مونده بود به انتهای کاغذ به خط بعدی بره و دوباره و کارنت ایکس مساوی دو ادامه متن رو چاپ کنه و این روال تا زمانی ادامه پیدا کنه که متن تکست باکس تموم بشه . ممنون میشم دوستان کمکم کنن . انجام اینکار ساده است، به شرطی که با توابع API ویندوز آشنا باشید. در این نمونه برنامه ابتدا یک متن فارسی چند سطری توسط دو تابع GetSampleText و Decode ایجاد می شود و در داخل یک TextBox ای که بایستی مشخصه Multiline اش True باشد مانند Text1 قرار می گیرد. (تا اینجای کار ارتباطی با چاپ متن ندارد) اگر روی دکمه Command 1 کلیک کنید، تابع PrintTextBox با استفاده از توابع API ویندوز (تابع DrawText سیستم عامل) متن موجود در تکست باکس را چاپ می کند. پارامتر دوم تابع PrintTextBox موقعیت Y ای است که متن از آن به بعد چاپ می شود (برحسب سانتی متر) برای اجرا این برنامه یک CommandButton با نام Command 1 و یک 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 Command 1_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 = "C7CCD 1C720E620DAE3E1ED 20D 3C7CECAE420C7E190E6D 1EDCA E320E5C7ED 20C7E4CAD 2" S = S & "C7DAED 20E6C7C8D 3CAE520C8E520E5E320C8E520E6D 3EDE1E5 20CAE6E1EDCF20ED 9820" S = S & "C8D 1E4C7E3E520D 1C7EDC7E4E520C7ED 20E3D 4CED 520C8C720 C7C8D 2C7D 120D 2C8C7E4" S = S & "20C8D 1E4C7E3E520E4E6EDD 3ED 20E3E398E420C7D 3CA 2E2090 D 18DE520E4D 2CFED 9820" S = S & "CAD 1EDE420D 1C7E520C8D 1C7ED 20C8C7D 2D 3C7D 2ED 20C7EDE4 20DEE6C7E4EDE420CFD 1" S = S & "20D 1C7EDC7E4E52098C7D 120D 1E6ED 20E3CFC7D 1E5C7ED 20C7 E198CAD 1E6E4ED 98ED 20" S = S & "D 3CECA 20C7DDD 2C7D 120C2E420C7D 3CA 2E20C7E3C720C7EDE4 2098C7D 1ED 20D 8C7DECA" S = S & "20DDD 1D 3C720E620D 2E3C7E420C8D 120E620CFD 1E4CAEDCCE5 2098E3C7C8EDD 420E4C7" S = S & "E3E398E420C7D 3CA 2E20E6C7D 3D 820E5C7EDED 20D 3C7CECAE5 20D 4CFE4CF20CAC720E3" S = S & "EDC7E420D 3CECA 20C7DDD 2C7D 120E620C7E4D 3C7E420DED 1C7 D 12090EDD 1CF2E20D 8C8" S = S & "EDDAED 20C7D 3CA 20ED 9820E6C7D 3D 820C8E520D 3C7CFE52098 D 1CFE420E620C7E4CAD 2" S = S & "C7DAED 2098D 1CFE420D 1E6EDCFC7CFE5C7ED 20E3E398E420CF D 1E6E420D 3CECA 20C7DD" S = S & "D 2C7D 120E3ED 2081D 1CFC7D 2CF2E20C7EDE420C7E4CAD 2C7DA ED 2098D 1CFE4A 120D 3" S = S & "C7D 2E4CFE520D 3D 8E6CD 2090E6E4C790E6E420EDC720E1C7ED E520C8E4CFED 20CFD 120" S = S & "E3DAE3C7D 1ED 20D 2EDD 1D 3C7CECA 20C8D 1E4C7E3E520E5C720 C7D 3CA 2E20C8E520E5E3" S = S & "EDE420CAD 1CAEDC820D 2C8C7E420E5C7ED 20C8D 1E4C7E3E520 E4E6EDD 3ED 2090E6E4C7" S = S & "90E6E420E5E320E5D 198CFC7E320C8D 1C7ED 20D 3C7CECA 20C8 D 1E4C7E3E520E5C7ED 20" S = S & "ED 9820EDC720D 4E3C7D 1ED 20C7E4CF9820C7D 220C7EDE420E1 C7EDE520E5C720DEC7C8" S = S & "E120C7D 3CADDC7CFE520E5D 3CAE4CF2E20C8C720E3CADDC7E6 CA 20C8E6CFE420C2E48D" S = S & "E520C8D 1E4C7E3E520E4E6EDD 320C8D 1C7ED 20C2D 3C7E4ED 20 C7D 3CADDC7CFE520CEE6" S = S & "CF20C2DDD 1EDCFE520C8C720E6D 1E6CFED 20E6C7DEDAED 20D 3 CECA 20C7DDD 2C7D 120C8" S = S & "D 1C7ED 20C7CCD 1C7ED 20DDD 1C7E3EDE4202898E520C8E520D 2 C8C7E420E3C7D 4EDE420" S = S & "E3DAD 1E6DD 20C7D 3CA 2920C8D 1E4C7E3E520E6C7D 3D 820C8C7 EDCF20D 4EDE6E520CED 8" S = S & "20C8D 1E4C7E3E520E4E6EDD 320D 1C720C8E520D 2C8C7E420E3 C7D 4EDE420C8D 190D 1CF" GetSampleText = Decode(S & "C7E4CF2E") End Function
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 477]