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

كيفية طباعة فورم بدون ما تظهر الأزرار اللي فيه ؟!

مغلق
بدأه المدمر007 في 30 يونيو 2007 · 13 رد · 4,453 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحباً أخواني

بداية اعتذر على هالغيبة الطوووووووويلة

حيث كنت في دورة عن الشبكات ، وبعيداً عن النت !!!!!!

هالمرة سؤالي هذا على الطاير ...

حيث عندي برنامج من فورم واحد ... مكون من عدة تيكسات وليبل وأزرار...

أريد عندما اضغط على زر الطباعة ، أن يطبع الفورم بدون ما يظهر الأزرار بالورقة المطبوعة ...

حاولت أني أسوي بحدث الطباعة إخفاء لهذه الأزرار .. بس لاحظت عندي مشكلة ، هي كيف اخرج من البرنامج بعدما يطبع ( بينما أزرار الخروج مخفية )

أرجو منكم مساعدتي في ذلك ...

وبالمرة إذا في كود يضبط موقع الفورم في الورقة ...

وكذلك سؤال دخيل ... عندما اضغط على إشارة X بأعلى الفورم أريد تطلع لي رسالة تأكيد على الخروج ، مثل الرسالة اللي نحطها بزر الخروج : " هل تريد الخروج حقاً ؟!! "

ودمتم سالمين

#2

مرحبا أخي

إجابة السوال الأول = في كوماند الطباعة ضع الكود التالي

Coammand1.visible=false
form1.printform
command1.visible=true

يعني تخفي الزرار أول شي ومن ثم تقوم بطباعة الفورم ثم تظهر الزرار ثانياً .

إجابة السؤال الثاني = نفس الكود الذي تضعه في كوماند خروج ويظهر رسالة للمستخدم ..

ضعه في الفورم في الحدث Unload

يعني لما تضغط دبل كلك على الفورم يفتح شاشة الكود الخاصة بالفورم والحدث الإفتراضي Load

أختر الحدث Unload وضع الكود به .. تحياتي

#3

ولكن أخي العزيز بالنسبة للسؤال الثاني وهو إظهار رسالة لتأكيد الخروج عند ضغط على زر الخروج من الفورم

لايمكن كتابة كود إظهار الرسالة msgbox في حدث unload لأن مهما كان اختيار المستخدم موافق أو لا سيتم سيقع حدث أغلاق الفورم وبالتالي إغلاق البرنامج إذا كان هذا الفورم الفورم الرئيسي للبرنامج لذا لا يمكن إيقاف حدث الإغلاق وهذه أحد عيوب فيجوال بيسك

من الممكن التغلب على هذا العيب من خلال استخدام دوال ال api كالآتي

نقوم بإنشاء موديل جديد نسميه handler نكتب داخله الأكواد التالية

 Private Declare Function setwindowlong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function callwindowproc Lib "user32" Alias "CallWindowProcA" (ByVal ip As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wparam As Long, ByVal lparam As Long) As Long
Private Const gh = -4
Private gw As Long
Private ip As Long
Public Function windowproc(ByVal hwnd As Long, ByVal umsg As Long, ByVal wparam As Long, ByVal lparam As Long) As Long
Debug.Print hwnd, umsg, wparam, lparam
If umsg = 161 And wparam = 20 Then
If MsgBox("åá ÊÑíÏ ÈÇáÊÃßíÏ ÇáÎÑæÌ ãä ÇáÈÑäÇãÌ", vbOKCancel, "") = vbOK Then
unhook
Unload Form1
End If
End If
windowproc = callwindowproc(ip, hwnd, umsg, wparam, lparam)
End Function
Public Sub sethook()
ip = setwindowlong(gw, gh, AddressOf windowproc)
End Sub
Public Sub unhook()
setwindowlong gw, gh, ip
End Sub
Public Sub gwnd(ByVal hwnd As Long)
gw = hwnd
End Sub

وفي الفورم نكتب الكود التالي :

 Private Sub Form_Load()
gwnd (Me.hwnd)
Call sethook
End Sub

If you want to learn programming start with C++

#4

تستطيع انشاء فورم بحجم مسج بوكس وتكتب فيها بالعربي وفي حدث unload اكتب :

frmmsg.show
me.hide

في فورم المسج اجعل زران (نعم , لا )

كود زر نعم

اقتباس
unload frmmain

unload me

كود زر لا

me.hide
frmmain.show
startingprogremmer.jpg
#5

مرحبا

تم تعديل هذه المشاركة بواسطة محمدvb في 1 يوليو 2007 في 15:44

#6

يعطيكم العافية أخواني

وجزيل الشكر لك أخوي { محمدvb }

الكود الخاص بزر الطباعة اللي افدتني به ، نفع معي ومشى 100% :D

بس عندي ملاحظة : بعض الأجهزة التي تعطيها امر طباعة، لا يحدث معها شيء، لا تبين ولا تعطيك اشارة بأنها بالفعل تلقت أمر الطباعة

هل يوجد كود معين يقوم بالتأكد إذا تم طباعة المستند أو لا ... ومن ثم يبلغك بأن العملية نجحت أو أن هناك عطل ما بالطابعة ؟!!

وبالنسبة لإجابة السؤال الخاص بالخروج ، فكما قال أخونا { the programmer 1 } بأنه لا ينفع بحدث unload

ولكن أخي { the programmer 1 } الا يوجد طريقة أخرى غير التي ذكرتها بدل استخدام دوال ال api

فأنا اعتقد أنه ربما توجد طريقة أخرى أكثر بساطة :rolleyes:

أخي { مبرمج مبتدا } اشكرك على تفاعلك ومشاركتك .. إلا أن صنع فورم مسج لا اعتقد بأنه برمجة احترافية، ويمكن ملاحظة الفرق بسهولة ;)

اشكركم أخوتي على تفاعلكم ...

ومازال السؤال الثاني قائم

#7

مرحباً شباب ..

كأن الموضوع برد :D

حد يعطينا حل سؤال:

كيف يتأكد البرنامج من وجود طابعة عند إعطاء أمر الطباعة، وفي حالة عدم وجود طابعة ( الطابعة مغلقة أو عطلانة أو غير موصلة ، إلخ ... ) يعطي رسالة ؟!!!

السؤال الذي مازال قائم أيضاً هو : زر الـX الذي تطلع رسالة تأكيد الخروج ، عندما يتم الضغط عليه لإغلاق البرنامج ؟!!

ودمتم بعافية

#8
Public Function PrinterExist() As Boolean

On Error GoTo Err_Trap
Dim i As Integer

i = Printers.Count

If i <> 0 Then
		PrinterExist = True
	Else
		PrinterExist = False
End If

Exit Function
Err_Trap:
PrinterExist = False

End Function
#9

فقط بدل حدث Unload ب Query Unload

وبذلك لك التحكم الكامل فى الاغلاق

#10

أخي { msayed2004 }

ما مشى معي الكود، فهل شرحته لي.. أو وضحته أكثر من ناحية أين الرسالة اللي تطلع تبين للمستخدم بأن الطابعة قد تكون في أحد الحالات التالية:-

1- غير متصلة No Connecting

2- مغلقة Off-Line

3 - معطلة Disable

4- الطابعة لا تستجيب نظراً لتعارض إعدادات التقرير الصادر مع اعدادات الطابعة Conflict Setting

كأن تكون اعدادات طباعة التقرير بالشكل الأفقي (العرض) والطابعة اعداداتها بالشكل الرأسي ( بالطول)

بالنسبة للزر X

إليكم الملف المرفق، يوضح الكود البسيط الذي أضعه لتأكيد الخروج من أي برنامج أعمله.

Private Sub CmdExit_Click()
   Dim ex As String
	ex = MsgBox("!! هل تريد الخروج من البرنامج ؟", vbMsgBoxRight + vbYesNo + vbQuestion, "!! تأكيد خروج")
	If ex = vbYes Then
		End
	End If
End Sub

ولأني أريد نفس الرسالة تصدر عند الضغط على زر الـX أشار الأخ { ASDen } إلى أن أضع نفس الكود في حدث UnloadQuery وضعته بالشكل التالي:-

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Dim ex As String
	ex = MsgBox("!! هل تريد الخروج من البرنامج؟ ", vbMsgBoxRight + vbYesNo + vbQuestion, "!! تأكيد خروج")
	If ex = vbYes Then
		End
	End If
End Sub

هو صح مشى ... بس حتى لو ضغط على الزر No يتم إغلاق البرنامج، فكيف يمكن تجنب هذا الخطأ ؟!!!

ExitMsgBox.rar

تم تعديل هذه المشاركة بواسطة المدمر007 في 18 أغسطس 2007 في 09:23

#11
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Dim ex As String
	ex = MsgBox("!! هل تريد الخروج من البرنامج؟ ", vbMsgBoxRight + vbYesNo + vbQuestion, "!! تأكيد خروج")
	If ex = vbYes Then
				End
		Else
				Cancel = True ' <------------------------------------------
	End If
End Sub

أنت طلبت كود لمعرفة أن كان فيه Printer و لا لأ مش ده كله.

راجع الـ API Guide يمكن تلاقى دوال تفيدك.

#12
msayed2004 كتب:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Dim ex As String
	ex = MsgBox("!! هل تريد الخروج من البرنامج؟ ", vbMsgBoxRight + vbYesNo + vbQuestion, "!! تأكيد خروج")
	If ex = vbYes Then
				End
		Else
				Cancel = True' <------------------------------------------
	End If
End Sub

أنت طلبت كود لمعرفة أن كان فيه Printer و لا لأ مش ده كله.

راجع الـ API Guide يمكن تلاقى دوال تفيدك.

يعطيك الله العافية أخوي الحبيب { msayed2004 }

أشكرك جزيل الشكر، على حل لغز زر الـX :D

إمكن يالغالي .. تقول : زودتها !!!!

بس أنا كنت ذاكر هالسؤال الخاص بزر الـX على أنه سؤال دخيل بأول الموضوع ;) .

وزي ما أنت قلت أنا أبحث عن كود إذا كانت الطابعة متوفرة أو لا .. وهذا ما أريد معرفته بالوقت الحالي

لأن برنامجي ، عندما يعطي أمر الطباعة، ولا يجد الطابعة أراه يسكت ولا حس ولا خبر ( فلا أدري هل بالفعل أمر الطباعة راح ولا علق !!! )

وببعض الأجهزة تطلع رسالة بجنب الساعة بأن هناك خطأ في الطباعة Printing Error

بس ما يوضح شو سبب الخطأ !!!

فهل يمكنك مساعدتي بذلك .. ولك كل الشكر وخالص الدعاء بإذن الله تعالى.

تم تعديل هذه المشاركة بواسطة المدمر007 في 19 أغسطس 2007 في 12:29

#13
Printer Status
#14

اشكرك أخي الحبيب { msayed2004 }

بس إذا ما في بنفسك ضيقة .. ممكن تعطيني نبذة مختصرة عن الأكواد بـPrinter Status

حيث أني أجهل : أين اضعها بالضبط ؟ وما هو دورها بالضبط ؟

هذا الموضوع مغلق.

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

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

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

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

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