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

طريقة لتمكين السكرول في الأداة (فليكس غريد) عن طريق دوال Api

بدأه عبد العزيز اليوسفي في 15 سبتمبر 2008 · 5 رد · 999 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كنت أعمل على أداة البيانات MSFlexGrid وأردت أفادتكم لمن يسأل عن تحريك الشريط الجانبي للأداة بسكرول الماوس أي لاظهار البيانات للأسفل وللأعلى بدولاب الماوس ،وتم برمجة الطريقة بأستعمال دوال API على الشكل التالي:

' في المودل:

Public oldWndProc  As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal Hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = -4
Dim Cont As Integer

Public Function MyWndProc(ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
	If wMsg = 522 Then
		With Form1.MSFlexGrid1
		   Cont = .TopRow
				Select Case wParam
					Case 7864320
						Cont = Cont - 1
					Case -7864320
						Cont = Cont + 1
				End Select
		   If Cont = 0 Then Cont = 1
		   .TopRow = Cont
		End With
	End If
MyWndProc = CallWindowProc(oldWndProc, Hwnd, wMsg, wParam, lParam)
End Function

وفي الفورم :

Private Sub MSFlexGrid1_GotFocus()
'أبدأ القنص
oldWndProc = SetWindowLong(Me.Hwnd, GWL_WNDPROC, AddressOf MyWndProc)
End Sub

Private Sub MSFlexGrid1_LostFocus()
'إنتهاء القنص
oldWndProc = SetWindowLong(Me.Hwnd, GWL_WNDPROC, oldWndProc)
End Sub

تم أستدعاء الدالة في حدث نقل التركيز لأمرين : للتخفيف من موارد النظام ولتعمل فقط على هذه الأداة

مرجع الدالة http://www.geocities.com/SiliconValley/Lab/1632/atch12.html

والله الموفق ..

مرفق المثال :

Scroll_with_API.rar

1
#2

بارك الله فيك وفى علمك

00
 

فاضى 

 

00

#3

تشكر أخي ولكن ماأملك من العلم إلا القليل فهناك من هو أعلم مني بكثير

#4

الاخ العزيز الفاضل

بعد التحيه

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

فانا ارجو منك بشده ان كان عنك حل فى هذا

كيف اخلى الاشاره تنزل اى الصف الثانى من الجريد وتقف فيه فى اى حدث مثل الانتر

واكون شاكر فضلك

وشكرا كثير على المعلومه التى استفدت منها كثر وسالت فيها كثيرا ولم اجد اجابه

سلامه

#5

أهلا بك أخي الكريم

يمكنك أستخدام SendKeys كمايلي :

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
 If KeyAscii = 13 Then SendKeys "{down}"
End Sub
#6

الاخ العزيز الفاضل الاستاذ / عبد العزيز

طبعا الشكر كل الشكر على مجهودك الجبار والاضافة المهمه للفليكسد جريد

فعلا انا استفدت من هذه الخاصيه كثيرا

ولكن لى رجاء بما انك متمكن فى الفليكسد جريد انا عاوز الكود الموجود فى المديول يكون عام لاى فورم

بمعنى اخر

انا عندى اكثر من فورم وبه نفس اسم الجريد (يعنى اسم الجريد موحد فى كل فورم )

واريد كود واحد فى المديول ينادى عليه من اى فورم به الجريد

اذا كان هذا ممكن اكون شاكر فضلك وتقولى عليه

سلامه بيومى

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

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

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

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

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