الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طباعة كائن الـ Picture بكل محتوياتة علي الطابعة

بدأه MMA_EG_Cairo في 16 أكتوبر 2012 · 6 رد · 861 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرفق مثال توضيحي

أرجو المساعدة

Simble.rar

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#2

السلام عليكم...

أضف PictureBox آخر إلى الـ Form (الكود يفترض أن اسمه Picture2). لا يهم حجمه و مكانه لأنه سيتم ضبطه بالكود، و سيكون مخفياً.

أكتب الأكواد التالية حسب مكانها:

' قسم التصريحات العام
Private Const SRCCOPY = &HCC0020

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

' عند تحميل النافذة
Private Sub Form_Load()
    ' ضبط خصائص مربع الصورة المخفي
    With Picture2
        .ScaleMode = vbPixels       ' ( = 3 - Pixel )
        .BorderStyle = 0            ' ( = 0 - None )
        .Width = Picture1.Width
        .Height = Picture1.Height
        .AutoRedraw = True
        .Visible = False
    End With
End Sub

' زر الطباعة
Private Sub cmdPrint_Click()
    Dim hPicDC As Long
    Dim OldMode As ScaleModeConstants
    Dim WidthPixels As Long
    Dim HeightPixels As Long

' الحصول على المقبض الرسومي للإطار
    hPicDC = GetDC(Picture1.hwnd)
    If hPicDC <> 0 Then
        ' تحويل عرض و ارتفاع الإطار إلى وحدة البكسل
        WidthPixels = Me.ScaleX(Picture1.Width, Me.ScaleMode, vbPixels)
        HeightPixels = Me.ScaleY(Picture1.Height, Me.ScaleMode, vbPixels)
        ' مسح مربع الصورة المخفي و رسم صورة الإطار به - بكل محتوياته
        Picture2.Cls
        BitBlt Picture2.hdc, 0, 0, WidthPixels, HeightPixels, hPicDC, 0, 0, SRCCOPY

        ' ضبط و تهيئة الطابعة
        OldMode = Printer.ScaleMode
        Printer.ScaleMode = vbPixels
        Printer.Print "";
        ' نسخ الصورة إلى الطابعة
        Printer.PaintPicture Picture2.Image, 0, 0, WidthPixels, HeightPixels, 0, 0, WidthPixels, HeightPixels
        ' إعطاء الأمر بالطباعة
        Printer.EndDoc
        Printer.ScaleMode = OldMode
    End If
End Sub

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3

والله هي فكرة عبقرية وعملية

بس كان نفسي يكون هناك طريقة مباشرة أفضل من ذلك ؟؟؟

علي العموم ، شكراً لحضرتك فهي تلبي الغرض

جزاك الله خير الجزاء

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#4

ظهرت لدي مشكلة !!!

مرفق لحضرتك المثال وأرجو التعديل عليه !!!

آسف جداً للإزعاج

Simble.rar

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#5

انا ايضاً ابنى تقاريري يدوياً وكنت استخدم هذه الطريقة لكنى وجدت انها ليست عملية على الإطلاق

فهي فقط تقوم بطباعة الصورة الظاهرة امامك .. فإذا كان الفورم خارج حدود الشاشة او غير ظاهر (في حالة رغبة المستخدم عمل طباعة مباشرة دون الحاجة لعرض التقرير) ففي هذه الحالة لن يتم طباعة سوى الجزء الظاهر من الفورم ..

في النهاية قمت بعمل Module يقوم بقراءة خصائص الادوات ورسمها يدوياً بدوال الرسم .. لكن حتى الآن يدعم فقط الادوات (TextBox, Label, Image, PictureBox, Line) ففي التقرير لا احتاج غير هذه الادوات .

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

#6

السلام عليكم...

السبب هو أن الـ DC مرتبط بمحتويات منطقة الشاشة التي تمثلها الـ DC حتى و إن لم تكن جزءاً من برنامجنا.

على أية حال، أتصور أن سبب محاولة إنشاء و طباعة تقرير بهذه الطرق هو عدم الرغبة في استعمال جدول في قاعد بيانات لحفظ البيانات التي سيتم عرضها، و إلا فإن تصميم تقرير مرتبط بجدول أو استعلام أسهل من استعمال أكواد برمجية لإنشاء التقرير يدوياً - رغم أني استعملت هذه الطرق في سنوات سابقة!

إذا كان الأمر كذلك فإنه يمكن إنشاء مجموعة سجلات (RecordSet) مؤقتة في الذاكرة، و تعبئتها بالبيانات، و ربطها بالتقرير، ثم عرض التقرير.

المثال المرفق يقوم على هذا الأساس، أي إنشاء RecordSet مؤقتة (في الذاكرة) ثم ربطها بـ DataGrid لعرض البيانات على الشاشة، و ربطها بتقرير (المثال يستعمل الـ DataReport) لغرض الطباعة - يوجد بعض الشرح بالعربي ضمن الكود.

NonDBRecordset.rar

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#7
najy_zl كتب:

السلام عليكم...

السبب هو أن الـ DC مرتبط بمحتويات منطقة الشاشة التي تمثلها الـ DC حتى و إن لم تكن جزءاً من برنامجنا.

على أية حال، أتصور أن سبب محاولة إنشاء و طباعة تقرير بهذه الطرق هو عدم الرغبة في استعمال جدول في قاعد بيانات لحفظ البيانات التي سيتم عرضها، و إلا فإن تصميم تقرير مرتبط بجدول أو استعلام أسهل من استعمال أكواد برمجية لإنشاء التقرير يدوياً - رغم أني استعملت هذه الطرق في سنوات سابقة!

إذا كان الأمر كذلك فإنه يمكن إنشاء مجموعة سجلات (RecordSet) مؤقتة في الذاكرة، و تعبئتها بالبيانات، و ربطها بالتقرير، ثم عرض التقرير.

المثال المرفق يقوم على هذا الأساس، أي إنشاء RecordSet مؤقتة (في الذاكرة) ثم ربطها بـ DataGrid لعرض البيانات على الشاشة، و ربطها بتقرير (المثال يستعمل الـ DataReport) لغرض الطباعة - يوجد بعض الشرح بالعربي ضمن الكود.

NonDBRecordset.rar

نرجو الاستفادة و السلام.

أولاً ، أنا أتعامل مع التقارير بواسطة Crystal Report عموماً

ثانياً ، عمل سجلات Recordset مؤقتة في الذاكرة ، فدي شغلتي أساساً ولعبتي وسهلة بعون الله

ثالثاً ، المثال المرفق مجرد مثال هدفه الأساسي تطوير الفكرة لشيء خاص بيا مش أكثر

هذه هي القصة أستاذي الكريم ،، مجرد مثال !!!

اقتباس
في النهاية قمت بعمل Module يقوم بقراءة خصائص الادوات ورسمها يدوياً بدوال الرسم .. لكن حتى الآن يدعم فقط الادوات (TextBox, Label, Image, PictureBox, Line) ففي التقرير لا احتاج غير هذه الادوات .

من الواضح أنني في النهاية سألجأ لذلك !!!

لكن كان بودي أجد طريقة تكون أسهل من ذلك !!!

شكراً لحضرتك

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 18 أكتوبر 2012 في 00:52

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…