تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشروع بناء أداة طباعة
#41
محمود رغمان كتب :[SIZE=7]ربنا يصلح بالك [/SIZE]
نرجو أن تنظر لنا وتوفى بوعدك
بارك الله فيك

أرجو المعذرة، انشغلت عن عالم البرمجة قليلاً وأنا في هذه الأيام مجبر على العودة إليه وإلى عالم الطباعة بسبب مشروع متوسط

وسأفي إن شاء الله
الرد }}}
تم الشكر بواسطة:
#42
Ruru86 كتب :السلام عليكم
اخي لو سمحت هل ممكن من حفظ فورم الطباعة كملف ورد
وسؤال ثاني كيف بامكاني ان اطبع فاتورة تكون بأكثر من صفحة ولك مني جزيل الشكر

عليكم السلام

لا أدري ، ولكن يمكن حفظه كـ pdf وذلك بتثبيت طابعة pdf (طابعة غير فيزيائية طبعا)

السؤال الثاني لاحقاً أجيب وأمره بسيط
الرد }}}
تم الشكر بواسطة:
#43
بارك الله فيك يا اخي ابو بعقوب

على اداة رائعه سوف استخدمة في مشروع تخرج ...

لك مني جزيل الشكر ...
الرد }}}
تم الشكر بواسطة:
#44
ِشكرا ابو يعقوب وبانتظار ردك على الطباعة في اكثر من صفحة
الرد }}}
تم الشكر بواسطة:
#45
إقتباس :شكرا ابو يعقوب وبانتظار ردك على الطباعة في اكثر من صفحة

حسب مساحة البيانات سيطبع في أكثر من صفحة إذا لم تتسع صفحة واحدة، يعني اوتوماتيك

ما المشكلة ؟
الرد }}}
تم الشكر بواسطة:
#46
المشكلة اني اضفت ليست فيو وثم بعض النصوص عندما يصبح حجم الليست فيو اكبر من حد معين ينتقل كمالته للصفحة الثانية
اي لا يتم تكملة الليست فيو ومن ثم النص
وارغب ان يظهر لي page1of 2
page 2 of 2
فلا تظهر
الرد }}}
تم الشكر بواسطة:
#47
مشروع رائع جدا وانا اعمل عليه الان بكل كفاءة ولكن لدية اقتراح و أظن انا بعض المشاركيين يشاطروني الرائ وهو طباعة النص بشكل عمودي وهي خاصية تضاف الى الاداة printlabel حتي تضهر بشكل عمودي ومن ثمة يضاف اعدادات نص طباعة في كلاس

labelprint وفي الاخير تقبلو مني فائق التقدير و الشكر .عفوا على رداءة الكتاية
الرد }}}
تم الشكر بواسطة:
#48
Ruru86 كتب :المشكلة اني اضفت ليست فيو وثم بعض النصوص عندما يصبح حجم الليست فيو اكبر من حد معين ينتقل كمالته للصفحة الثانية
اي لا يتم تكملة الليست فيو ومن ثم النص
وارغب ان يظهر لي page1of 2
page 2 of 2
فلا تظهر

هذه المشكلة كنت أريدها أن تُحل أوتماتيكياً وهو الذي أخر المشروع وفي النهاية استسلمت وابتكرت حل مؤقت وهو خاصية StageIndex ،

بهذه الخاصية تحلين المشكلة، مثلا جدول الفاتورة يستغرق صفحتين ولكنك لا تريدين أن يطبع المجموع قبل أن يكتمل الجدول لذلك الحل هو تأخير المجموع إلى المرحلة التي تليه يعني اللست فيو مرحلتها رقمها 0، والمجموع مرحلته قيمتها 1

هذه الخاصية مضمنة في كل الأدوات المدعومة

بالمناسبة هناك خاصية PrintIndex وهي للتحكم في ترتيب طباعة الأدوات خلال المرحلة الواحدة

======================

بخصوص رقم الصفحة

شيء طبيعي أنه يجب أن يتكرر في كل صفحة، ولهذا يجب أن يضاف في سكشن \قسم خاص لنسميه Footer قمت بإضافة خاصية لكي يتكرر طباعة السكشن في كل صفحة هذه الخاصية موجودة في السكشن باسم Repeat ، إذا كانت True سيتكرر طباعة محتوى السكشن\ Section في كل صفحة

لذلك الليبل المخصص لعرض رقم الصفحة يجب أن يوضع في سكشن خاصيته Repeat=True


لا أدري إن كنت شرحت كيفية تضبيط الليبل ليعرض رقم الصفحة، نجعل الخاصية IsPageNumber=True

ثم نتحكم في الفورمات عن طريق خاصية Text ، أينما وجد [pn] في النص سيستبدل أثناء الطباعة برقم الصفحة، وأينما وجد [pc] في النص سيستبدل بعدد الصفحات الكلي
الرد }}}
تم الشكر بواسطة:
#49
jascar كتب :مشروع رائع جدا وانا اعمل عليه الان بكل كفاءة ولكن لدية اقتراح و أظن انا بعض المشاركيين يشاطروني الرائ وهو طباعة النص بشكل عمودي وهي خاصية تضاف الى الاداة printlabel حتي تضهر بشكل عمودي ومن ثمة يضاف اعدادات نص طباعة في كلاس

labelprint وفي الاخير تقبلو مني فائق التقدير و الشكر .عفوا على رداءة الكتاية

يسعدني أن الأداة نفعتك، واقتراحك جميل وتطبيقه سهل، طبعا تستطيع عمل ذلك بإستخدام أداة الصورة كحل مؤقت
الرد }}}
تم الشكر بواسطة:
#50
مشكور سيدي على ردك ولكنني لا اعرف كيف استعمل اداة PrintPictureBox في كتابة نصوص عمودية او مستقيمة ربما احتج الى اجراآت GDI لرسم نصوص ثم طباعتها .... المهم لقد اعجبتني فكرة مشروعك انه هنلك اداة لوقت التصميم

PrintLabel ثم كلاس LabelPrinter الذي يترجم الاداة للطباعة عن طريق الرسم وبما انك تركت المشروع قيد التطوير ومن خلال بحث النترنت قمت باضافة بعض الكودات الي الاداة PrintLabel لكي يضهر النص بالزاوية التي تريدها

وهدا هو الكود :
كود :
[align=left]Imports System.Drawing.Design
<ToolboxBitmap(GetType(Label))> _
Public Class PrintLabel
    Inherits Label
    Implements IPrintableControl
    Friend Const pn As String = "[pn]"
    Friend Const pc As String = "[pc]"
    Private mRotationAngle As Double
    Private mText As String
    Public Sub New()
        MyBase.AutoSize = False
    End Sub

#Region "Properties"

#Region "Appearance"
    <Category("Printing Appearance: Common"), Description("مساواة العرض أثناء الطباعة بالعرض أثناء التصميم")> _
    Public Property FitMaxWidth As Boolean = True
    <Category("Printing Appearance: Common"), Description("مساواة الطول أثناء الطباعة بالطول أثناء التصميم")> _
    Public Property FitMaxHeight As Boolean = True
    <Category("Printing Appearance"), Description("شكل الإطار الخارجي")> _
    Public Property Border() As DashStyle = DashStyle.Solid
    <Category("Printing Appearance"), Description("سُمك الإطار الخارجي")> _
    Public Property BorderSize() As Integer = 0
    <Category("Printing Appearance"), Description("لون الإطار الخارجي")> _
    Public Property BorderColor() As Color = Color.Black
#End Region

#Region "Printing Data"
    Private _SourceControl As Label
    <Browsable(False)> _
    Public Property SourceControl As System.Windows.Forms.Control Implements IPrintableControl.SourceControl
        Get
            If _SourceControl Is Nothing Then
                _SourceControl = Me
            End If
            Return _SourceControl
        End Get
        Set(ByVal value As System.Windows.Forms.Control)
            _SourceControl = value
        End Set
    End Property
    <Category("Appearance"), Description("تحديد ما إذا كان الحقل لعرض رقم الصفحة، استخدم خاصية النص للتنسيق  ,[pn]=Page Number, [pc]=Page Count")> _
    Public Property IsPageNumber As Boolean = False
#End Region

#Region "Printing Components"
    Dim _Printer As LabelPrinter
    <Browsable(False)> _
    Public ReadOnly Property Printer As Printer Implements IPrintableControl.Printer
        Get
            If _Printer Is Nothing Then
                _Printer = New LabelPrinter(Me)
            End If
            Return _Printer
        End Get
    End Property

    <Browsable(False)> _
    Public ReadOnly Property Section As Section Implements IPrintableControl.Section
        Get
            Return CType(Me.Parent, Section)
        End Get
    End Property
#End Region

#Region "Printing Behavior"
    <Category("Printing Behavior"), Description("تفعيل مقياس الرسم الأفقي")> _
    Public Property ScaleHorizontal As Boolean = True Implements IPrintableControl.ScaleHorizontal
    <Category("Printing Behavior"), Description("تفعيل مقياس الرسم الرأسي")> _
    Public Property ScaleVertical As Boolean = True Implements IPrintableControl.ScaleVertical
    <Category("Printing Behavior"), Description("رتبة مرحلة الطباعة")> _
    Public Property StageIndex As Integer Implements IPrintableControl.StageIndex
    <Category("Printing Behavior"), Description("رتبة الأداة أثناء مرحلة الطباعة")> _
    Public Property PrintIndex As Integer Implements IPrintableControl.PrintIndex
    <Category("Printing Behavior"), Description("تحديد ما إذا كانت الأداة تستكمل طباعتها في صفحات تالية أو لا")> _
    Public Property OnePageOnly As Boolean = False Implements IPrintableControl.OnePageOnly
#End Region
#Region " Rotation Angle"
    <Description("Rotation Angle"), Category("Appearance")> _
    Public Property RotationAngle() As Double
        Get
            Return mRotationAngle
        End Get
        Set(ByVal value As Double)
            mRotationAngle = value
            MyBase.Invalidate() 'Force a redraw when the angle is changed
        End Set
    End Property
#End Region
#Region "Display Text"
    <Description("Display Text"), Category("Appearance")> _
    Public Overrides Property Text() As String
        'we override the text property so we can force a redraw
        Get
            Return mText
        End Get
        Set(ByVal value As String)
            mText = value
            MyBase.Invalidate()
        End Set
    End Property
#End Region
#End Region
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        Dim graphics As Graphics = e.Graphics
        Dim stringFormat As StringFormat = New StringFormat
        stringFormat.Alignment = StringAlignment.Center
        stringFormat.Trimming = StringTrimming.None

        Dim textBrush As Brush = New SolidBrush(MyBase.ForeColor)

        'Getting the width and height of the text, which we are going to write
        Dim width As Double = graphics.MeasureString(Text, MyBase.Font).Width
        Dim height As Double = graphics.MeasureString(Text, MyBase.Font).Height

        'For rotation, you need to convert to radians
        Dim angle As Double = (RotationAngle / 180) * Math.PI
        graphics.TranslateTransform( _
             (ClientRectangle.Width + CDbl(height * Math.Sin(angle)) - CDbl(width * Math.Cos(angle))) / 2, _
             (ClientRectangle.Height - CDbl(height * Math.Cos(angle)) - CDbl(width * Math.Sin(angle))) / 2)
        graphics.RotateTransform(CDbl(RotationAngle))
        graphics.DrawString(Text, MyBase.Font, textBrush, 0, 0)
        graphics.ResetTransform()
    End Sub
#Region "Methods"
    Protected Overrides Sub OnParentChanged(ByVal e As System.EventArgs)
        If Me.Parent IsNot Nothing Then
            If Not TypeOf Parent Is Section Then
                Me.Parent.Controls.Remove(Me)
            End If
        End If
    End Sub
    Sub ChangeText()

    End Sub
#End Region



End Class[/align]
لكن واجهتني عدة مشاكل لانني مازلت لم افهم الكود جيدا لاعادة رسم الاداة اواعادة نسخها ان صح التعبير تم طباعتها وايضا لم تنجح فكرة الزاوية المهم اضفت

الى كلاس الطباعة هدا الكود :

كود :
[align=left]Dim direction As New StringFormat(StringFormatFlags.DirectionVertical)
....
....
g.DrawString(CurText, txt.Font, New SolidBrush(txt.ForeColor), Rec, direction) [/align]
حيث يتم طباعة بشكل عمودي ولكن عند استعمال g.Graphics.RotateTransform واستعمال الزاوية الموجودة في خاصية Rotation Angle لايتم ضهور النص او يضهر لكن ليس في المكان المطلوب

المهم سيدي انا اعلم انه كثرت عليك الاقتراحات هناك من يطلب الطباعة في عدة صفحات والطباعة العمودية ووووو...

واخيرا للامانة الاكواد ليست من انجازي فلقد وجدتها في النترنت ..
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم